我在基类中实现INotifyPropertyChanged,如下所示:
public class NotifyPropertyChangedBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void RaisePropertyChanged(string propertyName)
{
var propChangedHandler = PropertyChanged;
if (propChangedHandler != null)
{
var args = new PropertyChangedEventArgs(propertyName);
propChangedHandler(this, args);
}
}
}我使用它的方式如下:
RaisePropertyChanged("Name");当参数"this“和处理程序不为空时,我将得到一个NullReferenceException。有人能解释一下这件事吗?
谢谢。
->异常的完整堆栈跟踪:http://pastebin.com/bH9FeurJ
更新当我覆盖包含此属性的类的实例时会发生异常。简化示例:
public class Person : INotifyPropertyChanged
{
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
RaisePropertyChanged("Name");
}
}
// More properties etc.
}-剪短-
public class ViewModel
{
private Person _dummyPerson;
public Person DummyPerson
{
get { return _dummyPerson; }
set
{
_dummyPerson = value;
RaisePropertyChanged("DummyPerson");
}
}
public void Foo()
{
DummyPerson = new DummyPerson();
// this line throws the NRE, strangly enough the very FIRST time it works fine
}
}-剪短-
我使用这个DummyPerson及其Name属性来为UI提供数据库。接下来的第二次和所有的尝试都会导致NullReferenceException。
发布于 2015-05-03 20:04:06
但是,我已经有一段时间了,我已经解决了这个错误(尽管在我的代码中它可能是另一个原因)--在我的一个IValueConverter实现中,我(相当愚蠢地)没有检查空,(由于某种原因,代码不允许我进入这段代码)并导致异常,因为null是作为值传入的。
发布于 2011-12-12 14:52:55
该异常不是在示例代码中引发的,而是在一个订阅事件处理程序中引发的。在调试器中一步一步地检查它,或者打开Visual的"Debug“-”Exception“菜单中”通用语言运行时异常“的”引发“开关。然后你就能找出原因。
发布于 2011-12-12 14:49:27
查看堆栈跟踪,很明显这里根本没有抛出NullReferenceException;它实际上被抛出得更深,在以下位置:
GalaSoft.MvvmLight.Command.RelayCommand`1.Execute(Object parameter)本质上,其中一个事件侦听器的依赖行为是不正确的。
旁白:我不太确定您使用的堆栈跟踪约定是“增长”还是“渐减”。有一次,我看到约尔方法上面的方法是委托调用:
System.ComponentModel.PropertyChangedEventHandler.Invoke(Object sender, PropertyChangedEventArgs e)...it很清楚,堆栈确实在“向上”增长。
https://stackoverflow.com/questions/8476018
复制相似问题