0

我有两个 ObservableCollection 对象,并且 obj1 已附加到集合更改事件。obj1 具有来自 obj2 的值,通过 obj1 = 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 指的是同一个对象。上面的代码在内存中创建了两个对象,但是行

obj1 = obj2;

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

于 2013-03-05T12:03:28.047 回答
1

obj1 = obj2不会在 obj1 中为您提供 obj2 的副本。在这一行中,您说“obj1 请指向与 obj2 相同的 ObservableCollection”。之前附加到 obj1 的 ObservableCollection 将被销毁,之后两个变量都指向同一事物。

如果您想要一个副本,请创建一个新的 ObservableCollection 并填写另一个集合。

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

您只有一个 ObservableCollection 导致您obj1通过分配 的引用来覆盖变量的引用obj2

你的代码:

obj1 = obj2;

从那时起,两个变量都指向同一个 ObservableCollection。在分配之后,如果您使用变量obj1obj2调用方法或在 ObservableCollection 上注册事件,则相同。

于 2013-03-05T12:03:08.923 回答