从视图的数据上下文引用视图模型可防止 XAML 设计器编辑



我正在尝试将我的视图模型作为DataContext"挂接到"我的视图。我将采用应用程序范围的"视图到视图模型"方案。

我喜欢使用以下方法附加的想法(它成功地做到了):

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

但是,xaml 编辑器在 <vm:MyViewModel/> 下放置一条紫色波浪线,悬停文本给出错误

  "Cannot create instance of vm:MyViewModel"

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

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

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

注释掉 DataContext 引用对于手动编辑控件来说确实很痛苦。我做错了什么/我忘记了什么吗?

提前感谢! :)

视图模型的构造函数中可能存在某些内容,导致模型无法在 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
}

最新更新