.net - MVVM + WPF - 为具有多个视图的 ViewModel 设计
问题描述
我开发在各种信息亭上运行的 .NET/Winforms 应用程序。这些应用程序通常是全屏和触摸控制的。最近我想使用 WPF 技术和 MVVM 设计模式。
这些应用程序的可行设计是我有一个可以在其上切换屏幕(UserControls)的 MainForm(Window)。因此,您只有一个“当前”屏幕,其中包含上一个、下一个等按钮(就像一个向导)。
大多数应用程序都有非常相似的逻辑。他们例如。需要从用户(一个屏幕)获取 OrderNumber(PIN,任何文本..),通过卡处理支付(第二个屏幕),... 跨应用程序的不同之处在于 GUI:图像、字体、颜色、显示器分辨率、按钮位置, ...
我的想法是编写典型的 ViewModel 并将它们放在公共库中。然后,特定的应用程序将为这些 ViewModel 提供它们的视图。然后,每个 ViewModel 将在整个应用程序生命周期中绑定到一个特定的 View。
例子:
库 Common.dll
- 包含典型的 ViewModel:ScreenGetTextViewModel、ScreenPayByCardViewModel、...
- (还包含 ViewModel 的默认视图)
应用1:
- 参考 Common.dll
- 包含客户端 1 的视图:ScreenGetTextView、ScreenPayByCardView、...(这些视图从 Common.dll 绑定到 ViewModel)
应用 2:
- 参考 Common.dll
- 包含客户端 2 的视图:ScreenGetTextView、ScreenPayByCardView、...(这些视图从 Common.dll 绑定到 ViewModel)
由于逻辑和 GUI 分离,MVVM 在我看来是实现我的要求的正确方法。
我的问题是如何在 WPF 中制作这个,使用什么,在哪里激励自己。我更喜欢没有 3rd 方 MVVM 工具包的简单解决方案(如果合理且可能的话)。
一些子问题/想法:
如何指定应该绑定到特定 ViewModel 的 View?使用一些 ViewLocator?将“视图”属性放入 ViewModel?
我更喜欢编写不与 WPF 耦合的 Common.dll,因为将来可能会出现 UWP 应用程序(如果可能的话)。
谢谢你
解决方案
我只见过每个 ViewModel 的一个视图 - 所以如果有另一种方法可以做到这一点,我会很感兴趣。
我会为每个视图使用一个 ViewModel,但每个 ViewModel 都继承自公共 ViewModel。
因此 Common.dll 将包含 ScreenPayByCardView,而应用程序 1 将包含从 ScreenPayByCardView 继承的 App1ScreenPayByCardView。可能这个 ViewModel 甚至可能不包含它自己的逻辑。
推荐阅读
- python - 不正确的碰撞检测
- c# - 按多个按钮并将其保存在慢性中以供进一步操作
- linux - 检测到反转(或先前应用)的补丁!假设-R?[n]
- node.js - 如何解决在节点中将循环结构转换为 JSON?
- neo4j - 除一个节点外的最短路径
- php - Guzzle Post Request 发送带有附加参数的文件
- docker - nextjs 多级 docker 构建在 nginx 代理后面
- shiny - rCharts 蜘蛛网图在 Shiny 中呈现为线图
- python - 重复标志错误:标志被定义了两次:第一次在包中,第二次在包内的模块中
- c# - 在 C# 中使用 SendMessage() 写入 Excel