ItemsControl avec plusieurs DataTemplates pour un viewmodel
est-il possible de lier un itemscontrol, avec de la toile en tant que modèle à plusieurs DataTemplates?
J'ai 2 collections et en fonction du type je voudrais afficher un autre contrôle sur ma toile.
Je ne suis pas sûr, mais je pouvais penser un Viewmodel qui a 2 ObservableCollections. Par exemple si j'aurais les "Formes" et "connexions" et je voudrais les afficher à la fois sur la toile? Dans le cas d'une diagraming scénario...
Je voudrais le faire dans le mvvm et je ne suis pas sûr si les multiples DataTemplate approche est correcte, mais il en est venu à mon esprit.
Mais je suis toujours avoir des problèmes pour obtenir la liaison droite dans ma tête. Si j'ai mis le DataContext de la ViewModel pour moi, il ne semble pas possible de lier 2 collections pour les éléments de contrôle... =(
Je suis également ouverte à d'autres idées, trop....
Est-ce possible? Et si oui, comment la liaison ressembler à un
- Avez-vous besoin DEUX pour WPF et Silverlight?
- les deux serait bien long... mais d'abord WPF serait formidable...
- DataTemplateSelector de travail pour les deux
WPF
etSilverlight
.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez créer plusieurs
ObservableCollections
et puis lier votreItemsSource
à unCompositeCollection
qui a rejoint les collections.Puis dans votre XAML, vous pouvez créer différentes
DataTemplates
pour les types à l'aide de laDataType
de la propriété qui, comme les styles s'appliquent automatiquement s'il est placé dans les ressources. (Vous pouvez également créer l'image composite en XAML qui est indiqué sur MSDN, si leCollectionContainers
doit être lié qui est un peu plus difficile si)Exemple de code:
Ici, j'utilise un autre panneau, mais il doit être le même pour une toile.
Vous pourriez avoir
ObservableCollection<object>
dans votre ViewModel et lier la ItemsControl la Source de cette collection.Ensuite, pour obtenir un look différent pour les différents types de données, vous pourriez deux DataTemplates sans x:Clé, mais avec bien définir le Type de données dans vos Ressources. Le ItemsControl sera alors automatiquement sélectionnez le DataTemplate pour votre article.
Ont un regard sur les Données de sélecteur de modèle: ici ou
ici.
Une autre option avec moins de code derrière serait de définir deux zones de liste, chacun avec leurs propres modèles et de respecter leurs propres collections. Définir chacune dans le même espace physique et le contrôle dont l'un est visible basé sur votre état. Vous pouvez même le faire avec le Gestionnaire d'État Visuel et de la coutume unis.