Mvvm 关于从WinForms更改为WPF的问题

Mvvm 关于从WinForms更改为WPF的问题,mvvm,Mvvm,我最近一直在寻找一种使用MVVM在WinForms中绑定数据的方法。 我最终创建了MVVM模式的自定义实现。 然而,由于缺乏双向绑定,我决定尝试一下WPF 我已经有了这个模型,它封装了非ui功能。例如,模型读取配置文件,具有一些属性,侦听套接字上的传入数据,并在需要时保存传入的数据包。 如果模型的某些属性设置超出范围,则会引发异常。即在模型中进行验证 验证通常是如何在WPF中完成的?我读过很多文章,在ViewModel中进行验证似乎有一些一致性。事实上,大多数文章只使用ViewModel和Vie

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

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


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

很高兴看到您决定放弃MVVM的自定义实现,因为已经存在了太多的MVVM,以至于。。。工作

WPF在双向绑定方面非常强大,这赋予了它最大的优势

视图模型绑定到视图,并充当与数据层通信的机制。此外,实体框架(如果您使用的是框架4.0)将为您在ViewModel中填充实体提供一个很好的数据层。这基本上就是你的模型。它为您提供了UnitOfWork以及存储库模式的封装形式

虽然所有示例中的视图模型通常是一对一的,但如果设计需要,则可以使用跨多个视图的视图模型。我有一个“菜单”,它显示列表中每个项目的关键标识符,还有一个详细表单,它显示从同一对象编辑的所有字段。因此,我跨越了两者之间的视野

您可以在xaml中硬编码视图模型,将其绑定到datacontext,也可以使用Unity并将viewmodel注入视图。不幸的是,注入需要添加一个公共属性来设置datacontext。所以你会有这样的代码:

public class MyView:Window
{
     public MyView(MyViewModel model)
     {
         InitializeComponent();
         ViewModel = model;
     }
     public MyViewModel ViewModel
     {
         set{ this.DataContext = value; }
     }
}
所以剩下的只是每个字段的双向绑定,setter可以封装单值编辑。甚至可以将错误消息绑定到表单上的文本字段,并在值不为null时显示

此外,如果您深入了解Unity,您还将获得一个真正伟大的功能,称为事件聚合,它基本上提供了发布/订阅事件的工具,并在处理按钮单击时与ICommand实现相关联