C# Wpf MVVM:视图到底需要什么?

C# Wpf MVVM:视图到底需要什么?,c#,wpf,mvvm,C#,Wpf,Mvvm,我是WPF和MVVM的新手,正在尝试编写固件程序员,这样我就可以通过USB更新内容,保存和上传设置/状态数据。MVVM似乎可以解决这个问题。我目前有页面,可以在应用程序中导航(尽管导航服务目前处于代码隐藏状态),但我一直在思考如何实现标准的“客户”/“个人”示例中没有的东西 在一些页面上,我可以看到一些子部分被分为页面中托管的独立视图,这些子部分在应用程序中使用了不止一次 例如,我希望有一个文本块,根据连接过程中的路标、固件更新、备份等显示连接状态和更新。带有%的进度条是另一个。用于显示错误、数

我是WPF和MVVM的新手,正在尝试编写固件程序员,这样我就可以通过USB更新内容,保存和上传设置/状态数据。MVVM似乎可以解决这个问题。我目前有页面,可以在应用程序中导航(尽管导航服务目前处于代码隐藏状态),但我一直在思考如何实现标准的“客户”/“个人”示例中没有的东西

在一些页面上,我可以看到一些子部分被分为页面中托管的独立视图,这些子部分在应用程序中使用了不止一次

例如,我希望有一个文本块,根据连接过程中的路标、固件更新、备份等显示连接状态和更新。带有%的进度条是另一个。用于显示错误、数据或选择框(取决于所发生的情况)的部分将是另一个

将3个完全不同的输出放在一个分区上,并根据情况显示,这看起来很混乱。我可以看到该部分是一个视图框,为每个案例创建一个独特的视图是一个更好的解决方案(可能还有上面的其他示例)

或者以“状态显示”为例,我可以看到它作为自己的视图实现,页面的视图模型将使用messenger将当前状态传递回“状态显示”视图模型。我还可以看到页面的视图模型通过调用它自己的方法来处理这一切。我还可以看到可能使用全局模型来保存状态字符串(可能是枚举?),并且可以使视图模型将正确的字符串拉入“currentStatus”变量

正确的方法是什么?把它放在一页纸上?从静态零件中细分动态/变化零件

OP:

显然,页面本身就是视图,但是最好让“Status:”显示文本块及其值,并且错误/选择器部分也是视图吗

如果您询问状态和错误显示是否应为
UserControl
s,则无论控件是否使用视图模型,它们都可以是“视图”

顺便说一句,通常最好在
UserControl
中使用
dependencProperty
s而不是视图模型,否则最终会在视图(以便
MainWindow
可以数据绑定到它)和控件的视图模型(纯粹为了用户控件的利益)中都有重复的属性

如果
UserControl
使用
dependencProperty
s,则控件和视图的两个用户都可以数据绑定到同一组属性,而不会重复。通过这种方式,您将认识到
UserControl
s不需要单独的VM

作品:

…页面的视图模型将使用messenger将当前状态传递回“状态显示”视图模型


不要这样做,这就是数据绑定的用途。

没有阅读您所写问题的很多细节。带有WPF的MVVM用于设计桌面应用程序。视图是您将要编写的xaml UI层。谢谢Prateek,但我的问题是是否要细分视图。很明显,一个页面就是一个视图,一个工具栏就是一个视图,一个表单,等等。但我也看到了,有人似乎主张将其进一步抽象,以便视图可以是一个按钮或子部分。只是想弄清楚在这方面的分界线在哪里。把这些东西做成一个“视图”——你想在应用程序的其他部分重用(现在或将来),它还封装了一个特性/功能。一个按钮可以是一个视图,如果它做的工作比看起来漂亮和调用处理程序更复杂的话。在后面的例子中,使用样式。谢谢你,米基德,这让我明白了我需要更多地研究用户控件。但是,是的,这正是我想问的,基本上,我们是想尽可能地细分视图,还是可以将一个页面保持为一个完整的页面(即使可以说有相当多的移动部分)?为了清晰起见,我将编辑我的原件。@liquidair谢谢。如果你相信的话,别忘了接受这个答案。@liquidair我不会太担心国旗。我在《太阳报》上看到了很多类似的问题,有时这完全取决于行星的排列:)如果我在任何方面都有所帮助,那就是最重要的。谢谢你,是的,你确实帮了我!在我真正尝试应用用户控件之前,我必须连接好这个视图模型(谷歌上没有太多的控件)……不幸的是,我选择了最难的页面开始,所以我想同时连接到USB、异步任务、MVVM和这些,哈哈。@liquidair这听起来是一个很好的新问题。请随意发布一个新问题,并向我提及以供查看:)