【发布时间】: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