很高兴看到您决定放弃 MVVM 的自定义实现,因为已经存在这么多只是......有效的东西。
WPF 对于双向绑定非常强大,这赋予了它最大的优势。
视图模型绑定到视图并充当与数据层通信的机制。此外,实体框架(如果您使用的是框架 4.0)将为您提供一个很好的数据层,用于在您的 ViewModel 中填充您的实体。这基本上成为你的模型。它为您提供了 UnitOfWork 的封装形式以及存储库模式。
虽然所有示例中的视图模型通常都是一对一的,但如果设计需要,您可以拥有跨越多个视图的视图模型。我有一个“菜单”,它显示列表中每个项目的关键标识符和一个详细表单,显示从同一对象编辑的所有字段。所以我跨越了两者之间的观点。
您可以在将视图模型绑定到数据上下文的 xaml 中对视图模型进行硬编码,也可以使用 Unity 并将视图模型注入视图。不幸的是,注入需要添加一个公共属性来设置数据上下文。所以你会有这样的代码:
public class MyView:Window
{
public MyView(MyViewModel model)
{
InitializeComponent();
ViewModel = model;
}
public MyViewModel ViewModel
{
set{ this.DataContext = value; }
}
}
所以剩下的只是每个字段的双向绑定,setter 可以封装单值编辑。您的错误消息甚至可以绑定到表单上的文本字段,并在值不为空时显示。
此外,如果您深入研究 Unity,您还将获得一个名为 Event Aggregation 的真正出色的功能,它基本上提供了一种用于发布/订阅事件的工具,并且在处理按钮单击时与您的 ICommand 实现相关联。