CollectionChanged事件得到执行非关联对象

问题描述:

我有两个ObservableCollection对象和obj1已附加到集合更改事件。 Obj1通过obj1 = obj2从obj2获得一个值。当我在obj2上添加任何项目时,它会执行对象1的集合更改事件。我无法理解为什么会发生这种情况。CollectionChanged事件得到执行非关联对象

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"); 
    } 

obj1和obj2指的是同一个对象。上面的代码在内存中创建了两个对象,但行

obj1 = obj2; 

将obj1的引用更改为obj2引用的对象。 这意味着CollectionChanged事件在obj1和obj2引用的对象上注册。

你只有一个的ObservableCollection,因为你通过指定的obj2引用覆盖变量obj1的参考。

您的代码:

obj1 = obj2; 

此后双方变量指向同一个的ObservableCollection。在分配之后,如果使用变量obj1obj2来调用方法或在ObservableCollection上注册事件,那么它是相同的。

obj1 = obj2不会为您提供obj1中obj2的副本。用这行代码说'obj1请指向与obj2相同的ObservableCollection'。已经连接到obj1的ObservableCollection将被销毁,并且之后这两个变量指向相同的东西。

如果你想要一个副本创建一个新的ObservableCollection并填入其他集合。

obj1 = new ObservableCollection(obj2);