一个ViewModel,多个视图

时间:2013-09-13 14:21:46

标签: wpf mvvm caliburn.micro

我很难获得多个视图来对抗1个viewmodel。我已经阅读了Naming Convention for Multi-View Support而没有从中得到很多东西,并且在这个过程中尝试了无数的东西。

举一个简单的例子。假设我有一个驻留在ShellViewModel中的ViewModel,它基本上包含Person对象列表。我希望在我的应用程序中以两种不同的方式显示它们。

enter image description here

在这种情况下命名视图的正确方法是什么,以及如何在ShellView中显示两个视图?

2 个答案:

答案 0 :(得分:8)

Anders是正确的,Caliburn.Micro有许多默认约定,其中一个会为<RootNS>.Views.[<ChildNS>].<ViewTypeName>找到并显示<RootNS>.ViewModels.[<ChildNS>].<ViewModelTypeName>

在您的情况下,对于单个View(假设类驻留在从文件夹派生的名称空间中):

<RootNS>.Views.PeopleView将在<RootNS>.ViewModels.PeopleViewModel找到并显示。

对于同一个视图模型的多个视图,惯例是为格式为<EntityName>.<Context>的视图模型显示格式为<EntityName>[<ViewSuffix>]ViewModel的视图:

在您的示例中,您可以创建一个名为People的新文件夹,并在其中创建名为GridList的视图。

您的名称空间变为<RootNS>.Views.People.Grid<RootNS>.Views.People.List,然后应为<RootNS>.ViewModels.PeopleViewModel找到并显示。

然后,您通常会在Views之类的内容中显示ContentControl,并通过设置View属性选择要显示的cal:View.Context。您将对该名称进行硬编码,如果该特定控件中的上下文不会更改,或者绑定到描述ViewModel应显示为什么状态的属性。

e.g。

<ContentControl cal:View.Model="{Binding Path=ActiveItem}" 
                cal:View.Context="List" />

请参阅Multiple Views over the Same ViewModel部分。

答案 1 :(得分:4)

根据您所指的文档,我应该在您的视图名称中使用查看。将视图类命名为 People.Grid People.List