如何阻止我的ViewModel代码在设计器中运行?

Bri*_*tiz 18 wpf designer mvvm

我正在使用MVVM模式开发一个联网的WPF应用程序,它似乎正在运行并连接到设计器中的服务器.

我知道IsInDesignMode属性,但我不确定如何在ViewModel中访问它.

neo*_*lei 30

DependencyObject dep = new DependencyObject();
if (DesignerProperties.GetIsInDesignMode(dep))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)


Kyl*_*Mit 22

只是为了添加这些建议,您可能希望针对生产部署进行优化.

如果需要在ViewModel中检查设计模式,则只能在DEBUG模式下执行此操作,否则发布的版本将始终执行不必要的检查.
在开发时,如果在设计模式下,您可以退出该方法(或者甚至存在一些假数据).

将此代码作为构造函数的第一行(或者调用的任何代码):

C#:

#if DEBUG
    if (DesignerProperties.GetIsInDesignMode(new DependencyObject())) return;
#endif
Run Code Online (Sandbox Code Playgroud)

VB:

#If DEBUG Then
    If DesignerProperties.GetIsInDesignMode(New DependencyObject()) Then Return
#End If
Run Code Online (Sandbox Code Playgroud)


Dar*_*ale 9

我想我会加入这个,因为我只是查看了我在VS2015中发现的东西,它提供了另一种解决方案.在设计器中有一个"禁用项目代码"的按钮.

我假设您ViewModel正在实例化并从您的代码中执行操作.我知道它打破了纯粹的MVVM,但我看到很多人DataContext = new MyViewModel();在代码背后的构造函数中做了类似的事情.

切换此按钮可以解决该问题,并有助于保持代码清洁.结帐MSDN以获取更多信息.

这是MSDN文档中的图像,因此您可以了解它的外观.无论如何,我确信链接最终会破裂.

在此输入图像描述

我在VS2015中发现了这一点,但不确定添加了哪个版本的功能.

作为旁注,它也是一种重新加载设计师的好方法.虽然我尝试时速度很慢.你的milage可能会有所不同.