我很难获得多个视图来对抗1个viewmodel。我已经阅读了Naming Convention for Multi-View Support而没有从中得到很多东西,并且在这个过程中尝试了无数的东西。
举一个简单的例子。假设我有一个驻留在ShellViewModel中的ViewModel,它基本上包含Person对象列表。我希望在我的应用程序中以两种不同的方式显示它们。
在这种情况下命名视图的正确方法是什么,以及如何在ShellView中显示两个视图?
答案 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
的新文件夹,并在其中创建名为Grid
和List
的视图。
您的名称空间变为<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" />
答案 1 :(得分:4)
根据您所指的文档,我应该不在您的视图名称中使用查看。将视图类命名为 People.Grid 和 People.List 。