c# - INotifyPropertyChanged PropertyChangedEventHandler 事件始终为 null

标签 c# events .net-4.0 delegates inotifypropertychanged

我已经在下面的类中实现了 INotifyPropertyChanged

 public class FactoryItems : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        string symbol;
        public string Symbol
        {
            get { return symbol; }
            set { symbol = value; OnPropertyChanged("Symbol"); }
        }

        public FactoryItems()
        {

        }

        protected void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(name));
            }
        }
    }

当 Symbol 属性更改时事件触发没有问题,但 PropertyChanged 事件始终为 null,此类仅实例化一次,我在构造函数上放置了一个断点以确保它是这种情况。

在另一个类中,我是这样订阅的:

Data.Tables.FactoryItems = new Data.FactoryItems();
Data.Tables.FactoryItems.PropertyChanged += 
new System.ComponentModel.PropertyChangedEventHandler(FactoryItems_SymbolChanged);

void FactoryItems_SymbolChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
  doSomething();
}

但是处理程序始终为空,因为 PropertyChanged 为空。知道如何让它工作吗?

非常感谢。

最佳答案

您正在订阅一个特定实例上的事件。
这不会影响任何其他实例。

要查看所有实例的更改,您可以使用静态事件。
请注意,任何订阅静态事件的类都将永远保留在内存中。

关于c# - INotifyPropertyChanged PropertyChangedEventHandler 事件始终为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5058254/

相关文章:

c# - 无法加载 View 状态

c# - 如何检查 C# 中的动态匿名类型上是否存在属性?

c# - 如何避免窗体上出现大量用户控件

c# - 带返回值的匿名方法

c# - 如何在 EF 5 中导入具有标量返回值的函数

c# - 所有事件的 ThreadLocal<T> 和 [ThreadStatic] 引用的列表

c# - 安装 Framework 4.5 时以 .NET Framework 4 为目标

c# - 如果 (Input.GetKeyDown(KeyCode.UpArrow)); - 统一控制台垃圾邮件

java - 检测 focusGained 事件中的向后遍历?

macOS Swift 监控全局事件不适用于通用 keyDown