【问题标题】:How to bind to Tabcontrol.Items如何绑定到 Tabcontrol.Items
【发布时间】:2011-11-04 03:42:45
【问题描述】:

我有一个 WPF 应用程序,我正在尝试将项目动态添加到选项卡控件。我有一个菜单项列表,这些菜单项应该数据绑定到 tabcontrol 的项目。唯一的问题是 TabControl.Items 不会通知其他人已添加项目。我已经通过绑定而不是绑定到 TabControl.Items.Count 并获取对转换器的调用来测试这一点(但传入的值是计数而不是有用的东西)。以下是由于 Items 未调用更新而无法正确获取数据绑定的相关代码:

<MenuItem ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabControl}}, Path=Items, Converter={StaticResource TabControlItemConverter}}">

此 MenuItem XAML 位于 TabControl 的 ControlTemplate 内。对于静态项目,即已经在 TabControl 中定义的项目,此代码可以完美运行。但是我有一个 TabControl 可以在运行时添加项目并且似乎无法更新此绑定。有没有人将某种附加属性添加到可以绑定到 Items 集合的 TabControl 中?

编辑背景信息 已添加项目的 TabControl 是一个区域(这是一个 Prism 应用程序)。这是相关的 XAML

<TabControl cal:RegionManager.RegionName="{x:Static local:LocalRegionNames.SelectedItemRegion}" >
            <TabControl.Resources>
                <Style TargetType="TabItem" BasedOn="{StaticResource TabItemStyle}">
                    <Setter Property="HeaderTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <Image Style="{StaticResource tabItemImage}" Height="20" />
                                    <TextBlock Text="{Binding Content.DataContext.TabHeader, RelativeSource={RelativeSource AncestorType=TabItem}}" VerticalAlignment="Center" />
                                </StackPanel>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </TabControl.Resources>
        </TabControl>

区域添加视图的相关代码在这里:

ProjectDetailView view = new ProjectDetailView();
ProjectDetailViewModel viewModel = new ProjectDetailViewModel();
viewModel.CurrentProject = project;
view.DataContext = viewModel;



 IRegionManager retManager = RegionManager.Regions[LocalRegionNames.SelectedItemRegion].Add(view, null, true);
   RegionManager.Regions[LocalRegionNames.SelectedItemRegion].Activate(view);

所有这一切都很好......添加了视图,选项卡控件添加了项目,并出现了视图。但选项卡控件上的 Items 属性从不广播对其集合的更改。

【问题讨论】:

    标签: wpf xaml data-binding


    【解决方案1】:

    你对TabControls做同样的事情,你绑定ItemsSource,你唯一需要考虑的是源集合应该实现INotifyCollectionChanged,如果你想在添加项目时更新它。 ObservableCollection&lt;T&gt; 已经实现了接口并且经常被用作此类绑定的源代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-30
      • 2015-03-10
      • 2014-11-25
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多