在我的Wpf项目中,我尝试分离视图和视图模型 我在想,例如应该从视图中隐藏视图模型和模型之间的数据契约。
在实践中,通常您希望在视图中显示数据协定中的简单属性,如果没有在视图中引用数据协定,这是不可能的。
E.g。
Properties.Settings.Default.Group = basedata.Groups.CurrentItem.Code;
需要引用CurrentItem
的类型。
我还可以在视图模型中公开字符串属性,如
public string CurrentGroupCode { get { return Groups.CurrentItem.Code; } }
这看起来也太过分了。我倾向于使用引用,因为它会导致更少的代码 有异议吗?
答案 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不需要知道模型结构的某些内容。