2010-10-22 2 views
29

У меня есть класс . Он описывает ViewModels для ListBox элементов.два элемента для одного списка

<ListBox ItemsSource="{Binding Fruits}"> 

И я получил

class BananaViewModel : FruitViewModel 

и

class AppleViewModel : FruitViewModel 

Fruits содержит BananaViewModel с и AppleViewModel S, который связан с ItemsSource.

Как сделать различные шаблоны для яблок и бананов? Они должны быть в одном списке, но иметь разные шаблоны

ответ

51

Вы можете определить DataTemplates, которые применяются к любому экземпляру определенного типа, указав DataType без x:Key. Используя этот метод, вы ничего не назначаете ItemTemplate - шаблоны применяются автоматически.

<ListBox ItemsSource="{Binding Path=MixedList}"> 
    <ListBox.Resources> 
     <DataTemplate DataType="{x:Type local:BananaViewModel}"> 
      <TextBlock Text="{Binding Name}" Foreground="Yellow"/> 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type local:AppleViewModel}"> 
      <TextBlock Text="{Binding Name}" Foreground="Red"/> 
     </DataTemplate> 
    </ListBox.Resources> 
</ListBox> 
+0

Хорошо, спасибо! – xSeder

+2

Благодарим вас за то, что вы должны опустить x: Key! –

3

В ListView в XAML вы можете объявить ItemTemplateSelector. Значение для этого будет исходить от статического ресурса или подобного.

Реализация вашего селектора шаблонов должна реализовывать DataTemplateSelector и в основном содержать оператор 'if', который выбирает правильный DataTemplate на основе типа связанного элемента. Вероятно, он найдет DataTemplate из переданных в контейнерах ресурсов (возможно, используя функцию FindResource).

Редактировать: Хорошая ссылка, возможно? http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-a-datatemplateselectorМертвое звено.

+0

, пожалуйста, добавьте пример кода –

Смежные вопросы