Что-то подсказывает мне, что я могу получить линчевание за этот вопрос. И извините за длинное подробное описание заранее.
Я работаю над чем-то вроде углового футляра в проекте Silverlight 4. По сути, то, что я создаю, - это создатель пользовательских форм.
Форма может иметь несколько полей, которые могут быть разных типов (текст, целое число, адрес электронной почты и т. Д.). Теперь все эти типы расширяют класс Field
, но могут иметь дополнительные свойства, такие как длина, в случае текстового поля.
У меня есть возможность добавлять и удалять поля из коллекции FieldViewModels
в моем FormFieldsManagementViewModel
. Пока что все это довольно стандартные вещи.
Теперь, ... Для того чтобы пользователь мог установить свойства для объектов поля, у меня есть UserControl
, который имеет свойства зависимости типа DataTemplate
и который представляет пользовательский интерфейс, который я хочу отображать, когда поле определенного типа выбран. Итак, чтобы уточнить, UserControl
имеет свойство SingleLineTextTemplate
, которое будет отображаться при выборе SingleLineTextFieldViewModel
, но при выборе EmailFieldViewModel
отображается EmailFieldTemplate
. И SingleLineTextFieldViewModel
, и EmailFieldViewModel
наследуются от FieldViewModel
.
Моя проблема возникает, когда я объявляю привязки в каждом из этих шаблонов. Вполне допустимо (IMHO) устанавливать свойства базового класса FieldViewModel
, такие как IsRequired
и Position
, но у меня также есть привязки для Length
в SingleLineTextTemplate
, которые соответствуют свойству Length SingleLineTextFieldViewModel
. Поэтому я полагаюсь на расширенный интерфейс конкретного класса, а не только на класс FieldViewModel
.
Я должен указать, прежде чем я продолжу это , это работает . Я не был уверен, что это произойдет, и теперь это так, я не уверен, что должно, или что я должен даже делать это.
Я делаю это только для привязки и отсутствия привязки к динамическим объектам и / или отсутствия DataTemplateSelector
в Silverlight.
Очевидно, что SingleLineTextFieldViewModel
не может заменить его базовый класс в сценарии связывания. У меня такой вопрос, так как я на самом деле не использую эти объекты в коде, но в разметке, .. Это все еще считается плохой практикой?
Большое спасибо заранее.