收集改变了儿童财产的活动

时间:2013-07-25 11:33:25

标签: c# wpf observablecollection

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

2 个答案:

答案 0 :(得分:0)

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

ObservableCollection<T>.CollectionChanged Event

  

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

答案 1 :(得分:0)

如果需要,可以扩展自己的ObservableCollection版本并覆盖add方法

在那里你可以解雇任何代表或任何你想要注册的内容,UI将使用ObservableCollection自动更新,添加/删除项目你不需要为此做任何事情,