2013-08-23 188 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然後將寫入該特定結合調試窗口綁定跟蹤信息。