wpf multibinding à viewmodel?
Pour la vie de moi, je ne peux pas me lier à mon viewmodel à l'aide de multibindings. Tous les exemples sur le net se lier à des éléments d'interface directement, mais à chaque fois que j'essaie avec un viewmodel objet des exceptions sont levées.
Ma question est, comment puis-je ajouter un multibinding à plusieurs viewmodel objets xaml?
J'ai besoin de lier la propriété IsEnabled d'un menu contextuel à deux nombres entiers dans mon viewmodel. La suite de la liaison ne fonctionne pas, puisqu'il est conçu pour les interfaces des composants. Comment pourrais-je le faire fonctionner avec mon ints?
<MenuItem ItemsSource="{Binding MyMenuItem}">
<MenuItem.IsEnabled>
<MultiBinding>
<Binding ElementName="FirstInt" Path="Value" />
<Binding ElementName="SecondInt" Path="Value" />
</MultiBinding>
</MenuItem.IsEnabled>
</MenuItem>
MyMenuItem est CLR objet avec les deux nombres entiers, FirstInt et SecondInt.
donner plus de détail ou d'un code source à reproduire votre problème
OriginalL'auteur bluebit | 2009-10-12
Vous devez vous connecter pour publier un commentaire.
Filip réponse était acceptable, mais pour ceux qui recherchent Filip de la solution souhaitée, la suite devrait le faire:
Il convient de noter que la
AncestorType
sur la liaison doit être modifié en conséquence. J'ai pris le modèle de vue a été défini comme leDataContext
de la fenêtre, mais la même idée s'applique à des contrôles utilisateur, etc.NotifyOnSourceUpdated="True"
pour les deux liaisons.OriginalL'auteur wookietomwookie
Pour votre exemple, vous avez besoin d'un IMultiValueConverter qui vous permet de convertir les deux nombres entiers en une valeur booléenne indiquant si l'élément de menu est activé ou non. Quelque chose comme ceci:
Utilisée comme ceci:
OriginalL'auteur Bryan Anderson
C'est un vieux post, je sais, mais j'ai le même problème et impossible de trouver des solution sur le net.
Je pense que ce qu'il demande est de savoir comment utiliser un multibinding ce qui ne veut pas se lier à un élément graphique à la place se lie à plus d'une propriété dans le modèle de vue.
Quelque chose comme ceci:
Xaml:
ViewModel:
Je n'ai pas été en mesure de comprendre cela. Au lieu de cela, j'ai utilisé un SingleValueConverter et une liaison à un objet parent qui détient à la fois les variables FirstInt et SecondInt et dans le convertisseur utiliser ce parent, qch comme:
Il n'est pas aussi propre que si un Multibinding en tant que parent, pourrait être un de plus grands objets avec beaucoup plus de membres, mais cela a fonctionné dans mon cas. J'aurais mieux à la recherche de code si je pouvais utiliser le Multibinding solution.
OriginalL'auteur Filip
Bluebit votre attente est terminée...créer un style pour votre cible de contrôle de la place.
Voici un exemple où j'ai un bouton qui est un bouton de Connexion qui doit être désactivé si une liste déroulante (nommé comboConfig) n'ont pas de sélection (l'index sélectionné -1) ou si une valeur booléenne sur mon ViewModel est définie sur true (LoginInProcess). Pour le ViewModel boolean j'ai simplement mis la son chemin pour être le nom de membre de la propriété, qui est lié au style de temps pour le windows datacontext:
OriginalL'auteur ΩmegaMan