c# - C# WPF TabControl 模板继承问题
问题描述
我使用 TabItem 创建 TabControl 以在选项卡之间切换。当我添加新元素以列出 ObservableCollection 项时,会显示新选项卡。我必须在 TabItemViewModel 中向 LanguageTextViewModel 添加继承,因为 IDE 向我显示信息
BindingExpression 路径错误:在“对象”“TabItemViewModel”上找不到“languageTexts”属性
问题是选项卡正确显示,但我的标签应该只有 AppName.TabItem.ViewModel 但我在 XAML 数据上下文中将它添加到 LanguageTextViewModel。
<TabControl ItemsSource="{Binding Path=languageTexts}">
<TabControl.DataContext>
<local:LanguageTextViewModel/>
</TabControl.DataContext>
XAML:
<Grid>
<Grid.DataContext>
<local:TabControlViewModel/>
</Grid.DataContext>
<TabControl ItemsSource="{Binding Items}">
<TabControl.ItemTemplate>
<DataTemplate>
<TabItem Header="{Binding Name}" IsSelected="{Binding IsSelected}" MouseLeftButtonUp="TabItem_MouseLeftButtonUp">
<TabControl ItemsSource="{Binding Path=languageTexts}">
<TabControl.DataContext>
<local:LanguageTextViewModel/>
</TabControl.DataContext>
<TabControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Label Content="{Binding Path=ownedVersion}" HorizontalAlignment="Left" Margin="10,5,0,0" VerticalAlignment="Top" FontSize="18"/>
</StackPanel>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
</TabItem>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
</Grid>
C# TabControlViewModel
public class TabControlViewModel
{
public ObservableCollection<TabItemViewModel> Items { get; set; } = new ObservableCollection<TabItemViewModel>
{
new TabItemViewModel {Name="Tab 1", IsSelected = true },
new TabItemViewModel {Name="Tab 2" },
new TabItemViewModel {Name="Tab 3" },
new TabItemViewModel {Name="Tab 4" },
};
}
C# TabItemViewModel
public class TabItemViewModel : LanguageTextViewModel
{
public string Name { get; set; }
private bool isSelected;
public bool IsSelected
{
get { return isSelected; }
set
{
isSelected = value;
DoSomethingWhenSelected();
}
}
private void DoSomethingWhenSelected()
{
if (isSelected)
Debug.WriteLine("You selected " + Name);
}
}
C# LanguageTextViewModel
public class LanguageTextViewModel
{
public ObservableCollection<LanguageTexts> languageTexts { get; private set; } = new ObservableCollection<LanguageTexts>();
}
C# 语言文本
public class LanguageTexts : INotifyPropertyChanged
{
private string _ownedVersion;
public string ownedVersion
{
get
{
return _ownedVersion;
}
set
{
if (value != _ownedVersion)
{
_ownedVersion= value;
OnPropertyChanged();
}
}
}
解决方案
推荐阅读
- c# - IFormFile 拒绝从 vue 上传
- php - 我想为除管理员之外的所有用户隐藏自定义 yith pos 选项卡。我怎样才能做到这一点?
- express - express - 从子目录发送文件
- r - 如何从变量中提取前四个数字?R
- python - 将 mapbox 样式图层添加到 folium chorpleth
- javascript - 取消卸载承诺中的多个承诺?
- python - 按每个唯一列值的最近日期过滤 Pandas 数据框
- python - Pygame - 返回碰撞位置
- javascript - 在 vue 中使用 $emit 由 setTimeout 分隔多次无法按预期工作
- c - 在c中以十六进制打印无符号长