MVVM - 直接绑定到从VM公开的Model对象,或在VM中实现单独的属性以访问Model属性

Gil*_*zzi 22 wpf entity-framework mvvm

对不起,如果标题令人困惑,但我真的不知道如何缩短我的问题.无论如何,在这里.

我正在使用WPF,实体框架和MVVM.

目前,在我的ViewModel中,我有一个属性

public Model.Document Document {get;set;} //Model.Document is an EF Entity
Run Code Online (Sandbox Code Playgroud)

然后,在XAML中,我绑定到

<TextBox Text={Binding Path=Document.Title}/>
Run Code Online (Sandbox Code Playgroud)

标题当然是模型上的属性.

现在我想到了以下问题:要将模型与View分开,如果我将属性添加到ViewModel就不会更好

    public string Title
    {
        get { return Document.Title; }
        set { Document.Title = value; }
    }
Run Code Online (Sandbox Code Playgroud)

然后像这样绑定:

<TextBox Text={Binding Path=Title}/>
Run Code Online (Sandbox Code Playgroud)

推荐哪种方式?

Opp*_*nal 11

如果您看一下如何解析数据绑定引用,您可以看到在决定如何公开要绑定的属性时可能会考虑性能问题.

Model.Document是否实现了INotifyPropertyChanged接口?如果没有,我建议在视图模型中添加Title属性并在视图模型上实现INotifyPropertyChanged,以便在更改Title时引发PropertyChanged事件以通知视图.

另一种方法是将视图模型上的Title作为DependencyProperty公开,因为绑定和渲染时间更快.