从View的DataContext引用ViewModel防止XAML Designer编辑

时间:2012-09-28 18:30:20

标签: c# wpf mvvm

我正在尝试将我的viewmodel“挂钩”为我的View的DataContext。我将使用应用程序范围的一个视图到视图模型方案。

我喜欢使用以下方法进行附加(它成功完成)的想法:

 <UserControl ......Window Stuff.......>
        <UserControl.DataContext >
             <vm:MyViewModel/>
         </UserControl.DataContext>
 </UserControl>

然而,xaml编辑器在<vm:MyViewModel/>下放置了一条紫色的波浪线,而hovertext则给出了错误

  "Cannot create instance of vm:MyViewModel"

但是它正确地构建/运行我的应用程序并呈现数据,方法:

 <UserControl>
    <UserControl.Resources>
        <DataTemplate DataType="{x:Type vm:MyViewModel}">
             <vw:MyView/>
        </DataTemplate>
   </UserControl.Resources>
 </UserControl>

不显示我的数据,尽管它似乎是可接受的代码。

注释掉DataContext引用实际上只是手动编辑控件。我做错了什么/我忘了什么?

提前致谢! :)

1 个答案:

答案 0 :(得分:0)

视图模型的构造函数中可能存在阻止模型在Visual Studio中实例化的内容。

尝试在视图模型的构造函数中完成任何操作之前添加return语句,重建并查看错误是否消失。

这是一个扩展方法,用于确定当前进程是否在visual studio中:

public static class Extensions
{
    /// <summary>
    /// Extension method to determine if the current process is executing
    /// code within the Visual Studio designer or not.
    /// </summary>
    public static bool IsVisualStudioDesigner( this Process process )
    {
        return process.MainModule.ModuleName.Contains( "devenv.exe" );
    }
}

然后在你的构造函数中:

public ctor()
{
  if ( Process.GetCurrentProcess().IsVisualStudioDesigner() )
    return;

  // do constructor stuff
}