【问题标题】:How to implement INotifyPropertyChanged for derived classes?如何为派生类实现 INotifyPropertyChanged?
【发布时间】:2014-05-10 05:08:35
【问题描述】:

我有一个基类:

public class PersonBaseClass : INotifyPropertyChanged
{
    private string name;
    public string Name
    {
        get { return name; }
        set
        {
            if (value != name)
            {
                name = value;
                NotifyPropertyChanged("Name");
            }
        }
    }
}

还有一个派生类

public class TeacherClass : PersonBaseClass, INotifyPropertyChanged
{
    private string id;
    public string Id
    {
        get { return id; }
        set
        {
            if (value != id)
            {
                id = value;
                NotifyPropertyChanged("Id");
            }
        }
    }
}

以及上面每个结尾处的魔术代码!

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (null != handler)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

然后我在 xaml 的列表中显示Teachers 集合的列表。现在,如果我更改Id,将为用户显示更改,但不会出现基类中的属性Name 的更改。在调试中,我看到设置Name 值后,NotifyPropertyChanged 方法中的handler 为空,这似乎是问题所在。

如何解决基类的变化也出现在列表中?

【问题讨论】:

    标签: c# wpf xaml windows-phone-8 windows-runtime


    【解决方案1】:

    只有实现 INotifyPropertyChanged 的​​ PersonBaseClass 并将 NotifyPropertyChange 设为受保护,以便您可以从子类中调用它。不需要执行两次。这也应该可以解决问题。

    【讨论】:

    • 谢谢。看来我需要再次学习基本的 C# 课程:\
    • Microsoft Virtual Academy 的网站有几个在线复习视频可供您使用。
    【解决方案2】:

    您的“魔术代码”部分应该只在 PersonBaseClass 中。您可以将 NotifyPropertyChanged 函数设置为受保护的,这样同样的函数也可以从 TeacherClass 中调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-27
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2015-07-10
      相关资源
      最近更新 更多