Silverlight: привязка наблюдаемой коллекции к различным пользовательским элементам управления условно - PullRequest
0 голосов
/ 15 октября 2010

Я новичок в Silverlight 4 и с трудом отыскиваю его, так как не очень знаком с терминологией.Может ли кто-нибудь указать мне правильное направление?

У меня есть наблюдаемая коллекция, которую я хочу представить в списке ItemsControl.Тип коллекции - это класс, который для простоты назовем PersonInfo .Каждый PersonInfo имеет строковое свойство Имя и наблюдаемую коллекцию PhoneNumbers .Все работает нормально, когда я говорю DataTemplate ItemsControl использовать «UserControl1» для визуализации данных - работают привязки.

Моя проблема в том, что - для этого теоретического примера - я хочу основать элемент управления, используемый дляотображать PersonInfo для определенных значений в свойстве Name.Поэтому я хочу использовать UserControl1 для любых записей с именем «Joe» и использовать UserControl2 для всех остальных.Я нашел материал IValueConverter, но это не помогает выбрать тип элемента управления, используемый для визуализации данных.

Sidenote: UserControl1и UserControl2 показывают данные аналогичным образом, но есть некоторые различия в их сложных макетах сетки, которые заставили меня создать 2 отдельных пользовательских элемента управления.Если кто-нибудь знает, как я могу встроить несколько макетов в xaml UserControl1, а затем переключаться между ними во время выполнения через привязку свойства, это, вероятно, позволило бы мне вообще обойти эту проблему ...

Может кто-нибудь порекомендовать общую стратегию решенияЛюбая сторона этой проблемы?

Заранее спасибо!

1 Ответ

0 голосов
/ 15 октября 2010

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

return ((PersonInfo)o).Name == "Joe" ? Visibility.Visible : Visibility.Collapsed;

, а другой - наоборот.Затем свяжите видимость UserControl1 с одним VisibilityConverter и свяжите видимость UserControl2 с другим, и они будут заменены на основе данных.

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