Silverlight Best Practice для модульных пользовательских элементов управления / наследования - PullRequest
1 голос
/ 24 сентября 2010


Я немного застрял в различных подходах к дизайну пользовательского интерфейса в Silverlight в сочетании с аспектом повторного использования. Предположим следующий простой пример:

Базовый класс ОРГАНИЗМ имеет ИМЯ + ВОЗРАСТ

Дочерний класс СОБАКА имеет ФУРКОР
Дочерний класс ЧЕЛОВЕК имеет ЗАДАНИЕ

Теперь у меня есть список из 30 ОРГАНИЗМОВ, немного СОБАКИ, немного ЧЕЛОВЕКА.
Я могу использовать listBox, чтобы показать все элементы (имена классов).

Я хочу создать "базовый вид" для ОРГАНИЗМА (например, имя вверху)
Если объект данных - СОБАКА, я хочу также перечислить его furcolor.
Если это ЧЕЛОВЕК, я хочу также перечислить описание его работы.

Я пробовал DataTemplates, UserControls и другие вещи, но я застрял. В Silverlight нет TargetType (или я что-то упустил), и этот простой пример кажется очень странным. Стили применяются только к визуальным элементам, не уверен, что они могут быть основаны друг на друге. Но это также кажется неправильным ...

Мой реальный пример более сложный, но вы поняли идею. У базового класса есть некоторые свойства, которые я хочу отобразить, а у дочерних классов есть еще некоторые, которые я хочу «добавить» без дублирования XAMl.

Какие-нибудь советы или подсказки в правильном направлении?

Chris

[РЕДАКТИРОВАТЬ] Чтобы уточнить, у меня проблема не ограничивается списками. Другой сценарий - это подробное представление, показывающее либо собаку, либо человека. Представление большинства деталей идентично, поэтому я мог бы использовать UserControl с красной рамкой для визуализации Organism с TextBlock, привязанным к Name. Теперь под этим текстовым блоком (но все еще внутри UserControl) должен быть блок задания или furcolor.

UserControl для ОРГАНИЗМА
================= Fancy Border ===================
Название: Хорст
================= Fancy Border ===================

На основе UserControl для ЧЕЛОВЕКА
================= Fancy Border ===================
Название: Хорст
Работа, вакансии: Дизайнер программного обеспечения
================= Fancy Border ===================

На основе UserControl для собаки
================= Fancy Border ===================
Название: Хорст
FurColor: коричневый
================= Fancy Border ===================

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

1 Ответ

0 голосов
/ 24 сентября 2010

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

Привязка шаблона для каждого элемента?

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...