我正在尝试构建一个包含TabControl和TextBlock的WPF用户界面。
我想将这两个控件绑定到以下类的基础实例集合:
class PageModel
{
public string Title {get;set;}
public string TabCaption {get;set;}
public FrameworkElement TabContent {get;set}
}
选项卡控件应显示每个PageModel的选项卡。
TextBlock应显示当前所选标签的标题。
如何实现这一结果?
答案 0 :(得分:63)
<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 :(得分:7)
我还使用ItemTemplate和ContentTemplate找到了这个here的另一个解决方案。
对于像我这样的任何WPF新手,在经历了一些令人头疼和沮丧之后,我意识到页面模型的集合需要是ObservableCollection<PageModel>
而不是List<PageModel>
,否则对列表的任何更改都不会是由标签反映(即如果是列表,则无法添加或删除标签)。