Est-Il Possible De Convertir Les Membres D'Une Collection Utilisée Comme Un ItemsSource?
Dans WPF, vous pouvez utiliser un IValueConverter ou IMultiValueConverter pour convertir une liaison de données de la valeur de dire un int
à un Color.
J'ai une collection d'objets de Modèle que je voudrais convertir à leur ViewModel représentations, mais dans ce scénario,
<ListBox ItemsSource="{Binding ModelItems,
Converter={StaticResource ModelToViewModelConverter}" />
le convertisseur devrait être écrite pour convertir l'ensemble de la collection ModelItems
à la fois.
Je souhaite convertir les éléments de la collection individuellement, est-il un moyen de le faire?
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas définir le convertisseur sur la collection elle-même, parce que ce serait obtenir la collection en entrée. Vous avez deux choix:
Si vous souhaitez utiliser la deuxième méthode, puis utiliser quelque chose comme ceci:
Si vous n'avez pas besoin d'un datatemplate personnalisé, vous pouvez sauter le ContentTemplate attribut.
Oui, vous pouvez. Il s'agit de la même manière qu'avec le IValueConverter. Il vous suffit de traiter la valeur de paramètre pour le Convertir méthode comme une collection.
Voici un exemple de Convertisseur pour une collection:
Dans ce cas est juste une preuve de concept, mais je pense qu'il devrait montrer l'idée très bien.
Le Convertisseur convertit à partir d'une simple collection de chaînes de caractères comme ceci:
dans une collection d'entiers correspondant à la chaîne de sens.
Et voici le correspondant XAML (loc est la référence de l'actuelle assemblée où est le convertisseur):
Si vous voulez faire une liaison bidirectionnelle, vous avez à mettre en œuvre également les convertir en arrière. À partir de l'expérience de travail avec MVVM, je suggère d'utiliser quelque chose comme le Modèle de Fabrique de la transformation de Modèle dans le ViewModel et vers l'arrière.
Voici un autre exemple. Je suis en utilisant MVVM Caliburn Micro. MyObjects une liste d'énumérations dans mon cas.