我想對同一個視圖模型使用多個視圖。我似乎無法解決這個問題。我究竟做錯了什麼? 這個簡單的例子:Caliburn.Micro通過View.Context的多個視圖不起作用
的文件視圖模型:
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 =「詳細信息」
那麼爲什麼它不工作?
編輯:對不起,我想我讓這個問題容易理解,看起來不是。讓我詳細說明一下:
我描述的情況非常簡單。最簡單的例子是Windows文件瀏覽器。你知道,你如何輕鬆地改變視圖:細節,列表,瓦片,小圖標,大圖標等等就是這樣 - 你顯示的是同一個文件夾的內容,同一個文件列表,因此我們假設,同一個單一的視圖模型。唯一改變的是用於顯示相同視圖模型的視圖。詳細信息視圖,列表視圖等。相同的單一視圖模型。多個不同的意見。
從Caliburn.Micro文件建立摘自:
View/View Model Naming Conventions · Caliburn.Micro
科:命名約定了多視角支持
正如文件的約定部分中提到,該框架被設計用來處理ViewModel和View之間的一對多關係。Screens, Conductors and Composition · Caliburn.Micro
科:在同一視圖模型
多個視圖您可能不知道這一點,但Caliburn.Micro可以顯示在同一個視圖模型多個視圖。這通過在View/ViewModel的注入站點上設置附加屬性View.Context來支持。
我希望這有助於澄清事情。
你會不會要充分分類名稱「WpfApplicationExample.MVVM.File.Details」? –
目前還不清楚你在這裏試圖用「View.Context」來做什麼。 Caliburn爲您處理View-ViewModel上下文映射,爲什麼要自己設置它? – MoonKnight
用更詳細的解釋更新了問題。 – cryodream