8

我很难让多个视图针对 1 个视图模型工作。我已经阅读了多视图支持的命名约定,但没有从中得到太多,并且在此过程中尝试了无数的事情。

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

在此处输入图像描述

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

4

2 回答 2

8

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

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

<RootNS>.Views.PeopleView将被定位并显示为<RootNS>.ViewModels.PeopleViewModel.

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

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

您的命名空间变成<RootNS>.Views.People.Gridand <RootNS>.Views.People.List,然后应该定位和显示<RootNS>.ViewModels.PeopleViewModel.

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

例如

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

请参阅同一 ViewModel 上的多个视图部分。

于 2013-09-15T22:26:05.523 回答
4

据我从您所指的文档中可以看出,您不应视图名称中使用View。将您的视图类命名为 People.GridPeople.List

于 2013-09-13T16:11:50.570 回答