0

2 つの ObservableCollection オブジェクトがあり、obj1 はコレクション変更イベントにアタッチされています。Obj1 は、obj1 = obj2 によって obj2 からの値を持ちます。obj2 にアイテムを追加すると、オブジェクト 1 のコレクション変更イベントが実行されます。なぜこれが起こっているのか理解できませんでした。

 public MainWindow()
    {
        InitializeComponent();

        ObservableCollection<int> obj1 = new ObservableCollection<int>();
        ObservableCollection<int> obj2 = new ObservableCollection<int>();

        obj1 = obj2;

        obj1.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(obj1_CollectionChanged);

        obj2.Add(1);

}

    void obj1_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        MessageBox.Show("Testing");
    }
4

3 に答える 3

2

obj1 と obj2 は同じオブジェクトを参照します。上記のコードはメモリ内に 2 つのオブジェクトを作成しますが、

obj1 = obj2;

obj1 の参照を obj2 によって参照されるオブジェクトに変更します。これは、obj1 と obj2 が参照するオブジェクトに CollectionChanged イベントが登録されることを意味します。

于 2013-03-05T12:03:28.047 に答える
1

obj1 = obj2obj1のobj2のコピーは提供されません。この行で、「obj1はobj2と同じObservableCollectionをポイントしてください」と言います。以前にobj1にアタッチされていたObservableCollectionは破棄され、両方の変数は後で同じものを指します。

コピーが必要な場合は、新しいObservableCollectionを作成し、他のコレクションに入力します。

obj1 = new ObservableCollection(obj2);
于 2013-03-05T12:11:45.930 に答える
0

ObservableCollection の参照をobj1割り当てることによって変数の参照をオーバーライドする原因は 1 つだけですobj2

あなたのコード:

obj1 = obj2;

それ以来、両方の変数が同じ ObservableCollection を指しています。obj1その割り当ての後、変数を使用したりobj2、メソッドを呼び出したり、ObservableCollection でイベントを登録したりする場合は同じです。

于 2013-03-05T12:03:08.923 に答える