我很难让多个视图针对 1 个视图模型工作。我已经阅读了多视图支持的命名约定,但没有从中得到太多,并且在此过程中尝试了无数的事情。
举个简单的例子。假设我有一个居住在 ShellViewModel 中的人的 ViewModel,它基本上包含一个人对象列表。我想在我的应用程序中以两种不同的方式显示它们。
在这种情况下,命名视图的正确方法是什么,以及如何在 ShellView 中显示两个视图?
我很难让多个视图针对 1 个视图模型工作。我已经阅读了多视图支持的命名约定,但没有从中得到太多,并且在此过程中尝试了无数的事情。
举个简单的例子。假设我有一个居住在 ShellViewModel 中的人的 ViewModel,它基本上包含一个人对象列表。我想在我的应用程序中以两种不同的方式显示它们。
在这种情况下,命名视图的正确方法是什么,以及如何在 ShellView 中显示两个视图?
Anders 是正确的,对于 有许多默认约定Caliburn.Micro
,其中一个会定位并显示<RootNS>.Views.[<ChildNS>].<ViewTypeName>
对于<RootNS>.ViewModels.[<ChildNS>].<ViewModelTypeName>
.
在您的情况下,对于单个View
(假设类驻留在从文件夹派生的命名空间中):
<RootNS>.Views.PeopleView
将被定位并显示为<RootNS>.ViewModels.PeopleViewModel
.
对于同一视图模型上的多个视图,约定是为格式<EntityName>.<Context>
视图模型显示格式视图<EntityName>[<ViewSuffix>]ViewModel
:
从您的示例中,您可以创建一个名为 的新文件夹,并在其中创建名为andPeople
的视图。Grid
List
您的命名空间变成<RootNS>.Views.People.Grid
and <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 上的多个视图部分。
据我从您所指的文档中可以看出,您不应在视图名称中使用View。将您的视图类命名为 People.Grid和People.List。