8
votes

WPF Mettre à jour la liaison lorsqu'il est lié directement sur DataContext W / Converter

Normalement, lorsque vous souhaitez qu'un contrôle de données sur la mise à jour ", vous utilisez l'événement" PropertyChanged "pour signaler à l'interface que les données ont changé dans les coulisses.

Par exemple, vous pouvez avoir un bloc de texte qui est lié à DataContext avec une propriété "displayText"

à partir d'ici, si le DataContext augmente l'événement de l'état de propriété avec un nom de propriétéName "displaytext", ce texte de TextBlock doit alors mettre à jour (en supposant que vous ne modifiez pas le mode de la liaison).

Cependant, j'ai une liaison plus compliquée qui utilise de nombreuses propriétés du DataContext pour déterminer le look final et la sensation du contrôle. Pour ce faire, je me lie directement au DataContext et utilisez un convertisseur. Dans ce cas, je travaille avec une source d'image.

Comme vous pouvez le constater, j'utilise une {Binding} sans chemin à lier directement sur le DataContext, et j'utilise un Imageconverter pour sélectionner l'image que je recherche. Mais maintenant je n'ai aucun moyen (que je sache) de dire cette liaison à la mise à jour. J'ai essayé d'élever l'événement de l'état de propriété avec "". comme le nom de propriété, qui n'a pas fonctionné.

est-ce possible? Dois-je conclure la conversion de la logique en une propriété que la liaison peut s'attacher à, ou existe-t-il un moyen de dire à la liaison à rafraîchir (sans rafraîchir explicitement la reliure)?

Toute aide serait grandement appréciée. Merci! -Adam


0 commentaires

3 Réponses :


0
votes

hmm, vous ne montrez pas la mise en œuvre complète. Mais je pense qu'il devrait mettre à jour, si la valeur liée à l'interface graphique fournit l'événement de l'état de propriété.

considère


2 commentaires

Le problème est que la source d'image est liée directement à DataContext, pas une propriété du DataContext. Le convertisseur prend dans le DataContext et renvoie une source d'image. Pour clarifier, la mise à jour a lieu (fonctionne) si j'utilise une liaison qui a un chemin d'accès à une propriété de DataContext, puis appelez la propriété de cette propriété. Cependant, j'ai besoin de l'objet lui-même pour déterminer l'image (plus qu'une propriété). Merci.


eu une pensée en tapant cela. Je vais essayer de mettre une propriété sur mon objet appelé "Soi" qui se retourne juste, puis appeler la propriété ("soi"). Je vais donner cela un coup.



2
votes

Je ne crois pas qu'il existe un moyen d'accomplir exactement ce dont vous avez besoin avec votre convertisseur actuel. Comme vous l'avez mentionné, vous pouvez effectuer le calcul dans votre viewModel ou changer votre convertisseur en un imulitvalueconverter .

à partir de votre scénario spécifique (le convertisseur attaché à une classe de menuLodel et quelques-unes de ses propriétés), je me pencherais vers la mise en œuvre de la logique dans la fenêtre de vue.


0 commentaires

21
votes

La solution de contournement ici consistait à ajouter une propriété à mon objet (à utiliser comme DataContext) appelé "Self", qui a simplement retourné

objet public auto {obtenez {Retourner cela; }}

Puis dans la liaison, j'ai utilisé cette propriété:

Puis quand j'appelle

Propertychanged (Ceci, New PropertyChangeDeventargs ("Self"))

Cela fonctionne comme un charme.

Merci tout.


2 commentaires

MERCI! J'étais en colère à la recherche de cela et était sur le point de le demander quand il est apparu sur mes suggestions


@Adam, quel hack axelement élégant! Gloire!