C# 设计决策:有两个视图的MVVM和WPF?

C# 设计决策:有两个视图的MVVM和WPF?,c#,wpf,mvvm,C#,Wpf,Mvvm,我希望我没有监督一个老生常谈的问题,但就我所见,它们都更加专业化了 我想知道,我是否“在正确的轨道上”。过去我用C#(主要是.net-3.5)做了一些WinForms的东西,现在我想用WPF做一个小的辅助项目。目前,我正在阅读很多关于MVVM和使用WPF(.net4)时的其他实现细节的文章 我需要实现的是: 我想要一种用于oracle数据库的搜索工具。数据库连接等是固定的、已启动并正在运行的。所以这部分没有工作要做。新工具应在windows7台式电脑和windows7平板电脑上运行。因此,我需要

我希望我没有监督一个老生常谈的问题,但就我所见,它们都更加专业化了

我想知道,我是否“在正确的轨道上”。过去我用C#(主要是.net-3.5)做了一些WinForms的东西,现在我想用WPF做一个小的辅助项目。目前,我正在阅读很多关于MVVM和使用WPF(.net4)时的其他实现细节的文章

我需要实现的是:

我想要一种用于oracle数据库的搜索工具。数据库连接等是固定的、已启动并正在运行的。所以这部分没有工作要做。新工具应在windows7台式电脑和windows7平板电脑上运行。因此,我需要两种不同的视图,一种是常用的鼠标-键盘交互gui,另一种是针对触摸输入优化的

所以我有了使用一个模型、一个视图模型和两个视图的想法。我不想通过Unity或类似的方式使用IOC,因为这会增加一层复杂性,这对于这个小项目来说是过分的

我的实际问题是:

这是正确的方法(使用两个视图和一个视图模型)还是我在这里完全错了(也许DataTemplates在这里会更好?)?有什么好的方法可以实现这一点


提前谢谢

我认为你的思路是对的

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


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

拥有ViewModel的想法是,在一个与视图相关的逻辑没有直接依赖关系的地方整合视图相关的逻辑。所以,是的,我认为你的方法很好

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


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

我也同意您的做法是正确的,但对于具有嵌套用户控件或多个控件的大型项目,许多视图值得一看具有两种不同样式的单个视图。在最简单的情况下,触摸风格将有更大的输入控制。这意味着对绑定逻辑的更改只需在一个位置(单个视图)进行,而不是在两个视图中进行。

为什么要使用两个视图?使用一个,使其在使用可用空间时具有一定的灵活性。工作得很好。我想有两个不同的视图,以在使用触摸屏和鼠标时获得“最大”的用户体验。例如,在使用触摸输入时,在鼠标环境中的datagrid和带有“大细节”项(难以解释…)的列表框(或simliar)中显示结果列表…但视图的基本布线将保持不变,您只需使用不同的涂层。是的。这是我的问题。使用两个视图是正确的,还是有其他方法?或者我用这种方式来“打破”模式?那么你就可以用这种方式来使用MVVM了。但在大多数情况下,没有必要这样做。对于任何开发人员来说,获得更好的用户体验始终是一个很好的起点:)谢谢您的回答。我考虑了两件事来决定使用哪个视图:让开发人员强制它显示一个特定的视图,并使用一些技术来确定触摸是否像我理解你的观点那样被嵌入,但是触摸视图将与鼠标视图完全不同。因此,使用两种不同的视图对我来说会容易得多。这不是MVVM的用途吗?替换表示和重用现有(数据)模型?我同意,但这取决于触摸视图的不同程度。这可能只是可用性的变化(字体、按钮大小等),在这种情况下,样式会更好。如果是整体布局,那么整体视图更改会更好。样式在复杂的情况下更容易处理,并且在绑定发生变化时更容易维护,只要布局保持不变(尽管您可以在样式中设置一些布局…),我的意思是,有一些选项,但这个选项还没有出现!