设计时错误:WPF“StaticExtension”异常

3
我有一个ComboBox。
<ComboBox Name="company" Width="120" 
                  HorizontalAlignment="Right" Margin="5" 
                  IsSynchronizedWithCurrentItem="True" 
                  ItemsPanel="{DynamicResource Virtualized}" 
                  ItemsSource="{x:Static local:Repository.Customers}" 
                  SelectedItem="{Binding Path=SelectedCustomer}" 
                  DisplayMemberPath="CM_FULL_NAME""/>

它运行正常。它能够正常工作。除了在设计者中,由于以下错误,我无法进行任何操作:

ArgumentException was thrown on "StaticExtention": Exception has been thrown by the target of an invocation.

细节

The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid.

我在静态类中尝试了几种方法来跳过设计时的构造函数,但是没有一种方法可以修复此错误:

if (LicenseManager.UsageMode == LicenseUsageMode.DesignTime)
if (DesignerProperties.GetIsInDesignMode(this))
if (System.Reflection.Assembly.GetExecutingAssembly().Location.Contains("VisualStudio"))

在构造函数中返回任何一个条件为真的情况下,仍然会出现错误。 编辑: 不确定是否有任何区别,但静态存储库类使用EF4从数据库获取。 编辑2: 也尝试过将ItemsSource {Binding}绑定到静态列表,仍然出现相同的错误。请注意,称其为存储库是不准确的,这些列表在启动时加载并且永远不会更改。以下答案无效,仍在努力解决此问题。 编辑3: Thomas建议进行设计模式调试是不可行的。我正在使用VS2010 Express,工具菜单没有附加到进程选项。我仍然不知道为什么这会破坏设计师并在运行时工作。
2个回答

3
Customers 属性的 getter 中,尝试添加以下代码:
if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
    return null;

你可以尝试在设计模式下进行调试,具体方法请参考这里 - Thomas Levesque
为什么?这些项目在启动时被检索,重复使用数十次,并且永远不会改变。 - Kyeotic
这真令人沮丧,我最初使用的是非静态类,直到另一个stackoverflow用户告诉我要使用静态类。如果EF实体来自using块,连接是否仍然保持打开状态? - Kyeotic
我手头没有例子,但基本上你需要从 ViewModel 中加载表格数据,并将 ComboBox 绑定到 ViewModel。 - Thomas Levesque
是的,我懂了。请查看这个问题,了解我尝试时遇到的问题。https://dev59.com/gVrUa4cB1Zd3GeqPgAyo。避免错误的唯一方法是每次手动复制集合,这会导致重复的代码。我认为这不是一个更好的解决方案。 - Kyeotic
显示剩余5条评论

2

托马斯的回答:

if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
return null;

在静态构造函数中运作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接