2013-08-23 140 views
0

我有2个用户控件称为“MyTree”和“MyGrid”。 我有另一个名为“内容”的用户控件,里面有一个“MyTree”和“MyGrid”。 我有一个带有选项卡控件的窗口。 每个标签项都包含“内容”。标签项目是动态添加的。 所以当我动态地创建一个标签项目时,如何添加项目到“MyGrid”。 我使用MVVM模式和INotifyPropertyChanged事件 Iam将项源设置为某些属性。WPF,MVVM绑定ViewModel-属性嵌套用户控件

现在我的 “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

发表一些代码,很难设想你描述的是什么。 – GrandMasterFlush

+0

由于一些安全问题,我无法显示代码。 – WpfBegnner

回答

1

可能你有一个ViewModel的集合,其中每个ViewModel都是某个Tab的DataContext。那么这个ViewModel应该有另一个可以用作Grid或Tree的DataContext的集合。

+0

行..感谢提示...由于我错误地保持意见集合,而不是viewmodels ..我希望这将解决我的问题..谢谢你们两个 – WpfBegnner

+0

这样做后,我得到了一些其他的错误....在从另一个视图模型设置视图模型的属性后,我的“PropertyChanged!= null”始终是NULL ..所以UI没有更新..可能是什么原因?

+0

对不起,但我不明白你想说什么。你能在这里写一个例子吗? – dmitrygrig

1

如果PropertyChanged为空,则表示没有任何内容绑定到视图模型。在您的XAML中,您需要使用{Binding ...}语法将属性绑定到视图模型的实例,以便在更新视图模型上的属性时发生任何事情。

您可能已经有了一些绑定,但您可以调试这些绑定以了解绑定失败原因的更多信息。有几种方法可以做到这一点,但一种方法是将PresentationTraceSources.TraceLevel=High添加到绑定中。例如: -

ItemsSource="{Binding Items, PresentationTraceSources.TraceLevel=High}" 

WPF然后将写入该特定结合调试窗口绑定跟踪信息。