如何防止d:DataContext绑定引起的设计时错误

时间:2012-06-21 12:30:46

标签: wpf mvvm design-time

将ViewModel附加到View是相当方便的 d:DataContext="{d:DesignInstance ViewModel}",但在这种情况下,View设计器开始创建ViewModel的实例并使用异常崩溃。

例如,我在ViewModel中有一个命令,其可用性取决于从数据库加载的统计信息。可视化设计器无法加载统计信息,统计信息仍为null,因此该命令会抛出异常并导致设计器崩溃。

是否有选项可以解决这个问题,或者我是否必须删除与ViewModel的绑定?

3 个答案:

答案 0 :(得分:2)

除非在DesignInstance标记中设置IsDesignTimeCreatable,否则它实际上不会通过其构造函数实例化数据上下文类。它只会创建一个具有相同“数据形状”的实例。这个虚假数据形状的默认内容可以包含空值,因此您需要修复的东西是在使用数据上下文的类中,这样如果数据未初始化它们就不会使设计器崩溃。

答案 1 :(得分:1)

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

我通常在WPF中发现一个好主意,将所有内容初始化为某个默认值

答案 2 :(得分:1)

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

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

最简单的方法是将构造函数的代码模型放入try catch块中,最好检查它的失败位置。

喜欢

public class myViewmodel()
{
 public myViewmodel()
{

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

}

}