我有一个使用Caliburn.Micro的wpf应用程序。我有一个视图MyView:
<UserControl x:Class="ReferenceMaintenanceWorkspace.MyView"
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"
>
<UserControl.Resources>
</UserControl.Resources>
<TabControl x:Name="Items" >
</TabControl>
我还有MyViewModel:
using System.ComponentModel.Composition;
namespace ReferenceMaintenanceWorkspace
{
[Export(typeof(MyViewModel))]
public class MyViewModel
{
public MyViewModel()
{
base.DisplayName = "Reference Maintenance";
}
由于某种原因,我在选项卡控件上收到以下消息:
无法找到ReferenceMaintenanceWorkspace.MyViewModel的视图。
你能解释一下为什么会发生这种情况吗? 感谢。
答案 0 :(得分:13)
Caliburn Micro期待您项目中的某些文件结构。您的视图和视图模型应位于名为Views和ViewModels的单独文件夹中。
Here是一个很好的Hello World示例,用于描述这一点。
答案 1 :(得分:12)
仅仅为了将来,它也会在重命名类/包之后发生,但在视图中xaml文件“x:Class”不会更新。
答案 2 :(得分:5)
您应该在引导程序中覆盖SelectAssemblies,并在视图所在的位置提供程序集名称。
答案 3 :(得分:3)
确保您拥有ViewModels和Views文件夹。还要确保类和usercontrols / windows的名称也遵循以下命名约定,如:
如果视图和视图模型位于不同的程序集中,请尝试以下方法:
在你的引导程序中,你需要添加viewmodel / view所在的程序集:
protected override IEnumerable<Assembly> SelectAssemblies()
{
var assemblies = base.SelectAssemblies().ToList();
assemblies.Add(typeof(MyProject.Foo.ViewModels.YoloViewModel).Assembly);
return assemblies;
}
答案 4 :(得分:0)
检查拼写错误。意思是如果您的ViewModel类名称为ShellViewModel.CS,则您的视图名称应为ShellView。错字可能在您的ViewModel文件夹中有ShelViewModel.CS,在您的View文件夹中有ShellView.CS。