Mvvm 同一模型的不同视图模型显示在不同视图中

Mvvm 同一模型的不同视图模型显示在不同视图中,mvvm,Mvvm,我们的项目中出现了以下场景: 我们有层次化的业务对象。根节点应该是一个项目。项目中包含不同类型的数据。该数据分为“静态数据”、“结果数据”和“控制数据” 应用程序有一种项目资源管理器(类似于VS中的解决方案资源管理器),它以树状视图的形式显示数据结构。为了实现这一点,我使用相应的模型创建了不同的视图模型,例如ProjectViewModel、StaticDataViewModel和叶的DatasetViewModel。 如果用户单击其中一个数据集,将打开一个显示数据的视图 当我在其他视图中显示数

我们的项目中出现了以下场景: 我们有层次化的业务对象。根节点应该是一个项目。项目中包含不同类型的数据。该数据分为“静态数据”、“结果数据”和“控制数据”

应用程序有一种项目资源管理器(类似于VS中的解决方案资源管理器),它以树状视图的形式显示数据结构。为了实现这一点,我使用相应的模型创建了不同的视图模型,例如ProjectViewModel、StaticDataViewModel和叶的DatasetViewModel。 如果用户单击其中一个数据集,将打开一个显示数据的视图

当我在其他视图中显示数据集时,我应该使用树中使用的DatasetViewModel,还是应该创建一个新的视图模型(DatasetDetailsViewModel)

关于MVVM模式,我读到了两件事: 1.ViewModel不应知道其数据在视图中的显示方式。 2.ViewModel是某种状态机

考虑到这两点,我不确定是否可以对树视图和细节视图使用相同的ViewModel。一方面,我可以使用相同的视图模型,因为它只是显示数据集的不同类型。树状视图仅显示数据集的名称,而详细视图显示包含的实际数据。另一方面,视图模型是某种状态机,视图可能具有不匹配的状态。例如,如果我有一个可见性标志,我可能会在树视图中将其设置为true,但在详细视图中,我希望将其设置为false

因此,我不确定是应该创建一个新的视图模型,还是使用treeview中现有的视图模型

需要意见

谢谢,
Florian

我可能会利用wpf中的分层数据模板参见

基本上,在我看来,您只需要一个TreeView控件及其ItemSource或DataContext来创建ProjectViewModel,然后为其他ViewModel创建一些其他数据模板

查看您的ViewModel只需要提供视图要显示的所有信息,它不应该也不关心视图的显示方式,也不应该关心显示它的技术(例如WPF)。这就是MVVM应该发挥作用的地方,它将ui逻辑与ui的实际实现分离开来

数据模板非常好,因为您可以重用xaml的各个部分。如果您有一个DataSetViewModel,您可以创建一个DataTemplate,它将以某种方式显示该类型,而无需您进行任何进一步的配置

每次您想要创建一个新的viewmodel时,您都需要问自己,“是否有一个viewmodel已经具有所有这些属性?如果您回答是的,我不会创建一个新的viewmodel,有时少就是多。”


分层模板适用于具有嵌套viewmodels的用户控件

我可能会利用wpf中的分层数据模板参见

基本上,在我看来,您只需要一个TreeView控件及其ItemSource或DataContext来创建ProjectViewModel,然后为其他ViewModel创建一些其他数据模板

查看您的ViewModel只需要提供视图要显示的所有信息,它不应该也不关心视图的显示方式,也不应该关心显示它的技术(例如WPF)。MVVM应该在这方面大放异彩,它将ui逻辑与ui的实际实现分离开来

DataTemplates非常好,因为您可以重用xaml的部分。如果您有一个DataSetViewModel,您可以创建一个DataTemplate,它将以某种方式显示该类型,而无需您进行任何进一步的配置

每当您想要创建一个新的viewmodel时,您都需要问自己,“是否有一个viewmodel已经具有所有这些属性?”?如果您回答是,我不会创建新的ViewModel,有时少就是多


分层模板适用于具有嵌套视图模型的用户控件

谢谢,Jose!事实上,我倾向于这样做:尽可能频繁地重用ViewModels。但在某些情况下,ViewModel类变得非常庞大。这是因为我有一个ViewModel,它几乎提供了所有信息。我使用缺少的信息或命令扩展了ViewModel。这让我怀疑我是否走对了路。是的,我一直在使用数据模板,尤其是树视图的分层模板。谢谢,Jose!事实上,我倾向于这样做:尽可能频繁地重用ViewModels。但在某些情况下,ViewModel类变得非常庞大。这是因为我有一个ViewModel,它几乎提供了所有信息。我使用缺少的信息或命令扩展了ViewModel。这让我怀疑我是否走对了路。是的,我经常使用数据模板,尤其是树状视图的分层模板。
Project
   |
   +--- Static Data
   |          |
   |          +---- Dataset 1
   |          |
   |          +---- Dataset 2
   |
   +--- Control Data
   |          |
   |          +---- Dataset 3
   |          |
   |          +---- Dataset 4
   |
   +--- Result Data
              |
              +---- Resultset