简体   繁体   English

子财产的收藏更改事件

[英]Collection changed event for child property

I have use the following code snippet for Creating ObservableCollection binded to the DataGrid. 我使用下面的代码段来创建绑定到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" });
        }
    }

It is possible to listen while adding Collection property in any event. 在任何情况下都可以在添加Collection属性的同时进行监听。

Thanks in advance 提前致谢

Regards, Rajasekar 此致Rajasekar

If you mean you want to register for event that is raised when item is added/deleted in observable collection you should look at CollectionChanged event 如果您是想注册可观察集合中添加/删除项目时引发的事件,则应查看CollectionChanged事件

ObservableCollection<T>.CollectionChanged Event

Occurs when an item is added, removed, changed, moved, or the entire list is refreshed. 在添加,删除,更改,移动项目或刷新整个列表时发生。

You can extend your own version of ObservableCollection if you want and override the add method, 您可以根据需要扩展自己的ObservableCollection版本,并覆盖add方法,

There you can fire any delegates or whatever you may want to register, the UI will update automatically using ObservableCollection with items added/removed you don't need to do anything for that, 您可以在此处解雇任何代表或您想注册的任何对象,UI会使用ObservableCollection自动更新,其中添加/删除的项目您不需要为此做任何事情,

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM