对非关联对象执行CollectionChanged事件
本文关键字:CollectionChanged 事件 执行 对象 关联 | 更新日期: 2023-09-27 18:02:33
我有两个ObservableCollection对象和obj1已附加到集合更改事件。Obj1由Obj1 = obj2从obj2得到一个值。当我在obj2上添加任何项时,它执行对象1的collection changed事件。我不明白为什么会发生这种事。
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引用的对象上。
obj1 = obj2
不会给您obj1中obj2的副本。在这行中,你说"obj1请指向与obj2相同的ObservableCollection"。之前附加到obj1的ObservableCollection将被销毁,之后两个变量都指向相同的对象。
如果你想要一个副本,创建一个新的ObservableCollection并填充另一个集合
obj1 = new ObservableCollection(obj2);
您只有一个ObservableCollection,因为您通过分配obj2
的引用来覆盖变量obj1
的引用。
obj1 = obj2;
因为两个变量都指向同一个ObservableCollection。在赋值之后,如果您使用变量obj1
或obj2
来调用方法或在ObservableCollection上注册事件,则是相同的。