我有2个用户控件,名为" MyTree"和#34; MyGrid"。 我有另一个名为" Content"的用户控件。其中有一个" MyTree"和#34; MyGrid"在里面。 我有一个带有标签控件的窗口。 每个标签项都包含"内容"。标签项是动态添加的。 那么如何将项目添加到" MyGrid"当我动态创建标签项时。 我使用MVVM模式和INotifyPropertyChanged事件 我将项目源设置为某个属性。
现在我的" ContainerPanelViewModel"具有
private string pro11 ;
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
MessageBox.Show("Enterd loop");
PropertyChanged(this, e);
}
}
public string pro1
{
get
{
return pro11;
}
set
{
if (pro11 != value)
{
pro11 = value;
OnPropertyChanged(new PropertyChangedEventArgs("pro1"));
}
}
}
我有另一个有
的视图模型ObservableCollection<ContainerPanelViewModel> RootNodeTabCollection
我添加了
RootNodeTabCollection[0].pro1 = "abc";
但标签内容未获得更新
if (PropertyChanged != null)
总是假的,而不是进入循环。
随时不显示消息框答案 0 :(得分:1)
可能你有一个ViewModel集合,其中每个ViewModel都是某个Tab的DataContext。然后,此ViewModel应该有另一个集合,可以用作Grid或Tree的DataContext。
答案 1 :(得分:1)
如果PropertyChanged
为null,则表示视图模型没有绑定任何内容。在XAML中,您需要使用{Binding ...}
语法将属性绑定到视图模型的实例,以便在更新视图模型上的属性时发生任何事情。
您可能已经有一些绑定,但您可以调试这些绑定以了解绑定失败的原因。有几种方法可以做到这一点,但一种方法是将PresentationTraceSources.TraceLevel=High
添加到绑定。 E.g:
ItemsSource="{Binding Items, PresentationTraceSources.TraceLevel=High}"
然后,WPF会将该特定绑定的绑定跟踪信息写入调试窗口。