2009-06-04 7 views
0

Essayer de mettre en œuvre ce que je pensais être un concept simple. J'ai un contrôle utilisateur (vue) lié à un modèle de vue qui fournit une liste de données. J'ai ajouté des boutons à bascule à la commande usercontrol et voudrais permettre à l'utilisateur d'utiliser ces boutons à bascule pour changer quel modèle est utilisé pour montrer les données. Tous les modèles utilisés pour les données fonctionnent, et ils sont très différents les uns des autres, il ne s'agit donc pas simplement de simples modifications apportées à un seul modèle. J'aimerais en avoir autant en XAML que possible.WPF: Changer de modèle basé sur les données UserControl

Voici ce que j'ai maintenant:

Lorsque les données semble je <UserControl Template="{StaticResource ListSwitchingControlTemplate}" />

Dans ce modèle de contrôle que j'ai tous « sous modèles » - vraiment il est juste les 3 représentations avec leur visibilité réglée sur Collapsed. Ensuite, j'utilise un déclencheur de données sur ce modèle de contrôle pour afficher la vue actuellement sélectionnée. Cela fonctionne, mais j'ai remarqué que toutes les 3 représentations sont liées - elles agissent chacune comme si elles étaient actives (et je suppose qu'elles le sont). Je préférerais pouvoir vraiment changer de modèle au moment de l'exécution. J'ai essayé de convertir le contrôle d'utilisateur contenant pour utiliser un ContentTemplate pour lui-même, mais cela gâche juste toute la liaison que j'ai ailleurs. Si seulement UserControls pouvait utiliser DataTriggers, ça irait.

Toutes les suggestions sur la façon de procéder proprement pour obtenir ce comportement. J'ai une idée que je manque juste quelque chose de simple.

Merci, Dave

+0

Je n'ai pas trouvé un moyen de le faire jusqu'à présent sans aller la route DataTemplateSelector. Même là, les données contenues dans le modèle ne savent rien sur la façon dont il sera présenté - il ne peut pas aider à la décision de quel modèle montrer. Au lieu de cela c'est quelque chose à l'extérieur (dans mon cas un bouton bascule situé ailleurs dans le contrôle de l'utilisateur). –

Répondre

1

Une façon de le faire serait d'utiliser un DataTemplateSelector.

Fondamentalement, vous créez une classe qui hérite de DataTemplateSelector et remplace sa fonction virtuelle SelectTemplate. La valeur de retour de la fonction est le DataTemplate que vous voulez utiliser et dans cette fonction vous avez accès à l'objet et à ses propriétés, que vous pouvez utiliser pour décider quel modèle sélectionner.

Il est un exemple sur MSDN ici:

http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx

Questions connexes