2010-04-07 4 views
7

Wenn wir an heterogene Auflistung von Objekten binden, haben nicht alle Objekte den gleichen Satz von Eigenschaften. im Ausgabefenster erhalten wir eine Meldung wie:WPF Binding Failure Leistungshit vs Ausnahme

System.Windows.Data Error: 39 : BindingExpression path error: 'RoundingFactor' property not found on 'object' ''MultiLineTextMarkingScheme' (HashCode=7262386)'. BindingExpression:Path=RoundingFactor;..........

Dies scheint keine Ausnahme zu sein, aber wir sind besorgt es eine Auswirkung auf die Leistung hat.

Sollten wir betroffen sein und ein Ansichtsmodell erstellen, das alle Eigenschaften aufweist, an die wir binden möchten (und die Eigenschaften, die nicht im zugrunde liegenden Element vorhanden sind, null zurückgeben) oder können wir es einfach lassen.

Diese Situation tritt häufig in einem Grid-Szenario auf, in dem möglicherweise viele dieser Bindungsfehler auftreten.

+3

Ich vermute (aber nicht zu überprüfen gemessen), dass es keinen Unterschied macht, oder sogar durchführt * besser * Wenn die Eigenschaft nicht existiert: WPF muss die Eigenschaft in jedem Fall finden, und wenn die Eigenschaft nicht existiert, speichert sie * tatsächlich * ab und fragt das PropertyChanged-Ereignis an! Die einzigen Kosten, die ich sehen kann, ist das Drucken der Nachricht. Das könnte teuer werden - aber ich würde hoffen, dass WPF nicht versuchen würde, die Nachricht zu drucken, wenn es nirgendwo zu drucken wäre ... Natürlich, da ich es nicht gemessen habe, sind meine Vermutungen wertlos ... ! – itowlson

Antwort

6

Diese Ausgabe wird nur angezeigt, weil Sie in Visual Studio ausgeführt werden. Normalerweise gehen diese Trace-Anweisungen nirgendwohin, weil es keinen Trace-Listener gibt. In jedem Fall sind die Auswirkungen auf die Leistung völlig vernachlässigbar.

Ausnahmen wären andererseits eine sehr kostspielige Methode, verbindliche Fehler zu melden, insbesondere weil - wie Sie bemerken - häufig Bindungen vorhanden sind, die gegen einige Objekte, aber nicht gegen andere arbeiten.

14

Ich habe dies selbst nicht getestet, aber ein blog post from the Visual Studio team sagt, dass die Bindung Fehler in der Tat Auswirkungen auf die Leistung:

WPF tries several different ways to resolve path errors, including searching for attached properties and this is quite expensive.