Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将Win Forms应用程序重组为MVVP模式–;未来可能的WPF版本_C#_Wpf_Winforms_Mvvm - Fatal编程技术网

C# 将Win Forms应用程序重组为MVVP模式–;未来可能的WPF版本

C# 将Win Forms应用程序重组为MVVP模式–;未来可能的WPF版本,c#,wpf,winforms,mvvm,C#,Wpf,Winforms,Mvvm,我最近开始开发一个WinForms应用程序,它需要一些改进和重组。将来可能会有WPF版本的应用程序,我正在考虑将WinForms应用程序重新构造为MVVM模式。这样做的目的是,当开发WPF的时候,我只需要专注于创建WPF视图并重用以前版本的代码。 我看过一些关于使用MVVP模式开发Win forms应用程序的帖子,似乎可以使用该模式开发Win forms应用程序。 我想知道这种方法是否可取,以及在开发WPF版本时,将现有Win Forms应用程序重新构造为MVVM模式是否会减轻工作量 在我看来这

我最近开始开发一个WinForms应用程序,它需要一些改进和重组。将来可能会有WPF版本的应用程序,我正在考虑将WinForms应用程序重新构造为MVVM模式。这样做的目的是,当开发WPF的时候,我只需要专注于创建WPF视图并重用以前版本的代码。
我看过一些关于使用MVVP模式开发Win forms应用程序的帖子,似乎可以使用该模式开发Win forms应用程序。

我想知道这种方法是否可取,以及在开发WPF版本时,将现有Win Forms应用程序重新构造为MVVM模式是否会减轻工作量

在我看来这不是个好主意。因为MVVM在WPF中如此出色的一个重要原因是WPF绑定基础结构。 WinForms没有这样的功能,绑定支持要低得多。这就是WinForms使用MVP模式的原因,演示者负责向视图提供数据。 您可以尝试编写纯粹的MVVM模型,但是为了绑定到模型并更新它们,您必须在视图中编写大量难看的代码。
我建议坚持使用MVP,因为这对WinForms来说是一个很好的解决方案,它可以创建结构良好的组件,然后很容易在WPF和MVVM中重新创建相同的功能。

根据其他受访者的说法,这里的问题是表示层,WinForms没有WPF那么容易处理

也就是说,根据我的经验,许多遗留WinForm应用程序在表单代码中都有很多业务和数据层逻辑


我认为没有理由不确保将代码分为不同的数据层、业务逻辑和GUI,为可能的WPF迁移做准备。

几个月前,我编写了一个带有类似MVVM的小winforms应用程序,只是为了好玩。我用我自己的装订。。。 绑定代码放在codebehind中,如下所示:

 this.Bind(src: x => x.ViewModel.SearchCriteria, dst: x => x.txtSearchCriteria.Text, mode: BindingMode.TwoWay);
顺便说一句,我还没有完成这个应用程序,但尝试起来很有趣:)

总而言之:
1) 可能吗是的,我试过这么做,而且成功了。
2) 实施起来难吗不,不是很难。

3) 我是否建议在实际项目中尝试此方法不,使用MVP确实更好。

正如Vladimir所说,您可能可以重新设计Winforms项目以使用MVVM模式。但问题是:值得吗?
您必须彻底改造Winform控件,并将其封装在支持类似WPF绑定的类中。
假设您开发了一个WPF应用程序,并将所有业务放在代码中。这是可行的,但在我看来是不对的,而且肯定是丑陋的


我将分离我的数据访问层,以便能够在未来可能的WPF项目中使用它。但我会尝试在应用程序中记录业务,而不是迁移到MVVM,以便更容易从头开始构建WPF应用程序。

我很难想象在不使用代码的情况下开发WINFLASE应用程序。您也可以考虑做一个WPF版本的重组,并将其嵌入到Windows窗体应用程序中。我在一个现有的应用程序中采用了一种巧妙的方法:所有需要重构或重写的操作都是在WPF中完成的,并通过MVVM绑定,并使用嵌入WinForms框架中的ElementHost。唯一的缺点是混合的视觉外观。您可能对WAF WinForms适配器()的示例应用程序感兴趣。它使用MVVM模式,并提供一个WinForms和一个可以交换的WPF表示层。