将ViewModel附加到View是相当方便的
d:DataContext="{d:DesignInstance ViewModel}"
,但在这种情况下,View设计器开始创建ViewModel的实例并使用异常崩溃。
例如,我在ViewModel中有一个命令,其可用性取决于从数据库加载的统计信息。可视化设计器无法加载统计信息,统计信息仍为null
,因此该命令会抛出异常并导致设计器崩溃。
是否有选项可以解决这个问题,或者我是否必须删除与ViewModel的绑定?
答案 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
}
}
}