在我班上我有一个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();
}
}
答案 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;
}
}
}