调试PropertyChanged

时间:2014-09-13 06:09:52

标签: wpf events propertychanged

我有一个名为ViewModel的类,代码如下:

public event PropertyChangedEventHandler PropertyChanged;

var copyOfPropertyChangedEvent = PropertyChanged;

if (copyOfPropertyChangedEvent != null)
{
    var args = ViewModel.GetPropertyChangedEventArgs(propertyName);
    copyOfPropertyChangedEvent(this, args);
}

当我调试这个时,我想看看copyOfPropertyChangedEvent事件中发生了什么。当我按下F12时,它会转到我的行:var copyOfPropertyChangedEvent = PropertyChanged; 当我搜索PropertyChanged的所有用法时,Visual Studio给了我一些用法,当我把断点放在所有这些用法中时,它们都没有被击中。

如何查看PropertyChanged事件中发生了什么?

1 个答案:

答案 0 :(得分:0)

好的,我们会尝试猜测:)

首先,我会按照以下方式实现它,就像R#一样。

public class YourViewModelBase : INotifyPropertyChanged
{
   public event PropertyChangedEventHandler PropertyChanged;

   [NotifyPropertyChangedInvocator] // remove if no R#
   protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
   {
       PropertyChangedEventHandler handler = PropertyChanged;            
       if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
   }
   // .....
}

现在我确定你知道一个基本上只包含一个要调用的方法列表。框架使用PropertyChanged来通知GUI必须执行对所讨论属性的重新评估(绑定,运行转换器等然后重绘),并且您还可以将自己挂钩到它上面。如果它为空,那么UI可能没有被吸引,这就是我在那里要求更多信息的原因。它是INotifyPropertyChanged Interface的一部分,正如您所知道的那样:)

无论如何,如果您只是对内部的工作方式感到好奇,可以安装RedGate Reflector,它允许您进入任何非本机代码。或者您可以反汇编System.dll并在那里跟踪它。

我不确定这是否是你所追求的。

希望它有所帮助,

干杯

了Stian