2010-12-10 5 views
0

Gibt es eine einfache Möglichkeit zu bestimmen, ob eine Eigenschaft aus einem Domänenobjekt an ein WPF-Element gebunden ist, und wenn ja, welches Element und Eigenschaft?WPF: Find Bindings Domäne Objekteigenschaft

Zum Beispiel sagen wir, dass ich ein UserControl mit einer TextBox habe und ich die "Text" -Eigenschaft des Steuerelements an die "Description" -Eigenschaft meines Domain-Objekts binde. Wenn nur der Name der Domänenobjekteigenschaft ("Description") angegeben wird, wie kann ich den BindingExpression für diese Eigenschaft abrufen?

+0

Aus dem Kontext des Domänenobjekts oder aus dem Kontext des Benutzersteuerelements? –

Antwort

1

Nein, es gibt keine einfache Möglichkeit, dies zu tun. Die Bindung funktioniert nicht so, dass Ihre Property an mehrere Abhängigkeitseigenschaften mehrerer Elemente gebunden sein kann und keine Ahnung davon hat. Sie müssten im Grunde den VisualTree durchlaufen, die Abhängigkeitseigenschaften für jedes FrameworkElement auflisten, BindingExpressions abrufen und den Pfad für die Bindung vergleichen, um festzustellen, ob sie mit dem gesuchten Eigenschaftsnamen übereinstimmt. Außerdem müssen Sie den DataContext mit dem Objekt vergleichen. Ich kann immer noch an viele Situationen denken, wo dies fehlschlägt, z. Pfad wird nicht immer in einer Bindung verwendet, Sie können den DataContext direkt verwenden.

Wie auch immer, hier ist ein link mit einer Implementierung, die dies tatsächlich tut. Ich habe es ausprobiert und es funktioniert, aber es dauerte etwa 2 Sekunden, um eine Suche mit nur einem DataGrid mit 4 Spalten und 10 Zeilen abzuschließen. Es tut zwar nicht die DataContext-Prüfung, aber ich habe das zu meiner Test-App hinzugefügt, aber ich werde den Code nicht veröffentlichen, da ich glaube nicht, dass Sie das verwenden werden. Lass es mich wissen, wenn du es willst und ich poste es.

+0

Ich hatte gehofft, dass dies nicht die einzige Option wäre; Ich kann den Prozess hoffentlich zumindest beschleunigen, indem ich FrameworkElement.GetLocalValues ​​verwende, um nur diese Eigenschaften mit festgelegten Werten abzurufen, aber wie du sagst, wird dies nicht besonders effektiv sein. –

+0

@Martin Robins: Ich brauchte etwas ähnliches vor einiger Zeit. Wenn Sie eine bessere (oder sogar optimierte) Vorgehensweise finden, aktualisieren Sie diese –