0

我最近一直在寻找一种使用 MVVM 在 WinForms 中绑定数据的方法。我最终创建了 MVVM 模式的自定义实现。但是,由于缺乏双向绑定,我决定尝试一下 WPF。

我已经有了模型,它封装了非 ui 功能。例如,模型读取配置文件,具有一些属性,侦听套接字上的传入数据,并在需要时保存传入的数据包。如果模型的某些属性设置超出范围,则会引发异常。即验证在模型中完成。

在 WPF 中通常如何进行验证?我已经阅读了大量文章,并且在 ViewModel 中进行验证似乎有一些一致性。事实上,大多数文章只使用 ViewModel 和 View。模型被埋了吗?

4

1 回答 1

1

很高兴看到您决定放弃 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 实现相关联。

于 2012-06-06T20:29:46.647 回答