2010-12-10 4 views
0

Existe-t-il un moyen simple de déterminer si une propriété d'un objet de domaine est liée à un élément WPF, et si oui, quel élément et quelle propriété? Par exemple, disons que j'ai un UserControl avec une TextBox et que je lie la propriété "Text" du contrôle à la propriété "Description" de mon objet domain. Étant donné uniquement le nom de la propriété d'objet de domaine ("Description"), comment puis-je récupérer l'expression BindingExpression pour cette propriété?WPF: propriété des objets de domaine de liaison de liens

+0

Du contexte de l'objet domaine ou du contexte du contrôle utilisateur? –

Répondre

1

Non, il n'y a pas de moyen simple de le faire. La liaison ne fonctionne pas, votre propriété peut être liée à plusieurs propriétés de dépendance de plusieurs éléments et n'a aucune idée à ce sujet. Vous devez essentiellement parcourir l'objet VisualTree, énumérer les propriétés de dépendance pour chaque FrameworkElement, obtenir BindingExpressions et comparer le chemin d'accès à la liaison pour voir s'il correspond au nom de propriété que vous recherchez. En plus de cela, vous devrez également comparer le DataContext à l'objet. Je peux toujours penser à de nombreuses situations où cela échouera, par ex. Le chemin n'est pas toujours utilisé dans une liaison, vous pouvez utiliser le DataContext directement.

Quoi qu'il en soit, voici un link avec une implémentation qui fait cela. Je l'ai essayé et cela fonctionne mais il a fallu environ 2 secondes pour terminer une recherche avec juste un DataGrid contenant 4 colonnes et 10 lignes. Il ne fait pas le contrôle DataContext mais je l'ai ajouté à mon application de test mais je ne publierai pas le code car je ne pense pas que vous l'utiliserez. Faites-moi savoir si vous le voulez de toute façon et je l'afficherai.

+0

J'espérais que ce ne serait pas la seule option; Je peux au moins espérer accélérer le processus en utilisant FrameworkElement.GetLocalValues ​​pour récupérer uniquement les propriétés avec des valeurs définies, mais comme vous le dites, cela ne sera pas particulièrement efficace. –

+0

@Martin Robins: J'avais besoin de quelque chose de similaire il y a quelque temps. Si vous trouvez une meilleure façon (ou même optimisée) de le faire, assurez-vous de mettre à jour –

Questions connexes