2011-11-21 8 views
0

Existe-t-il une méthode évidente pour gérer les DataTemplates dont je ne suis pas conscient?Traitement des DataTemplates

Par exemple:

J'ai un ContentControl qui sera utilisé pour afficher les différentes vues de l'application. Autant que je sache, pour chaque contrôle il peut exister un DataTemplate par DataType. (je peux ajouter un DataTemplate au ResourceDictionary pour afficher un DetailsView lorsque ContentControl a un ensemble PersonViewModel en tant que DataContext ou ListView lorsque le ContentControl a un ensemble PersonManagerViewModel en tant que DataContext). Mais comment puis-je choisir entre un DetailsView et un EditView lorsque le DataContext de ContentControl est défini sur un PersonViewModel?

Répondre

1

Quelques possibilités:

  1. Lors de la définition des modèles de View 'région', utilisez toujours un 1: 1 carte entre un ViewModel et une vue. C'est l'approche la plus typique. Si vous envisagez d'utiliser le même ViewModel pour plusieurs vues, il est probable que ViewModel en fasse trop. La logique partagée appartient probablement à sa propre classe Model que deux classes ViewModel différentes ou plus utiliseraient.

  2. Définissez un DataTemplateSelector personnalisé pour désambiguïser entre les correspondances possibles. C'est un peu plus laide, car vous n'avez plus le comportement magique "trouver le comportement par défaut".

  3. N'autorisez qu'un seul modèle par défaut. Les autres modèles doivent être référencés par clé par les vues spécifiques qui en ont besoin.

1

La solution la plus flexible consiste à utiliser un DataTemplateSelector pour vous laisser utiliser le modèle , en fonction des conditions que vous souhaitez. Une autre alternative que nous avons utilisée dans quelques endroits est simplement d'utiliser plusieurs ViewModels; Dans votre cas, vous pourriez avoir un ReadOnlyPersonViewModel pour DetailsView et un MutablePersonViewModel pour EditView.