首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有INotifyPropertyChanged实现的奇怪的INotifyPropertyChanged

带有INotifyPropertyChanged实现的奇怪的INotifyPropertyChanged
EN

Stack Overflow用户
提问于 2011-12-12 14:41:47
回答 3查看 1.9K关注 0票数 6

我在基类中实现INotifyPropertyChanged,如下所示:

代码语言:javascript
复制
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);
        }
    }
}

我使用它的方式如下:

代码语言:javascript
复制
RaisePropertyChanged("Name");

当参数"this“和处理程序不为空时,我将得到一个NullReferenceException。有人能解释一下这件事吗?

谢谢。

->异常的完整堆栈跟踪:http://pastebin.com/bH9FeurJ

更新当我覆盖包含此属性的类的实例时会发生异常。简化示例:

代码语言:javascript
复制
public class Person : INotifyPropertyChanged
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            RaisePropertyChanged("Name");
        }
    }

// More properties etc.
}

-剪短-

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-03 20:04:06

但是,我已经有一段时间了,我已经解决了这个错误(尽管在我的代码中它可能是另一个原因)--在我的一个IValueConverter实现中,我(相当愚蠢地)没有检查空,(由于某种原因,代码不允许我进入这段代码)并导致异常,因为null是作为值传入的。

票数 1
EN

Stack Overflow用户

发布于 2011-12-12 14:52:55

该异常不是在示例代码中引发的,而是在一个订阅事件处理程序中引发的。在调试器中一步一步地检查它,或者打开Visual的"Debug“-”Exception“菜单中”通用语言运行时异常“的”引发“开关。然后你就能找出原因。

票数 3
EN

Stack Overflow用户

发布于 2011-12-12 14:49:27

查看堆栈跟踪,很明显这里根本没有抛出NullReferenceException;它实际上被抛出得更深,在以下位置:

代码语言:javascript
复制
 GalaSoft.MvvmLight.Command.RelayCommand`1.Execute(Object parameter)

本质上,其中一个事件侦听器的依赖行为是不正确的。

旁白:我不太确定您使用的堆栈跟踪约定是“增长”还是“渐减”。有一次,我看到约尔方法上面的方法是委托调用:

代码语言:javascript
复制
System.ComponentModel.PropertyChangedEventHandler.Invoke(Object sender, PropertyChangedEventArgs e)

...it很清楚,堆栈确实在“向上”增长。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8476018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档