WPF设计器不会加载实体框架

时间:2009-01-18 14:27:54

标签: .net wpf visual-studio-2008 entity-framework

当我使用实体框架时,我一直遇到让WPF设计器在VS 2008中工作的实际问题。我有一个用户控件,可以从实体模型中获取数据。用户控件设计器加载正常,但主窗口抛出以下错误“无法创建类型'CampaignList的实例”。当我编译项目时没有问题。

我已经开始使用一种解决方法来检测它何时处于设计模式,并且在设计模式下不创建“实体”对象。然而,这似乎是一个丑陋的黑客。有更好的方法可以做到这一点,还是我们只需要等待VS更新?

3 个答案:

答案 0 :(得分:1)

这正是你需要做的。它可能看起来像一个丑陋的黑客,它甚至可能是一个丑陋的黑客,但这正是框架处理设计时间渲染的方式。几乎每个标准框架控件(窗体,wpf和web)都确定它是在运行时还是在设计时显示,并且行为方式不同。这是component based design背后的主要思想。您的类存在于两个不同的环境中 - 运行时环境和设计时环境,它们应该在两者中提供丰富而方便的用户体验。并且执行此操作的唯一方法是让控件作者对控件进行编码以执行此操作。

最理想的是,您需要尽可能在堆栈中处理这种情况。绝大多数情况下,您肯定要确定您的设计时间是否在用户控件中,并将虚拟数据源替换为实体框架。您将显示您在某些数据绑定表单和wpf控件中看到的虚假数据类型。

这就是它完成的方式。 VS不会被“更新”,因为它可以......设计好。

答案 1 :(得分:0)

您是否尝试在用户控件的构造函数中加载数据?如果是,是的,您需要检查“设计模式”。如果您将负载放入其他方法(例如您在代码中的其他位置调用的专用“加载”方法),则设计人员可以更加友好。

或者,如果您正在使用带参数的构造函数,则可以为用户控件创建一个默认构造函数(无参数),通过不调用其中的加载方法,它对您的设计人员更友好。

答案 2 :(得分:0)

问题可能是类(或基类)被定义为抽象。这会导致设计人员失败。 Laurent Bugnion博客的评论部分更详细地描述了这个问题:http://geekswithblogs.net/lbugnion/archive/2007/03/02/107747.aspx