2014-05-10 53 views
1

我有一个基类:如何为派生类实现INotifyPropertyChanged?

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值后,handler里面的NotifyPropertyChanged方法为空,这似乎是问题所在。

我怎样才能解决它的基类的变化也出现在列表中?

回答

7

只有PersonBaseClass实现INotifyPropertyChanged并使NotifyPropertyChange受保护,因此您可以从子类调用它。没有必要实施两次。这也应该解决这个问题。

+0

谢谢。似乎我需要再次使用基本的C#类:\ – user3293835

+0

Microsoft Virtual Academy的网站上有几个可供用户使用的在线刷新视频。 – leafartist

2

您的“魔术代码”部分应该只在PersonBaseClass中。您可以使NotifyPropertyChanged函数受到保护,以便可以从TeacherClass中调用相同的函数。

相关问题