我们的项目中出现了以下情况: 我们有分层业务对象。根节点是一个项目。该项目包含不同类型的数据。该数据在“静态数据”,“结果数据”和“控制数据”中分开。
Project
|
+--- Static Data
| |
| +---- Dataset 1
| |
| +---- Dataset 2
|
+--- Control Data
| |
| +---- Dataset 3
| |
| +---- Dataset 4
|
+--- Result Data
|
+---- Resultset
应用程序有一种Project Explorer(如VS中的Solution Explorer),它显示了上面树视图中显示的数据结构。为了实现这一点,我用相应的模型创建了不同的视图模型,例如叶子的ProjectViewModel,StaticDataViewModel和DatasetViewModel。 如果用户单击其中一个数据集,则会打开一个显示数据的视图。
当我在其他视图中显示数据集时,我应该使用树中使用的DatasetViewModel,还是应该创建新的View Model(DatasetDetailsViewModel)?
我读到的有关MVVM模式的两件事: 1. ViewModel不应该知道它的数据在View中的显示方式。 2. ViewModel是某种状态机。
记住这两点我不确定是否可以使用相同的ViewModel进行树视图和详细信息视图。一方面,我可以使用相同的视图模型,因为它只是一种显示数据集的不同类型。树视图仅显示数据集的名称,而详细视图显示包含的实际数据。另一方面,视图模型是某种状态机,并且视图可能具有不适合的状态。例如,如果我有一个可见性标志,我可能会为树视图设置为true,但在详细视图中我想设置为false。
所以我不确定是否应该创建一个新的视图模型或使用树视图中的现有模型。
意见通缉!
谢谢, 弗洛里安
答案 0 :(得分:1)
我可能会在wpf中使用分层数据模板,请参阅this article.
基本上在我看来,你只需要一个TreeView控件及其ItemSource或DataContext到ProjectViewModel,然后为你的其他视图模型创建一些其他的数据窗口。
查看您的ViewModel只需要提供要显示的视图的所有信息,它不会也不应该完全关心它是如何显示的,或者是什么技术显示它(例如WPF)。这就是MVVM应该发光的地方,它将ui逻辑与ui的实际实现区分开来。
DataTemplates非常棒,因为您可以重用xaml的各个部分。如果您有一个DataSetViewModel,您可以创建一个DataTemplate,它将以某种方式显示该类型,而无需您进行任何进一步的配置。
每当你想创建一个新的viewmodel时,你需要问自己,“是否有一个viewModel已经拥有所有这些属性?如果你回答是,我不会创建一个新的ViewModel,有时候会更少。” p>
分层模板适用于具有嵌套视图模型的用户控件