当前位置:  开发笔记 > 后端 > 正文

在不使用System.Windows.Input.ICommand的情况下在WPF中实现MVVM

如何解决《在不使用System.Windows.Input.ICommand的情况下在WPF中实现MVVM》经验,为你挑选了2个好方法。

我正在尝试使用MVVM(Model-View-ViewModel)模式实现WPF应用程序,并且我希望View部件位于Model和ViewModel部件(DLL)的单独程序集(EXE)中.

这里的转折是保持Model/ViewModel程序集清除任何WPF依赖项.这样做的原因是我想从具有不同(非WPF)UI技术的可执行文件中重用它,例如Mono下的WinForms或GTK#.

默认情况下,无法执行此操作,因为ViewModel公开了一个或多个ICommands.但ICommand类型是在System.Windows.Input命名空间中定义的,该命名空间属于WPF!

那么,有没有办法在不使用ICommand的情况下满足WPF绑定机制?

谢谢!



1> morechilli..:

您应该能够在wpf层和单个命令处理程序类中定义单个WPF自定义路由命令.所有WPF类都可以使用适当的参数绑定到这一个命令.

然后,处理程序类可以将命令转换为您自己在ViewModel层中定义的自定义命令界面,并且独立于WPF.

最简单的示例是使用Execute方法的void委托的包装器.

所有不同的GUI层只需要在一个位置从其本机命令类型转换为自定义命令类型.



2> Nir..:

WinForms没有使用MVVM样式视图模型所需的丰富数据绑定和命令基础结构.

就像你不能在客户端应用程序中重用Web应用程序MVC控制器一样(至少在没有创建大量包装器和适配器的情况下,最终只会使编写和调试代码变得更加困难而不向客户提供任何价值)在WinForms应用程序中重用WPF MVVM.

我没有在一个真实的项目中使用GTK#所以我不知道它能做什么或不能做什么但是我怀疑MVVM不是GTK#的最佳方法.

尝试将应用程序的大部分行为移动到模型中,使视图模型仅公开模型中的数据,并根据视图模型中没有逻辑的命令调用模型.

然后对于WinForms,只需删除视图模型并直接从UI调用模型,或者创建另一个基于WinForms的更有限数据绑定支持的中间层.

重复GTK#或编写MVC控制器和视图,为模型提供Web前端.

不要试图强迫一种技术成为针对他人优化的使用模式,不要从头开始编写自己的命令基础结构(我以前做过,而不是我最有效的选择),为每种技术使用最好的工具.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有