2010-07-24 5 views
0

Je voudrais lier un contrôle de liste (comme un ListView) dans une vue à une collection dans un modèle de vue. La collection est composée de n'importe quel nombre de modèles de vue qui ont également des vues conçues pour s'y lier.Liaison à un contrôle de liste et recherche de vues

Bien que chaque modèle de vue de la collection dérive d'un type de base commun, leurs types dérivés sont différents (tout comme les types de leurs vues). Par exemple, un élément de la liste peut avoir une vue qui a une zone de texte et deux boutons alors qu'un autre élément a une case à cocher et une liste déroulante.

Mais le contrôle de liste ne connaîtra pas les types d'affichage de son élément (ou le nombre d'éléments) au moment du design. Comment puis-je avoir la vue principale et/ou le contrôle de liste utiliser les types dérivés dans la collection du modèle de vue principale pour trouver les vues d'élément appropriées et les lier?

Répondre

3

Vous avez juste besoin de fournir DataTemplates appropriés dans les ressources pour chaque type ViewModel:

<DataTemplate DataType="{x:Type vm:FooViewModel}"> 
    <v:FooView /> 
</DataTemplate> 

<DataTemplate DataType="{x:Type vm:BarViewModel}"> 
    <v:BarView /> 
</DataTemplate> 

<DataTemplate DataType="{x:Type vm:BazViewModel}"> 
    <v:BazView /> 
</DataTemplate> 

Notez qu'il n'y a pas x:Key attribut sur ces ressources: cette façon, WPF choisit le modèle approprié automatiquement en fonction du type du ViewModel

+0

Fonctionne bien - merci! –

Questions connexes