使用WCF的自定义控件打破VS2010设计器视图

时间:2012-08-13 21:06:52

标签: c# visual-studio-2010 wcf silverlight

我为Silverlight网站设计了一个自定义控件。当我运行调试器,或释放它并通过http将其拉出时,控件可以正常工作。在控件本身的设计器视图中,它也显示正常。

当我将控件作为控件添加到MainPage.xaml应用程序时出现问题。设计师打破了说:并且发生了未处理的异常。 System.NullReferenceException 你调用的对象是空的。

控件在运行其Loaded()事件时从WCF服务中提取数据。 WCF服务位于远程IIS服务器上,而不是localhost。

我认为控件正在崩溃,因为它无法在设计器视图中从服务中提取数据。有没有解决这个问题的方法?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用DesignerProperties.IsInDesignTool属性。如果您的代码在设计器工具(如VS设计器或Expression Blend)中运行,则此属性的值为true,否则为false

Loaded事件处理程序中,您可以读取此属性的值,并且只有在此属性的值为false时才调用您的WCF服务。

答案 1 :(得分:1)

除了@Luke所说的,你应该真正解决问题的核心:你的数据加载代码THROWS无法加载。也许只是优雅地处理错误并捕获错误并返回空数据?通常,这比用户体验更好地显示任何内容(或显示消息)而不是显示崩溃。现在,在实际发布模式下,即使数据连接失败,您的控件也会崩溃。

IsInDesignTool属性非常方便:一旦加载数据失败,在返回空数据集之前,检查IsInDesignTool是否为真(如Luke所说) - 如果是,则返回硬编码示例设置数据。这样,当控件无法加载时,当它检测到VisualStudio或Blend时,它将显示一些测试数据,并且它将在设计视图中显示为填充内容。