ObservableCollection CollectionChanged事件未被提升

时间:2011-03-30 15:33:06

标签: c# observablecollection

在我班上我有一个ObservableCollection,我正在听它的CollectionChanged事件。 事情就是当我做Fou.ButtonData =一个ObservableCollection变量时,从不调用CollectionChanged事件并且从不发生CreateButtons()。 我怎样才能做到这一点?

由于

代码

class Fou
{
   private ObservableCollection<string> buttonData; 
    public ObservableCollection<string> ButtonData
    {
        get { return buttonData; }
        set { buttonData = value; }
    }

   public Fou()
   {
       buttonData = new ObservableCollection<string>();
        buttonData.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(buttonData_CollectionChanged);

   }

   void buttonData_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        CreateButtons();
    }
   }

1 个答案:

答案 0 :(得分:4)

从代码示例中看起来似乎永远不会引发事件,因为ObservableCollection<string>从未实际更改过。它被创建,它被分配给事件,之后从未实际修改过。是否有其他代码可以修改集合。

此外,ButtonData的设置器中存在错误。您允许另一段代码更改ObservableCollection<string>,但您没有收听它CollectionChanged事件,也没有与前一段代码断开连接。我会将此作为readonly属性或将其更改为以下

public ObservableCollection<string> ButtonData
{
  get { return buttonData; }
  set 
  { 
    if (buttonData != null) {
      buttonData.CollectionChanged -= buttonData_CollectionChanged;
    }
    buttonData = value;
    if (buttonData != null) {
      buttonData.CollectionChanged += buttonData_CollectionChanged;
    }
  }
}