我有一个基类:
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
方法为空,这似乎是问题所在。
如何解决基类更改也会出现在列表中?
答案 0 :(得分:7)
只有PersonBaseClass实现INotifyPropertyChanged并使NotifyPropertyChange成为受保护的,因此您可以从子类中调用它。不需要两次实现它。这也应该解决问题。
答案 1 :(得分:2)
您的“魔术代码”部分应该只在PersonBaseClass中。您可以使NotifyPropertyChanged函数受到保护,以便也可以从TeacherClass调用相同的函数。