错误使用<usercontrol.resources> </usercontrol.resources>时,无法在Designer中创建“ObjectName”实例

时间:2010-06-09 17:23:18

标签: silverlight data-binding silverlight-4.0

我正在尝试将组合框项源绑定到静态资源。我过度说明了我的例子,因此很容易理解我在做什么。

所以我创建了一个类

public class A : ObservableCollection<string>
{
  public A()
  {
     IKBDomainContext Context = new IKBDomainContext();
        Context.Load(Context.GetIBOptionsQuery("2C6C1Q"), p =>
        {
            foreach (var item in SkinContext.IKBOptions)
            {
                this.Add(item);
            }
        }, null);
  }
}

因此,该类有一个构造函数,该构造函数使用从持久数据库中获取数据的domaincontext填充自身。我只是在这个列表上读取所以不必担心坚持回来。

在xaml中我添加了对该类的命名空间的引用,然后我将它作为usercontrol.resources添加到页面控件。

<UserControl.Resources>
    <This:A x:Key="A"/>
</UserControl.Resources>

然后我用它这个staticresource将它绑定到我的组合框项源。现实中我必须使用datatemplate来正确显示这个对象,但我不会在这里添加。

<Combobox ItemsSource="{StaticResource A}"/>

现在,当我在设计师中时,我收到错误:

无法创建“A”的实例。

如果我编译并运行代码,它运行得很好。这似乎只会影响xaml页面的编辑。

我做错了什么?

2 个答案:

答案 0 :(得分:6)

在设计器中运行时,完整的应用程序运行时不可用。然而,设计师并不只是神奇地知道如何模拟UserControl的UI。它的Xaml被解析,并且那里描述的对象被实例化。

由您来编写您的类以应对设计师的存在。您可以使用静态proeprty DesignerProperties.IsInDesignTool来确定您的代码当前是否在设计器工具中使用。

如果在设计人员中,您可以提供一组测试数据,而不是尝试访问数据服务。

答案 1 :(得分:0)

我的问题与上面描述的相同,我也使用了DesignerProperties.IsInDesignTool

但我无法在visual studio中打开用户控件以实现设计目的