41 votes

deux modèles d'éléments pour une zone de liste

J'ai une classe FruitViewModel . Il décrit les ViewModels pour les éléments ListBox .

 <ListBox ItemsSource="{Binding Fruits}">

Et j'ai

 class BananaViewModel : FruitViewModel

et

 class AppleViewModel : FruitViewModel

Fruits contient BananaViewModel s et AppleViewModel s qui est lié à ItemsSource .

Comment puis-je créer différents modèles pour les pommes et les bananes ? Ils devraient être dans une liste mais avoir des modèles différents

81voto

John Bowen Points 14985

Vous pouvez définir des DataTemplates qui s'appliquent à n'importe quelle instance d'un type spécifique en spécifiant le DataType sans x:Key . En utilisant cette méthode, vous n'affectez rien à ItemTemplate - les modèles sont appliqués automatiquement.

 <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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X