Как заставить мой WPF UserControl работать с CompositeCollection

У меня есть пользовательский элемент управления wpf, который предоставляет IEnumerable ItemsSource DependencyProperty. Я привязываю это свойство к элементу управления ListBox в моем UserControl.

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

<my:uc>
  <my:uc.ItemsSource>
    <CompositeCollection>
      <CollectionContainer Collection="{My Binding}"></CollectionContainer>
      <CollectionContainer Collection="{My Binding}"></CollectionContainer>
    </CompositeCollection>
  </my:uc.ItemsSource>
</my:uc>

Я хотел бы, чтобы это отображало содержимое этих CollectionContainers в списке, но на данный момент это не перечисляет контейнеры. В моем списке отображаются только два элемента «System.Data.CollectionContainer».

[b]Изменить:[/b] Дизайнер XAML сообщает мне, что «Свойство ItemsSource не поддерживает значения типа CompositeCollection». Я думаю, что это моя проблема... но как мне заставить ее "поддерживать" CompositeCollection?


person vanja.    schedule 28.06.2009    source источник


Ответы (2)


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

Попробуйте переопределить ToString и вернуть значение, которое вы хотите видеть в своем списке.

person Shiraz Bhaiji    schedule 28.06.2009
comment
Проблема в том, что CollectionContainer вообще не должен отображать себя, вместо этого он должен предоставлять свои дочерние элементы. - person vanja.; 28.06.2009

Правильным ответом было создать класс, расширяющий ItemsControl. Вы не можете использовать какой-либо XAML при разработке элемента управления, но он дает вам специальное свойство ItemsSource, которое поддерживает CollectionContainers. Представление элемента управления должно быть определено в его свойстве ContentTemplate.

person vanja.    schedule 07.09.2009