wpf - 一个 ViewModel,多个 View

标签 wpf mvvm caliburn.micro

我很难让多个 View 针对 1 个 View 模型工作。我已阅读Naming Convention for Multi-View Support并没有从中得到太多,并且在这个过程中尝试了无数的事情。

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

enter image description here

在这种情况下命名 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" />

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

关于wpf - 一个 ViewModel,多个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18788671/

相关文章:

wpf - Caliburn.Micro 的 WindowManager.ShowPopup 及设置

c# - WPF中的Web浏览器控件

c# - 如何将数据集中的表绑定(bind)到 C# 和 XAML 中的 WPF 数据网格

wpf - 为什么我的 IsMouseOver 风格在我的 Controller 风格中什么都不做

C#执行cmd命令不起作用

wpf - 如何告诉我的 ViewModel 用户正在更改 TextBox 中的文本?

android - 如何使用 LiveData、ViewModel 处理网络请求的状态并相应地更新 UI

wpf - 使用相同的 DataContext 设置 DataGrid 和 ContextMenu

.net - 分层企业应用程序中的 WPF MVVM 架构

c# - Caliburn micro 在使用 mef 时找不到 MainView