Разный шаблон элемента для каждого элемента в списке WPF?

У меня есть много элементов внутри элемента управления списком. Я хочу, чтобы у каждого элемента был другой шаблон элемента в зависимости от типа элемента. Таким образом, первый элемент в списке - это тип ObjectA, поэтому я хочу, чтобы он отображался с помощью ItemTemplateA. Второй элемент - тип ObjectB, поэтому я хочу, чтобы у него был ItemTemplateB для рендеринга. На данный момент я могу использовать параметр ItemTemplate, чтобы определить для них один шаблон. Любой способ добиться этого?

Ответы

Ответ 1

ItemTemplateSelector будет работать, но я думаю, что проще создать несколько DataTemplate в разделе ресурсов, а затем просто указать каждому из них DataType. Это автоматически будет использовать этот DataTemplate, если генератор элементов обнаружит соответствующий тип данных?

<DataTemplate DataType={x:Type local:ObjectA}>
   ...
</DataTemplate>

Также убедитесь, что для DataTemplate установлено значение x:Key.
Подробнее об этом подходе здесь

Ответ 2

Посмотрите на свойство ItemTemplateSelector вашего элемента управления списком. Вы можете указать его на пользовательский TemplateSelector и решить, какой шаблон использовать в коде.

Здесь сообщение в блоге, описывающее TemplateSelectors:

http://blogs.interknowlogy.com/johnbowen/archive/2007/06/21/20463.aspx

Изменить: Здесь лучший пост:

http://blog.paranoidferret.com/index.php/2008/07/16/wpf-tutorial-how-to-use-a-datatemplateselector/