gpt4 book ai didi

c# - ObservableCollection CollectionChanged 事件似乎没有触发——为什么?

转载 作者:太空狗 更新时间:2023-10-29 22:28:03 26 4
gpt4 key购买 nike

这段代码有什么问题?单击 button1 不会导致消息框出现。

public partial class Form1 : Form
{
public ObservableCollection<string> aCollection2 = new ObservableCollection<string>();
myClass mc = new myClass();

public Form1()
{
InitializeComponent();

aCollection2.Add("a");
aCollection2.Add("b");
}


private void button1_Click(object sender, EventArgs e)
{
mc.myCollection = aCollection2;
}

private void button2_Click(object sender, EventArgs e)
{
mc.myCollection.Clear();
}
}

定义了 myClass:

class myClass
{
public ObservableCollection<string> myCollection = new ObservableCollection<string>();

public myClass()
{
myCollection.CollectionChanged += Changed;
}

void Changed(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
MessageBox.Show(myCollection.Count.ToString());
}
}

编辑:当我添加第三个按钮时:

private void button3_Click(object sender, EventArgs e)
{
mc.myCollection.Add("a");
}

它确实显示了消息框。 button2 也是如此。但是在点击 button1 之后——没有人会再开火。怎么会?

最佳答案

您从字段初始值设定项向原始 ObservableCollection 实例添加了一个事件处理程序。
您从未将事件处理程序添加到表单中的新 ObservableCollection 实例。
由于原始的 ObservableCollection 永远不会改变,您的处理程序永远不会运行。

这是为什么 collection properties should be read only 的众多原因之一。 (和 they should be properties, not fields)

关于c# - ObservableCollection CollectionChanged 事件似乎没有触发——为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7948464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com