wpf设计器:的类型初始值设定项引发异常

wpf设计器:的类型初始值设定项引发异常,wpf,exception,designer,Wpf,Exception,Designer,我对WPF中的服务类的数据绑定有问题。我的服务类有一个静态构造函数,它读取配置信息并提取一些必需的信息。问题是,在设计过程中,我得到了Mytype的类型初始值设定项引发异常的错误。我相信这是因为VisualStudio的配置中没有配置信息。当我运行应用程序时,一切正常,但由于这个错误,我无法设计任何东西 我认为,如果设计无法访问我的数据绑定对象,它将恢复到一些默认显示。很明显,它没有,而且杀死了整个设计师。是否有解决此问题的方法,如关闭数据绑定控件的动态显示。这非常令人沮丧和失望。我正在使用Vi

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

我认为,如果设计无法访问我的数据绑定对象,它将恢复到一些默认显示。很明显,它没有,而且杀死了整个设计师。是否有解决此问题的方法,如关闭数据绑定控件的动态显示。这非常令人沮丧和失望。我正在使用VisualStudio2008SP1

下面是我的网格中的一段数据绑定代码

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

1.
本质上,除非DataService类具有配置信息,否则它无法实例化自身。我试图为静态构造函数实例化数据存储库的具体实现的特定情况创建一个变通方法。但是,我不能直接这样做,因为这样会在我的项目中创建循环引用。我已尝试继承该类并捕获父类的静态构造函数中的所有异常。那还是不行。关于解决方法的任何其他想法,或显示有关引发异常的更多细节的错误日志


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

你是对的。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"};
      }
   }
}
公共类数据服务
{
公共IList GetCollection()
{
如果(!DesignerProperties.GetIsInDesignMode(新的DependencyObject()))
{
//从数据库中获取数据
}
其他的
{
//为设计器返回假数据
返回新列表{“我的”、“测试”、“数据”};
}
}
}

重要的是,如果要在设计模式中使用config,千万不要调用任何需要它的东西。

我对这种方法的担心是,它需要我的数据服务以某种形状或形式引用UI。在这种情况下,我需要一个对System.ComonentModel的引用,这是可以的。但我也需要一个系统。Windows,这看起来真的很奇怪和错误。在vs2010中,此行为是否有可能发生改变。暂时,我通过设置datacontext选择在load事件中仅进行数据绑定,并处理设计器向我显示的空内容。看起来很愚蠢,但我宁愿这样做,也不愿创建这种讨厌的条件逻辑来满足VS的设计者