Ошибка Не удается создать экземпляр «ObjectName» в Designer при использовании - PullRequest
4 голосов
/ 09 июня 2010

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

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

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>

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

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

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

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

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

Что я делаю не так?

Ответы [ 2 ]

6 голосов
/ 10 июня 2010

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

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

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

0 голосов
/ 30 апреля 2013

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

но я не могу открыть usercontrol в visual studio для целей проектирования

...