Ошибка Невозможно создать экземпляр ObjectName в Designer при использовании ‹UserControl.Resources›

Я пытаюсь связать источник элемента со списком со статическим ресурсом. Я упрощаю свой пример, чтобы было легко понять, что я делаю.

Итак, я создал класс

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);
  }
}

Таким образом, у класса есть конструктор, который заполняет себя, используя контекст домена, который получает данные из постоянной базы данных. Я только читаю в этом списке, так что не нужно беспокоиться о сохранении назад.

в xaml я добавляю ссылку на пространство имен этого класса, а затем добавляю его как usercontrol.resources в элемент управления страницей.

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

а затем я использую этот статический ресурс, чтобы привязать его к моему источнику элементов со списком. На самом деле мне нужно использовать шаблон данных для правильного отображения этого объекта, но я не буду добавлять это здесь.

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

Теперь, когда я в дизайнере, я получаю сообщение об ошибке:

Не удается создать экземпляр "A".

Если я компилирую и запускаю код, он работает нормально. Кажется, это влияет только на редактирование страницы xaml.

Что я делаю неправильно?


person Mike Bynum    schedule 09.06.2010    source источник


Ответы (2)


При работе в дизайнере полная среда выполнения приложения недоступна. Однако дизайнер не просто волшебным образом знает, как смоделировать пользовательский интерфейс UserControl. Его Xaml анализируется и создаются экземпляры описанных там объектов.

Вам решать кодировать свои классы, чтобы справиться с существованием в дизайнере. Вы можете использовать статическое свойство DesignerProperties.IsInDesignTool, чтобы определить, используется ли ваш код в настоящее время в инструменте дизайнера или нет.

Если бы в конструкторе вы могли доставить набор тестовых данных, а не пытаться получить доступ к службе данных.

person AnthonyWJones    schedule 10.06.2010
comment
Благодарить! Я думал проблема в нем! Спасибо. - person Mike Bynum; 11.06.2010

Моя проблема такая же, как описано выше, и я также использовал DesignerProperties.IsInDesignTool.

но я не могу открыть пользовательский контроль в визуальной студии для целей разработки

person Dinesh Kumar    schedule 30.04.2013