2010-02-16 332 views
1

我遇到了数据绑定到WPF中的服务类的问题。我的服务类有一个静态构造函数,它读取配置信息并提取一些必需的信息。问题是,在设计过程中,Mytype的类型初始值设定项出现错误,导致异常。我相信这是因为配置信息不存在于Visual Studio的配置中。当我运行应用程序时,一切正常,但由于此错误,我无法设计任何东西。wpf设计师:类型初始值设定项引发异常

我会假设设计会恢复到一些默认显示,如果它不能得到我的数据绑定对象。显然它不会杀死整个设计师。是否有任何解决此问题的方法,如关闭数据绑定控件的动态显示。这是令人沮丧和令人失望的。我正在使用Visual Studio 2008 SP1。

这里是我的网格中的数据绑定代码片段。

<ObjectDataProvider ObjectType="{x:Type local:DataService}" x:Key="dataProvider" 
    MethodName="GetCollection" > 
    <ObjectDataProvider.MethodParameters> 
     <s:Int32>1</s:Int32> 
    </ObjectDataProvider.MethodParameters> 
</ObjectDataProvider> 

本质上DataService类不能实例化自己,除非它有配置信息。我试图为静态构造函数实例化数据存储库的具体实现的特定情况创建一个解决方法。不过,我不能直接这样做,因为这会在我的项目中创建一个循环引用。我试过继承这个类并捕获父类的静态构造函数中的所有异常。这仍然行不通。有关变通方法或错误日志的其他任何想法,都会显示有关抛出什么异常的更多详细信息。

我试过剥去一切,找到最低公分母。我删除了静态构造函数,基本上返回了最基本的东西。我发现,从数据库中检索数据的任何内容都无法呈现。如果我返回一个静态列表,一切都很好。我正在使用Microsoft企业库数据访问块。同样,应用程序在运行时也能正常工作。我假设它找不到所需的数据库连接信息,但为什么这会成为一个问题?微软不得不认为这会发生在他们构建VS2008时。难道我做错了什么?

回答

2

你是对的。 Visual Studio设计器无法访问您的数据库连接字符串。提供设计时数据的常见方式是首先检查应用程序是否处于设计模式,如果是,则返回一些虚拟数据而不与数据库建立任何连接。

像下面

public class DataService 
{ 

    public IList<string> GetCollection() 
    { 

     if (!DesignerProperties.GetIsInDesignMode(new DependencyObject())) 
     { 

     // get data from database here 
     } 
     else 
     { 
     // return fake data for the designer 
     return new List<string> {"my", "test", "data"}; 
     } 
    } 
} 

重要的事情是什么时,将需要的配置是否会在设计模式被用来永远不会调用。

+0

我对这种方法的担忧是它需要我的数据服务以某种形式或形式引用UI。在这种情况下,我需要一个对System.ComoonentModel的引用。但我也需要一个到System.Windows,这似乎很奇怪和错误。这种行为在vs2010中发生了任何变化。暂时,我选择了通过设置datacontext在加载事件中进行数据绑定,并处理设计师向我展示空白的东西。看起来很愚蠢,但我宁愿创造这个讨厌的条件逻辑来满足VS的设计师 – 2010-02-16 22:49:37

相关问题