c# - C# 事件处理程序不可用于其他参考
问题描述
我有一个示例类。它有一个带有事件处理程序的 ObservableCollection。
class SomeItem
{
public ObservableCollection<Thing> Things = new ObservableCollection<Thing>();
private SomeEventHandler(object Sender, NotifyCollectionChangedEventArgs E)
{
//do something
}
public SomeItem()
{
this.Things.CollectionChanged += SomeEventHandler;
}
}
我正在执行以下代码:
SomeItem Instance = new SomeItem();
Instance.Things.Add(new Thing()); // SomeEventHandler executed;
SomeItem AnotherReference = Instance;
AnotherReference.Things.Add(new Thing()); // SomeEventHandler NOT executed
如果从AnotherReference访问集合,为什么不执行事件处理程序?
解决方案
我无法重现该问题。此代码按预期工作。
using System;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args) {
SomeItem Instance = new SomeItem();
Instance.Things.Add(new Thing()); // SomeEventHandler executed;
SomeItem AnotherReference = Instance;
AnotherReference.Things.Add(new Thing()); // SomeEventHandler ALSO executed
}
}
class Thing {
}
class SomeItem
{
public ObservableCollection<Thing> Things = new ObservableCollection<Thing>();
private void SomeEventHandler(object sender, NotifyCollectionChangedEventArgs e) {
Console.WriteLine("Hello from SomeEventHandler");
}
public SomeItem() {
this.Things.CollectionChanged += SomeEventHandler;
}
}
}
结果:
Hello from SomeEventHandler
Hello from SomeEventHandler
Press any key to continue.
推荐阅读
- windows - 是否有一个 Windows 事件可以判断 Windows 10 是否打开了演示模式?
- forms - Symfony 4:为与多个实体有关系的实体创建表单
- python - 删除用于绘制 matplotlib 图的撇号
- clojure - 动态计算 gen-class
- java - mockito doThrow 返回 null 而不是引发异常
- r - 如何使用 R 删除字符串中其他两个重复字符之间的所有字符?
- visual-studio-code - 在 VSCode 主题中自定义块引用颜色
- emacs - emacs ocaml 自动关闭注释
- javascript - 确保结果以相反的方式显示(Javascript)
- laravel-5.7 - Laravel-5.7 不创建文件夹 resources\views\layouts