【发布时间】:2015-09-27 18:10:58
【问题描述】:
我想为同一个视图模型使用多个视图。我似乎无法解决它。我究竟做错了什么? 简单的例子:
文件视图模型:
using System.IO;
namespace WpfApplicationExample.MVVM
{
internal class FileViewModel
{
public FileInfo FileInfo { get; set; }
}
}
文件列表视图模型:
namespace WpfApplicationExample.MVVM
{
class FileListViewModel
{
public FileViewModel Files { get; set; }
}
}
文件列表视图。这是我尝试使用 View.Context 的地方,但它不起作用:
<UserControl x:Class="WpfApplicationExample.MVVM.FileListView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:cal="http://www.caliburnproject.org"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<ListView Name="Files" cal:View.Context="Details"/>
</Grid>
</UserControl>
文件视图#1:详细信息:
<UserControl x:Class="WpfApplicationExample.MVVM.File.Details"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel Orientation="Horizontal">
<Label Name="FileInfo_Name"/>
<Label Name="FileInfo_Length"/>
<Label Name="FileInfo_Directory"/>
</StackPanel>
</UserControl>
文件视图 #2,简单:
<UserControl x:Class="WpfApplicationExample.MVVM.File.Simple"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Label Name="FileInfo_Name"/>
</Grid>
</UserControl>
这只是一个最基本的想法,用于显示文件位置以及我试图放置 cal:View.Context="Details"
的位置那么为什么它不起作用?
编辑:对不起,我以为我让这个问题很容易理解,但似乎不是。让我详细说明:
我所描述的情况非常简单。最简单的示例是 Windows 文件资源管理器。您知道,如何轻松更改视图:详细信息、列表、图块、小图标、大图标等...就是这样 - 您正在显示相同的文件夹内容、相同的文件列表,因此我们假设相同的单个视图模型。唯一改变的是用于显示相同视图模型的视图。详细信息视图、列表视图等。相同的单个视图模型。多个不同的视图。
取自 Caliburn.Micro 文档:
View / View Model Naming Conventions · Caliburn.Micro
部分:多视图支持的命名约定
如文档的约定部分所述,该框架旨在处理 ViewModel 和 View 之间的一对多关系。Screens, Conductors and Composition · Caliburn.Micro
部分:同一 ViewModel 上的多个视图
您可能没有意识到这一点,但 Caliburn.Micro 可以在同一个 ViewModel 上显示多个 View。这可以通过在 View/ViewModel 的注入站点上设置 View.Context 附加属性来支持。
我希望这有助于解决问题。
【问题讨论】:
-
您不需要完全分类名称“WpfApplicationExample.MVVM.File.Details”吗?
-
目前尚不清楚您在此处尝试使用“View.Context”做什么。 Caliburn 会为您处理 View-ViewModel 上下文映射,您为什么要自己设置?
-
用更详细的解释更新了问题。
标签: wpf mvvm caliburn.micro