我有一个名为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事件中发生了什么?
答案 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