2013-07-25 39 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与项目添加/删除你不需要做任何事情,