2013-03-05 46 views
0

我有兩個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"); 
    } 

回答

2

obj1和obj2指的是同一個對象。上面的代碼在內存中創建了兩個對象,但行

obj1 = obj2; 

將obj1的引用更改爲obj2引用的對象。 這意味着CollectionChanged事件在obj1和obj2引用的對象上註冊。

0

你只有一個的ObservableCollection,因爲你通過指定的obj2引用覆蓋變量obj1的參考。

您的代碼:

obj1 = obj2; 

此後雙方變量指向同一個的ObservableCollection。在分配之後,如果使用變量obj1obj2來調用方法或在ObservableCollection上註冊事件,那麼它是相同的。

1

obj1 = obj2不會爲您提供obj1中obj2的副本。用這行代碼說'obj1請指向與obj2相同的ObservableCollection'。已經連接到obj1的ObservableCollection將被銷燬,並且之後這兩個變量指向相同的東西。

如果你想要一個副本創建一個新的ObservableCollection並填入其他集合。

obj1 = new ObservableCollection(obj2);