找不到ViewModel的视图

时间:2012-06-18 12:53:09

标签: wpf caliburn.micro

我有一个使用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的视图。

你能解释一下为什么会发生这种情况吗? 感谢。

5 个答案:

答案 0 :(得分:13)

Caliburn Micro期待您项目中的某些文件结构。您的视图和视图模型应位于名为Views和ViewModels的单独文件夹中。

Here是一个很好的Hello World示例,用于描述这一点。

答案 1 :(得分:12)

仅仅为了将来,它也会在重命名类/包之后发生,但在视图中xaml文件“x:Class”不会更新。

答案 2 :(得分:5)

您应该在引导程序中覆盖SelectAssemblies,并在视图所在的位置提供程序集名称。

答案 3 :(得分:3)

确保您拥有ViewModels和Views文件夹。还要确保类和usercontrols / windows的名称也遵循以下命名约定,如:

  • = ViewModels
  • == YoloViewModel
  • =意见
  • == YoloView

如果视图和视图模型位于不同的程序集中,请尝试以下方法:

在你的引导程序中,你需要添加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。