【发布时间】:2011-10-13 17:24:44
【问题描述】:
这是 MVVM 项目。我在它的项目中有一个带有 TabControls 的 ListBox。每个 TabControl 的 TabItem 都不同,并且是从 ViewModel 绑定的:
<TabControl ItemsSource="{Binding Tabs}"
</TabControl >
标签是:
public ObservableCollection<TabItem> Tabs
{ get { return tabs; }
set {
tabs = value;
value.CollectionChanged += delegate
{
OnPropertyChanged("Tabs");
};
OnPropertyChanged("Tabs"); } }
选项卡仅通过以下方式填充一次:
Tabs = new ObservableCollection<TabItem>();
if (details.Image != null || !String.IsNullOrEmpty(details.Summary))
Tabs.Add(new TabItem() { Header = "General Info", Content = new GeneralInfo() { DataContext = ItemDetails } }); ........... 6 different types
这是关于我所拥有的一些信息。然后我动态更改此 TabControls 的 DataContext 以模拟滚动。
来自 ViewModel 的所有信息都绑定到控件中,但是 TabControl 存在问题。标头已绑定。但内容没有。所有标题都被取消选择,并且 TabCntrol 内容区域为空。
我尝试在 SelectedIndex 和 SelectedItem 上进行 TwoWayBinding,但它没有帮助.... 似乎 SelectedIndex 没有做任何可以选择 TabItem 的事情。 并且 SelectedItem 不起作用,因为我认为在每次更改数据上下文后它都有新的参考。因为 TabControl.ItemsSource 重新绑定并创建了新的 TabItems。
也许有人解决了同样的问题并且知道解决方案?
谢谢
【问题讨论】:
-
为什么每次Collection 发生变化时都会出现“Tabs”?这对我来说没有多大意义。 ObservableCollection 已经通知了集合内的特定更改(添加、删除等),而这些更改,您告诉 UI “忘记集合,获取我的新集合”。如果您的集合完全改变了,是的,如果没有,则提高“选项卡”,并且集合中的某些内容更改不会做任何事情,这就是 ObservableCollection 自动完成的工作。
-
当然,谢谢,我的错误。但它并没有解决实际问题:)
标签: c# binding mvvm tabcontrol datacontext