Cannot find view for ViewModel

2019-04-22 19:04发布

I have a wpf application using Caliburn.Micro. I have a view 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>

I have also MyViewModel:

using System.ComponentModel.Composition;

namespace ReferenceMaintenanceWorkspace
{
[Export(typeof(MyViewModel))]
public class MyViewModel
{
  public MyViewModel()
  {
      base.DisplayName = "Reference Maintenance";
  }

Because of some reason, I get the following message on the tab control:

Cannot find view for ReferenceMaintenanceWorkspace.MyViewModel.

Could you please explain why this could happen? Thanks.

4条回答
Animai°情兽
2楼-- · 2019-04-22 19:29

Caliburn Micro is expecting certain file structure within your project. Your views and viewmodels should be in separate folders named Views and ViewModels.

Here is a nice Hello World example that describes this.

查看更多
贪生不怕死
3楼-- · 2019-04-22 19:29

You should override SelectAssemblies in bootstrapper and provide assembly name where your view lies in.

查看更多
等我变得足够好
4楼-- · 2019-04-22 19:31

make sure you have folders ViewModels and Views. Also make sure the names of your classes and usercontrols/windows also follow these namingconventions like:

  • = ViewModels
  • == YoloViewModel
  • = Views
  • == YoloView

If the views and viewmodels are located in a different assembly try this:

In your bootstrapper you need to add the assembly where the viewmodel/view is located:

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

  return assemblies;
}
查看更多
戒情不戒烟
5楼-- · 2019-04-22 19:51

Just for the future, it happens also after renaming classes/packages, but in view xaml file "x:Class" is not updated.

查看更多
登录 后发表回答