10

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

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

4

6 回答 6

15

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

于 2015-07-02T09:46:49.757 回答
11

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

是一个很好的 Hello World 示例来描述这一点。

于 2012-06-18T13:00:59.867 回答
8

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

于 2014-08-18T18:13:02.950 回答
3

确保您有文件夹 ViewModels 和 Views。还要确保您的类和用户控件/窗口的名称也遵循这些命名约定,例如:

  • = 视图模型
  • == YoloViewModel
  • = 观看次数
  • == YoloView

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

在您的引导程序中,您需要添加视图模型/视图所在的程序集:

protected override IEnumerable<Assembly> SelectAssemblies()
{
  var assemblies = base.SelectAssemblies().ToList();
  assemblies.Add(typeof(MyProject.Foo.ViewModels.YoloViewModel).Assembly);

  return assemblies;
}
于 2018-06-14T10:29:27.043 回答
1

我认为,我想从两个方面解决这个问题。1.在解决方案中,您应该有两个文件夹,一个是“Views”,另一个是“ViewModels”。

2.在您的引导程序中,您需要添加视图模型或视图所在的程序集:

protected override IEnumerable<Assembly> SelectAssemblies()
{
    var assemblies = base.SelectAssemblies().ToList();
    assemblies.Add(typeof(Project.ViewsNamespace.SomeView).Assembly);
   return assemblies;
}
于 2021-09-13T09:29:52.277 回答
0

检查拼写错误。意思是如果您的 ViewModel 类名称是 ShellViewModel.CS,那么您的视图名称应该是 ShellView。打字错误可能在您的 ViewModel 文件夹中,您有 ShelViewModel.CS,而在您的 View 文件夹中,您有 ShellView.CS。

于 2020-05-03T21:04:22.283 回答