WPF TabControl 数据绑定

27

我正在尝试构建一个包含TabControl和TextBlock的WPF用户界面。

我想将这两个控件绑定到以下类的基础实例集合:

class PageModel
{
  public string Title {get;set;}
  public string TabCaption {get;set;}
  public FrameworkElement TabContent {get;set}
}

标签控件应该显示每个PageModel的选项卡。

  • 每个选项卡的标题应该显示TabCaption属性
  • 每个选项卡的内容应该是TabContent属性。

TextBlock应该显示当前选中选项卡的标题。

我该如何实现这个结果?

2个回答

64
<TabControl x:Name="_tabControl" ItemsSource="{Binding PageModels}">
    <TabControl.ItemContainerStyle>
        <Style TargetType="TabItem">
            <Setter Property="Header" Value="{Binding TabCaption}"/>
            <Setter Property="Content" Value="{Binding TabContent}"/>
        </Style>
    </TabControl.ItemContainerStyle>
</TabControl>
<TextBlock Text="{Binding SelectedItem.Title, ElementName=_tabControl}"/>

1
很棒的解决方案。另一个方便的方法是将Header Value设置为{Binding Title},将Content Value设置为{Binding .}。这样可以在每个页面上只使用一个ViewModel,并使用标题属性来设置标题。 - Wouter

8

我还找到了另一种解决方案,在这里使用了ItemTemplate和ContentTemplate。

对于像我这样的WPF新手,经过一些头痛和挫折,我意识到页面模型的集合需要是ObservableCollection<PageModel>而不是List<PageModel>,否则列表的任何更改都不会反映在选项卡中(例如,如果它是一个列表,则无法添加或删除选项卡)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接