我目前离家(并且将持续几周)并且只有一台平板电脑 - 因此,我无法访问Visual Studio来测试我想要学习的内容 - {{1模式。
到目前为止,我认为理论已经确定,但我对MVVM
界面感到困惑。
我认为MVVM模式的一个想法是能够更新模型,模型又通知ViewModel,ViewModel反过来通知视图。如果我错了,那么这个问题的其余部分就没有意义了。
我的问题是,所有课程都必须共享INotifyPropertyChanged
的一个实现吗?
换句话说,这是正确的:
所有类的属性名称都相同(但每个类都有INotifyPropertyChanged
的唯一实现)
所有类的属性名称都相同(并且每个类都继承自实现INotifyPropertyChanged
的单个基类)?
答案 0 :(得分:3)
不,他们不必分享任何东西。然而,INotifyPropertyChanged的实现是一些代码行,所以我们通常为模型创建一个基类 - 比如实现INotifyPropertyChanged的BaseModel或BaseViewModel。
这些实现通常特定于您使用的C#语言版本(较旧的版本适用于较新版本的语言)。
请看这里:http://jesseliberty.com/2012/06/28/c-5making-inotifypropertychanged-easier/
但不是让Employee类实现INotifyPropertyChanged,而是可以在基类中实现它
public class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged([CallerMemberName] string caller = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(caller));
}
}
}
然后博客中的Employee类看起来应该是这样的
public class Employee : BaseViewModel
{
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
RaisePropertyChanged();
}
}
}
这适用于C#5(.Net 4.5 - 不能在Windows XP上运行的那个)