【发布时间】:2015-09-06 07:28:19
【问题描述】:
我有一个TabControl
我按照here 的答案选择了这封信。问题是,在我的情况下,ExistingTabs 不是 ObservableCollection,而是 ObservableCollection 的 property:
Public Class TestData : INotifyPropertyChanged // and the required event handler is there also, not shown here
{
public TabItem tiTestTab {get; set;}
// another dozen properties
}
和
public class ReportData
{
public static ObservableCollection<TestData> testData {get;set;}
// another dozen properties
}
这就是我所做的:
<Window.Resources>
<CollectionViewSource x:Key="ExistingTabs" Source="{Binding Path=(local:ReportDataSet.testData), Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Window.Resources>
<TabControl>
<TabControl.ItemsSource>
<CompositeCollection>
<TabItem>SomeSpecialItem</TabItem>
<CollectionContainer Collection="{Binding Source={StaticResource ExistingTabs}}"/>
</CompositeCollection>
</TabControl.ItemsSource>
</TabControl>
当然,这会将 testData 放置在选项卡中,而不是 tiTestTab 属性中。
我很茫然。
最好是仅 XAML。 使用 C# 和 Visual Studio 2013。
谢谢。
【问题讨论】:
-
你是想要 TwoWay 绑定来收集,还是足够 OneWay 绑定?
-
@VMaleev:单向就足够了。选项卡控件没有“删除”功能,所有的变化都是从 observablecollection 到 UI 发生的。
-
还有一个:你真的需要 testData 是静态的吗?
-
我认为有错字:public class ReportData 应该是 public class ReportDataSet?
-
静态:是的。对不起。关于 ReportData - 不。它是一个包含大量信息的对象,其中一个是 testData。
标签: c# wpf binding tabcontrol compositecollection