为什么我得到"无法加载类型"在XAML中使用DesignInstance时

时间:2014-04-07 14:04:12

标签: wpf xaml visual-studio-2012 designer

我将我的XAML文件声明为

<l:MoineauPumpCorrectionsWindowBase x:Class="WeinCad.Controls.View.MoineauPumpCorrectionsWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:l="clr-namespace:WeinCad.Controls.View"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

        xmlns:vm="clr-namespace:WeinCad.Controls.ViewModel"
        Title="MoineauPumpCorrectionsWindow" Height="389.8" Width="538.2"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
        mc:Ignorable="d"

        d:DataContext="{d:DesignInstance vm:MoineauPumpCorrectionsViewModel
                         , d:IsDesignTimeCreatable=True}"
    >

但是我收到了错误

Warning 1   Could not load type

    '_.di16.WeinCad.Controls.WeinCadViewModelBase_MoineauPumpCorrectionsViewModel' 

from assembly 

    '_ExpressionDynamicAssembly_b102c6ac-1283-4a35-b5e2-4820bcb2588f
    , Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
      (WeinCad.Controls.ViewModel.MoineauPumpCorrectionsViewModel)

C:\.....\MoineauPumpCorrectionsWindow.xaml  
17  9   WeinCad.Controls

我知道在我的viewmodel中加载我应该有一个零args构造函数的类型,如下所示

    public MoineauPumpCorrectionsViewModel() 
    : this(new MockIOService(), DesignCorrections)
    {
    }

但我仍然得到错误。

请注意,Resharper仍然可以使用声明对XAML文件进行静态分析,但我没有得到设计者对视图模型的支持。

有人可以解释如何摆脱这个错误吗?

1 个答案:

答案 0 :(得分:0)

我找到了一种重现此行为的方法。我意识到这很晚,但可能对未来的读者有所帮助。此外,这适用于VS2013,但我认为VS2012的行为类似。

我对根元素的标记如下

d:DataContext="{d:DesignInstance vms:ClientViewModel}"

WPF设计器每次都抛出“无法加载类型”异常。请注意,我的项目处于早期阶段,所以对于类

而言,字面上并没什么特别之处

根据@ Aybe的评论,我决定尝试使用资源文件,如下所示

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:vm="clr-namespace:MyApp.ViewModels">
  <vm:ClientViewModel x:Key="DesignTimeClientViewModel">
  </vm:ClientViewModel>
</ResourceDictionary>

在App.xaml中添加引用

<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="/DesignTimeData/DesignTimeViewModels.xaml" />
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>

然后我像这样更新了根元素绑定

d:DataContext="{StaticResource DesignTimeClientViewModel}"

使用静态资源可以在不进行任何其他更改的情况下解决错误。