使用WinForms的MVVM/演示模型

4

我目前正在处理一个老旧的应用程序,它是用winforms编写的。为了在以后的版本中使用WPF,我们团队计划至少使用MVVM / Presentation模式,并将其绑定到winforms上...

我已经研究了这个主题,包括本网站上的帖子(我非常喜欢),总结下来,wpf的主要优点是:

  • 在xaml中将控件与属性绑定。
  • 将命令绑定到视图模型中的命令对象。

第一个特性很容易实现(在代码中),或者使用通用控件绑定器将所有控件绑定到窗体。

第二个特性有点难以实现,但如果你从所有控件中继承并添加一个命令属性(通过内部事件如单击触发),并将其绑定到ViewModel中的命令实例,则可以实现。

我目前知道的挑战是:

  • 实现commandmanager(将根据需要触发命令的CanInvoke方法)。
  • winforms仅支持一级数据绑定:数据源,数据成员,而wpf则更加灵活。

尝试实现此设计模式时,我是否错过了其他winforms相对于wpf缺乏的重要功能?

我确定你们中的许多人会推荐某种MVP模式,但对我来说,MVVM / Presentation模式是正确的选择,因为我将需要未来的WPF支持。

提前致谢, Erik。


你有没有考虑过只使用ElementHost将新的WPF内容嵌入到现有的WinForm应用程序中? - Jerry Bullard
我可能会在某个时候这样做...我想到了另一个挑战:DataTemplates..我将使用一个用户控件并将其绑定到视图模型上的对象,而不是使用数据模板.. :))我下周开始着手制作原型,有人对我的结果感兴趣吗? - Erik Ashepa
此文章可能对那些寻求CommandManager实现的人有所帮助:https://dev59.com/vnI-5IYBdhLWcg3wxbfv - Maciej
2个回答

1
请看一下 Update Controls .NET。它是一个开源库,用于Winforms、WPF和Silverlight,可以在数据更改时保持控件最新。您现在可以开始在Winforms中使用它,然后过渡到WPF而无需更改您的数据模型或视图模型代码。
不幸的是,它不能解决Winforms命令绑定问题。您的按钮单击事件将无法从Winforms迁移到WPF。但它确实解决了数据绑定问题。

1

你可能会对WAF Windows Forms Adapter感兴趣。它展示了如何在Windows Forms应用程序中应用模型-视图-视图模型(MVVM)模式。适配器实现提供了一个解决方案,用于解决Windows Forms中缺少命令支持的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接