模型和视图模型的INotifyPropertyChanged

时间:2014-04-29 08:14:40

标签: wpf mvvm

我目前离家(并且将持续几周)并且只有一台平板电脑 - 因此,我无法访问Visual Studio来测试我想要学习的内容 - {{1模式。

到目前为止,我认为理论已经确定,但我对MVVM界面感到困惑。

我认为MVVM模式的一个想法是能够更新模型,模型又通知ViewModel,ViewModel反过来通知视图。如果我错了,那么这个问题的其余部分就没有意义了。

我的问题是,所有课程都必须共享INotifyPropertyChanged的一个实现吗?

换句话说,这是正确的:

  1. 所有类的属性名称都相同(但每个类都有INotifyPropertyChanged的唯一实现)

  2. 所有类的属性名称都相同(并且每个类都继承自实现INotifyPropertyChanged的单个基类)?

1 个答案:

答案 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上运行的那个)