繁体   English   中英

子财产的收藏更改事件

[英]Collection changed event for child property

我使用下面的代码段来创建绑定到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

如果您是想注册可观察集合中添加/删除项目时引发的事件,则应查看CollectionChanged事件

ObservableCollection<T>.CollectionChanged Event

在添加,删除,更改,移动项目或刷新整个列表时发生。

您可以根据需要扩展自己的ObservableCollection版本,并覆盖add方法,

您可以在此处解雇任何代表或您想注册的任何对象,UI会使用ObservableCollection自动更新,其中添加/删除的项目您不需要为此做任何事情,

暂无
暂无

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

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