设计决策:具有两个视图的 MVVM 和 WPF

本文关键字:视图 两个 MVVM WPF 决策 | 更新日期: 2023-09-27 18:36:54

我希望我没有监督一个已经陈述相同的旧问题,但据我所知,它们都更加专业。

想知道,我是否"走在正确的轨道上"。过去,我用C#(主要是.net-3.5)做了一些WinForms的东西,现在我想使用/学习WPF进行一个小的副项目。目前,我正在阅读有关使用WPF(.net4)时MVVM和其他实现细节的信息。

我需要实现的是:

我想有一个预言机数据库的搜索工具。数据库连接等是固定的、已启动并正在运行的。所以这部分没有工作可做。新工具应该在 windows7-desktop-pc windows7-tablet-pc 上运行。所以我想要/需要两个不同的视图,一个是常用的鼠标键盘交互 GUI,一个是针对触摸输入优化的视图。

所以我想到使用一个模型、一个视图模型和两个视图。我不想通过 Unity 或类似的东西使用 IOC,因为这会增加一层复杂性,这对于这个小副项目来说是矫枉过正的。

我的实际问题:

这是正确的方法(使用一个视图模型的 2 个视图)还是我在这里完全错了(也许数据模板在这里会更好?实施这一点的好方法是什么?

提前感谢!

设计决策:具有两个视图的 MVVM 和 WPF

拥有 ViewModel 背后的想法是在一个与视图特定内容没有直接依赖关系的地方合并与视图相关的逻辑。所以,是的,我会说你的方法很好。

DataTemplates似乎更适合"较小的"视图模型,因此,虽然DataTemplateSelector可以根据您的情况很好地完成选择模板的工作,但我认为值得投资一些额外的代码来为您完成全尺寸控件。

您必须弄清楚是否可以自动检测用户使用应用程序的方式,并且可能让您的视图名称遵循约定,以便视图选择可以或多或少地自动发生。

我认为你走在正确的轨道上。

这是使用 MVVM 的一个完美示例。 您可以更改视图或具有视图的多个外观,而无需更改后端。

我可以看到也许使用DataTemplates和DataTemplateSelector,但是如果你的视图变得复杂,那么可读性和可维护性就会下降。

我也同意你走在正确的轨道上,但对于具有嵌套用户控件或许多视图的更大项目,值得查看具有两种不同样式的单个视图。在最简单的情况下,触摸样式将具有更大的输入控件。这意味着只需在一个位置(单个视图)中对绑定逻辑

进行更改,而不是在使用它的两个视图中进行更改。