2010-04-28 55 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

相关问题