我使用 TabItem 创建 TabControl 以在选项卡之间切换。当我将新元素添加到列表 ObservableCollection 项目时,会显示新选项卡。我必须在 TabItemViewModel 中向 LanguageTextViewModel 添加继承,因为 IDE 向我显示信息
<块引用>BindingExpression 路径错误:找不到“languageTexts”属性 '对象' ''TabItemViewModel'
问题是选项卡显示正确,但我的标签应该只有 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();
}
}
}