2010-04-28 53 views

回答

2

我相信下面的代碼可以作爲如何解決您的問題的一個例子。在這個例子中,MyCollection是一個屬性ViewModel對象。 ViewModel實現INotifyPropertyChanged接口。

private void AddCollectionListener() 
    { 
     if (MyCollection != null) 
     { 
      MyCollection.CollectionChanged += 
       new System.Collections.Specialized.NotifyCollectionChangedEventHandler(MyCollection_CollectionChanged); 
     } 
    } 

    void MyCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
     // Remove Listeners to each item that has been removed 
     foreach (object oldItem in e.OldItems) 
     { 
      ViewModel viewModel = oldItem as ViewModel; 

      if (viewModel != null) 
      { 
       viewModel.PropertyChanged -= viewModel_PropertyChanged; 
      } 
     } 

     // Add Listeners to each item that has been added 
     foreach (object newItem in e.NewItems) 
     { 
      ViewModel viewModel = newItem as ViewModel; 

      if (viewModel != null) 
      { 
       viewModel.PropertyChanged += new PropertyChangedEventHandler(viewModel_PropertyChanged); 
      } 
     } 
    } 

    void viewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     // TODO: Property Changed Logic 

     switch (e.PropertyName) 
     { 
      case "MyPropertyName": 
       // TODO: Perform logic necessary when MyPropertyName changes 
       break; 
      default: 
       // TODO: Perform logic for all other property changes. 
       break; 
     } 
    } 
+0

我已編輯了代碼以顯示我放置我的數據的方式。是否有可能知道對象的更新,而不是對象的添加和刪除。 – developer 2010-04-28 20:42:34

+1

只要ViewModel上的屬性發生更改(引發PropertyChanged事件的任何屬性),viewModel_PropertyChanged處理程序就會被調用。通常你會添加一個switch語句來打開e.PropertyName。我更新了代碼以顯示一個示例,其中MyPropertyName是一個或多個ViewModel中存在的屬性。 – 2010-04-29 20:46:12

+0

謝謝soooo much .. – developer 2010-04-29 20:51:03

相關問題