首页 > 解决方案 > 将视图模型集合绑定到 WPF MVVM TabControl

问题描述

我有一个 ViewModel 集合,我想绑定到ItemsSourcea 的属性TabControl并能够动态添加/删除它们,因此已实现为Observable<TabViewModel>.

然而,TabControl似乎期望继承自的类型TabItem,这是一个视觉控制对象。我不希望我的 ViewModel 继承自TabItem,因为这意味着它们需要绑定到可视化实现,并且所有测试都需要作为 STA 运行。

如何绑定 ViewModel 集合以填充选项卡控件的标题和内容而不依赖于TabItem对象?即仅使用我认为基于 ViewModel 类型的样式和模板。就像如果您有一个ListBox并希望项目直接从视图模型实例中渲染,使用特定的模板,这很容易通过覆盖ItemTemplate属性来实现。

我如何在TabControl不使用的情况下做到这一点TabItem

标签: c#wpfxamlmvvm

解决方案


如何绑定 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 类。


推荐阅读