这是MVVM项目。我有一个带有TabControls的ListBox。 TabItems对于每个TabControl都是不同的,并且是从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。
也许有人解决了同样的问题并知道解决方案?
由于
答案 0 :(得分:0)
我已经解决了我的问题。 问题是我使用控件作为DataContext: - TabItems列表 - TabItems内容中的控件 有一些过程,我不会完全理解。但是,想法是,当DataContext发生变化时,可以将一个DataContext分配给2个不同的TabControl。由于UI控件在同一时刻不能属于2个父节点,因此,绑定应该表明内容中的DataContext控件不起作用。并没有抛出刺激(导致它的约束微笑| :))
因此,我从DataContext中删除了多个UI对象,并添加了对象模型。并创建显示为这些对象模型的视图的UserControl