我很难让多个 View 针对 1 个 View 模型工作。我已阅读Naming Convention for Multi-View Support并没有从中得到太多,并且在这个过程中尝试了无数的事情。
举个简单的例子。假设我有一个位于 ShellViewModel 中的 People ViewModel,它基本上包含一个 Person 对象列表。我想在我的应用程序中以两种不同的方式显示它们。
在这种情况下命名 View 的正确方法是什么,以及如何在 ShellView 中显示这两个 View ?
最佳答案
Anders 是正确的,Caliburn.Micro
有许多默认约定。 ,其中之一将找到并显示 <RootNS>.Views.[<ChildNS>].<ViewTypeName>
对于 <RootNS>.ViewModels.[<ChildNS>].<ViewModelTypeName>
.
就您而言,对于单个 View
(假设类驻留在从文件夹派生的命名空间中):
<RootNS>.Views.PeopleView
将找到并显示 <RootNS>.ViewModels.PeopleViewModel
.
对于同一 View 模型上的多个 View ,约定是格式为 <EntityName>.<Context>
的 View 显示格式为 <EntityName>[<ViewSuffix>]ViewModel
的 View 模型:
根据您的示例,您可以创建一个名为 People
的新文件夹。 ,并在其中创建名为 Grid
的 View 和List
.
您的命名空间变为 <RootNS>.Views.People.Grid
和<RootNS>.Views.People.List
然后,应该找到并显示 <RootNS>.ViewModels.PeopleViewModel
.
然后您通常会显示 Views
类似于 ContentControl
,选择View
您想通过设置cal:View.Context
来显示属性(property)。如果该特定控件中的上下文不会更改,您可以对名称进行硬编码,或者绑定(bind)到描述 ViewModel
状态的属性。应显示为。
例如
<ContentControl cal:View.Model="{Binding Path=ActiveItem}"
cal:View.Context="List" />
关于wpf - 一个 ViewModel,多个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18788671/