Как заставить дизайнер WPF / XAML работать с пользовательскими классами с зависимостями? - PullRequest
2 голосов
/ 19 декабря 2011

Я использую пользовательский класс для проверки в приложении WPF и определил класс, который наследуется от ValidationRule. Класс имеет зависимость, которую я хотел бы добавить в AutoFac во время выполнения, но для работы XAML-конструктора Visual Studio 2010 нужен конструктор без параметров.

Кажется, что единственное решение - создать DependencyProperty для зависимости и связать его в XAML, но это означает, что зависимость является общедоступной и изменяемой, ни одной из которых я не хочу.

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

  • Не нарушать конструктор.
  • Сохраните зависимость частной.
  • Убедитесь, что зависимость установлена ​​перед использованием класса.

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011

Насколько сильно вы хотите это сделать?

Функции XAML 2009 содержат следующие элементы, которые могут вам помочь:

  • x: Аргументы позволят вам передать аргумент конструктору.Может ли этот аргумент каким-либо образом быть связан со свойством вашей модели представления?

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

Но вот проблема: XAML 2009 может быть загружен только во время выполнения через XAMLЧитатель и не может быть скомпилирован.(См. Не могу заставить работать новые примитивы XAML 2009, почему? ).

Таким образом, глобальные статические объекты (eurgh) все еще могут быть менее болезненным решением. Позже Редактировать : Я перечитал ваш вопрос и понял, что вы поставили «Не нарушать конструктор» как одно из ваших требований.Это исключает XAML 2009 из возможных решений.

0 голосов
/ 19 декабря 2011

Это отличный вопрос.Я использовал демонстрационные методы, чтобы сохранить работу дизайнера: http://jonas.follesoe.no/2008/07/24/youcard-re-visited-implementing-dependency-injection-in-silverlight/

Это не только поддерживает его работу, но вы можете использовать эту технику, чтобы добавить в конструктор насмешки.Очень удобно.

...