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 プロパティを追加しながらリッスンすることができます。

前もって感謝します

よろしく、 ラジャセカール

4

2 に答える 2

0

監視可能なコレクションでアイテムが追加/削除されたときに発生するイベントに登録する場合は、CollectionChangedイベントを確認する必要があります

ObservableCollection<T>.CollectionChanged Event

アイテムが追加、削除、変更、移動されたとき、またはリスト全体が更新されたときに発生します。

于 2013-07-25T11:41:47.423 に答える
0

必要に応じて ObservableCollection の独自のバージョンを拡張し、 add メソッドをオーバーライドできます。

そこでは、任意のデリゲートまたは登録したいものを起動できます。UI は ObservableCollection を使用して自動的に更新され、アイテムが追加/削除されます。そのために何もする必要はありません。

于 2013-07-25T11:45:10.673 に答える