Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何防止d:DataContext绑定导致的设计时错误_Wpf_Mvvm_Design Time - Fatal编程技术网

Wpf 如何防止d:DataContext绑定导致的设计时错误

Wpf 如何防止d:DataContext绑定导致的设计时错误,wpf,mvvm,design-time,Wpf,Mvvm,Design Time,将ViewModel附着到具有 d:DataContext=“{d:DesignInstance ViewModel}”,但是在这种情况下,视图设计器开始创建ViewModel的实例,并会因异常而崩溃 例如,我在ViewModel中有一个命令,它的可用性取决于从数据库加载的统计数据。可视化设计器无法加载统计信息,并且统计信息保持为null,因此该命令引发异常,设计器崩溃 是否有一个选项可以克服此问题,或者我必须删除与ViewModel的绑定?通常,您有一个单独的ViewModel for des

将ViewModel附着到具有
d:DataContext=“{d:DesignInstance ViewModel}”
,但是在这种情况下,视图设计器开始创建ViewModel的实例,并会因异常而崩溃

例如,我在ViewModel中有一个命令,它的可用性取决于从数据库加载的统计数据。可视化设计器无法加载统计信息,并且统计信息保持为
null
,因此该命令引发异常,设计器崩溃


是否有一个选项可以克服此问题,或者我必须删除与ViewModel的绑定?

通常,您有一个单独的ViewModel for design(存根),用于返回测试数据。 您可以从真实的ViewMOdel继承并设置虚拟默认值,或者使用相同的命名属性创建一个完全独立的ViewMOdel


我通常发现在WPF中将所有内容初始化为某个默认值是个好主意,除非在DesignInstance标记中设置了
IsDesignTimeCreatable
,否则它实际上不会通过其构造函数实例化数据上下文类。它只会创建一个具有相同“数据形状”的实例。此人造数据形状的默认内容可能包含空值,因此需要修复的是使用数据上下文的类,这样,如果数据未初始化,它们就不会使设计器崩溃。

那么视图模型的构造函数在设计时构建数据上下文会很累,并且会失败

一个原因可能是。 可能是您正在使用配置中的某些数据连接

最简单的方法是将视图模型的构造函数代码放入try-catch块中,最好检查它在哪里失败


}

我发现原因是命令可用性检查方法决定了命令是否可用。此方法使用设计时无法获得的数据。命令绑定到主窗口中的按钮,设计器尝试评估命令的可用性。我已经对命令基础结构应用了修复程序,因此它在设计时总是返回命令可用性的
true
,但问题是为什么设计器需要命令可用性并在设计时调用该方法<代码>d:DataContext不是原因,正如您所说。
public class myViewmodel()
{
 public myViewmodel()
{

try
{
// build your data context.
}
catch(Exception ex)
{
//show the messages
}

}