c# - 将视图模型集合绑定到 WPF MVVM TabControl
问题描述
我有一个 ViewModel 集合,我想绑定到ItemsSource
a 的属性TabControl
并能够动态添加/删除它们,因此已实现为Observable<TabViewModel>
.
然而,TabControl
似乎期望继承自的类型TabItem
,这是一个视觉控制对象。我不希望我的 ViewModel 继承自TabItem
,因为这意味着它们需要绑定到可视化实现,并且所有测试都需要作为 STA 运行。
如何绑定 ViewModel 集合以填充选项卡控件的标题和内容而不依赖于TabItem
对象?即仅使用我认为基于 ViewModel 类型的样式和模板。就像如果您有一个ListBox
并希望项目直接从视图模型实例中渲染,使用特定的模板,这很容易通过覆盖ItemTemplate
属性来实现。
我如何在TabControl
不使用的情况下做到这一点TabItem
?
解决方案
如何绑定 ViewModel 的集合以填充选项卡控件的标题和内容,而不依赖于 TabItem 对象?
尝试这个:
看法:
<TabControl ItemsSource="{Binding Items}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Header}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<TextBlock Text="{Binding Content}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
查看型号:
public class TabViewModel
{
public TabViewModel()
{
Items = new ObservableCollection<Item>()
{
new Item { Header = "a", Content = "..." },
new Item { Header = "b", Content = "..." },
new Item { Header = "c", Content = "..." },
};
}
public ObservableCollection<Item> Items { get; set; }
}
Item
是 POCO 类。