我应该尝试从View中“隐藏”Model和ViewModel吗?

时间:2013-11-11 16:06:37

标签: c# wpf mvvm

在我的Wpf项目中,我尝试分离视图和视图模型 我在想,例如应该从视图中隐藏视图模型和模型之间的数据契约。

在实践中,通常您希望在视图中显示数据协定中的简单属性,如果没有在视图中引用数据协定,这是不可能的。

E.g。

Properties.Settings.Default.Group = basedata.Groups.CurrentItem.Code; 

需要引用CurrentItem的类型。

我还可以在视图模型中公开字符串属性,如

public string CurrentGroupCode { get { return Groups.CurrentItem.Code; } }

这看起来也太过分了。我倾向于使用引用,因为它会导致更少的代码 有异议吗?

1 个答案:

答案 0 :(得分:2)

实际上,我会选择你的选择2.为什么?好吧,如果你想通过INotifyPropertyChanged实现通知机制,这是最简单的方法。如果要将值从模型传递到视图,反之亦然,那么您的示例将如下所示。

public SomeViewModel : ViewModelBase // assuming that you have a base class for this
{
    public string CurrentGroupCode
    {
        get { return Groups.CurrentItem.Code; }
        set
        {
             Groups.CurrentItem.Code = value;          // assuming that the VM has been intialized correctly
             RaisePropertyChanged("CurrentGroupCode"); // implemented in base class
        }
    }

    /*
     * ...Initialization, logic a.s.o.
     */
}

意味着,如果业务逻辑(也应在VM层实现)修改此类属性,则将自动通知和更新视图。此外,修改也将自动传播到模型。

您会发现,通过这种方法,您不仅可以从视图中隐藏模型,还可以在VM级别上提供良好的模块化,因为其他VM不需要知道模型结构的某些内容。