【问题标题】:WPF TabControl DatabindingWPF TabControl 数据绑定
【发布时间】:2009-03-26 14:39:16
【问题描述】:

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

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

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

选项卡控件应该为每个 PageModel 显示一个选项卡。

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

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

我怎样才能达到这个结果?

【问题讨论】:

    标签: wpf data-binding tabcontrol


    【解决方案1】:
    <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}"/>
    

    【讨论】:

    • 很棒的解决方案。一件更方便的事情是将 Header Value 设置为 {Binding Title} 并将 Content Value 设置为 {Binding .}。这允许您在每个页面中仅使用一个视图模型,并为标题设置一个 Title 属性。
    【解决方案2】:

    我还使用 ItemTemplate 和 ContentTemplate 找到了解决此 here 的另一个解决方案。

    对于像我这样的任何 WPF 新手来说,在经历了一些头痛和沮丧之后,我意识到页面模型的集合需要是 ObservableCollection&lt;PageModel&gt; 而不是 List&lt;PageModel&gt;,否则对列表的任何更改都不会反映在选项卡上(即,如果标签是列表,则不能添加或删除标签)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-21
      • 2021-10-27
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 2015-01-04
      • 2011-09-24
      相关资源
      最近更新 更多