2013-07-25 68 views
0

我已經使用下面的代碼片段創建綁定到DataGrid的ObservableCollection。收藏改變了兒童財產的事件

public class Test:INotifyPropertyChanged 
    { 

     private string _name; 
     public string Name 
     { 
      get { return _name; } 
      set { _name = value;OnpropertyChanged("Name"); } 
     } 

     private string _city; 
     public string City 
     { 
      get { return _city; } 
      set 
      { 
       _city = value;OnpropertyChanged("City");} 
     } 


     #region INotifyPropertyChanged Members 

     public event PropertyChangedEventHandler PropertyChanged; 
     public void OnpropertyChanged(string propertyName) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if (handler != null) 
      { 
       var e = new PropertyChangedEventArgs(propertyName); 
       handler(this, e); 
      } 
     } 
     #endregion 
    } 

class Data:INotifyPropertyChanged 
    { 

     private int customerID; 

     public int CustomerID 
     { 
      get { return customerID; } 
      set { customerID = value; OnpropertyChanged("CustomerID"); } 
     } 

     private bool isSelected; 

     public bool IsSelected 
     { 
      get { return isSelected; } 
      set { isSelected = value; OnpropertyChanged("IsSelected"); } 
     } 

     private ObservableCollection<Test> _collection; 
     public ObservableCollection<Test> Collection 
     { 
      get { return _collection; } 
      set { _collection = value;OnpropertyChanged("Collection" + 
                 ""); } 
     } 
     public event PropertyChangedEventHandler PropertyChanged; 

     public void OnpropertyChanged(string propertyName) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if (handler != null) 
      { 
       var e = new PropertyChangedEventArgs(propertyName); 
       handler(this, e); 
      } 
     } 


    } 
class ViewModel:NotificationObject 
{ 
    public ViewModel() 
    { 
     this.GDCSource = Getsource(); 
    } 

    private ObservableCollection<Data> _gdcsource; 

    public ObservableCollection<Data> GDCSource 
    { 
     get { return _gdcsource; } 
     set { _gdcsource = value; RaisePropertyChanged("GDCSource");} 
    } 




    private ObservableCollection<Data> Getsource() 
    { 
     ObservableCollection<Data> items = new ObservableCollection<Data>(); 
     if (items != null) 
     { 
      items.Add(new Data() 
       { 
        IsSelected = true, 
        CustomerID = 1, 
       }); 
      items.Add(new Data() 
       { 
        IsSelected = true, 
        CustomerID = 2, 
       }); 
     } 
     return items; 

    } 
} 

public partial class MainWindow : Window 
    { 

     public MainWindow() 
     { 
      InitializeComponent(); 
      ViewModel vmModel = new ViewModel(); 
      this.datagrid.ItemsSource = vmModel.GDCSource; 
      vmModel.GDCSource.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(GDCSource_CollectionChanged); 
     } 

     void GDCSource_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
     { 
      //Listen the collection changed event for underlying source 
     } 

     // add the object to the Collection property 
     private void Test_OnClick(object sender, RoutedEventArgs e) 
     { 
      (this.DataContext as ViewModel).GDCSource[0].Collection.Add(new Test() { Name = "Name1", City = "City1" }); 
      (this.DataContext as ViewModel).GDCSource[0].Collection.Add(new Test() { Name = "Name1", City = "City1" }); 
      (this.DataContext as ViewModel).GDCSource[0].Collection.Add(new Test() { Name = "Name1", City = "City1" }); 
     } 
    } 

在任何情況下都可以在添加Collection屬性時進行監聽。

在此先感謝

問候, Rajasekar

回答

0

如果你的意思是你想爲加入項目時可觀察到的集合中刪除時引發/註冊事件,你應該看看CollectionChanged事件

ObservableCollection<T>.CollectionChanged Event

發生在項目被添加,刪除,更改,移動或整個 列表已刷新。

0

,如果你願意,你可以擴展自己的ObservableCollection的版本和重寫add方法,

在那裏,你可以解僱任何代表或任何你可能要登記,用戶界面將自動更新,使用的ObservableCollection與項目添加/刪除你不需要做任何事情,