如何访问PropertyChanged事件的订阅者?

时间:2013-12-19 13:01:22

标签: c# .net visual-studio events visual-studio-2013

在Visual Studio 2013中进行调试时,我想知道实现PropertyChanged的某个类(我们称之为Publisher)发布的事件INotifyPropertyChanged的订阅者数量

我研究了一下,发现这应该可以调用GetInvocationList()并计算返回数组中的元素。所以我在我的代码中设置了一个断点,并尝试在立即窗口中对类publisher中名为Publisher的对象进行调用:

publisher.PropertyChanged.GetInvocationList()

但是,我收到此错误消息:

The event 'System.ComponentModel.INotifyPropertyChanged.PropertyChanged' can only appear on the left hand side of += or -=

我做了什么有什么问题? 如何访问PropertyChanged的订阅者?

2 个答案:

答案 0 :(得分:4)

  

如何访问PropertyChanged的订阅者?

基本上,你没有。仅 事件支持订阅和取消订阅功能。

  

我研究了一下,发现这应该可以调用GetInvocationList()并计算返回数组中的元素。

假设您可以访问基础委托字段 - 如果 那么。可能没有 - 有很多方法可以实现事件,就像有很多方法可以实现一个属性。

基本上,你要求的东西打破了事件的封装模型。虽然在某些情况下使用反射可以解决这个问题,但是你应该意识到你正在与系统的设计作斗争。

有关两者之间的差异,请参阅我在events and delegates上的文章。

答案 1 :(得分:1)

你要做的事情并不简单。并且没有标准的方法可以做到 - 基本上你可以破解现有的实现,但不能保证解决方案在将来有效。

我设法读取事件的订阅者,这是项目的根URL:http://www.codinghelmet.com/?path=net/sysexpand/reflection

从中可以找到我在订阅者中迭代的位置的起点是在此页面上查找AddMonitoredObject方法:http://www.codinghelmet.com/?path=net/sysexpand/reflection/source/dynevsubscr

希望这会有所帮助。但请记住,这个解决方案是一个黑客攻击。