2010-04-07 3 views
7

Lorsque nous lions à une collection hétérogène d'objets, tous les objets n'ont pas le même ensemble de propriétés. dans la fenêtre de sortie, nous obtenons un message comme:Échec de la performance de l'échec de liaison WPF par rapport à l'exception

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

Cela ne semble pas être une exception, mais nous sommes préoccupés qu'il a un impact sur les performances. Devrions-nous nous inquiéter et créer un modèle de vue qui possède toutes les propriétés que nous souhaitons lier (et dont les propriétés qui n'existent pas sur l'élément sous-jacent renvoient null) ou pouvons-nous simplement le quitter.

Cette situation se produit souvent dans un scénario de grille où il peut y avoir un grand nombre de ces échecs de liaison.

+3

Je pense (mais ne l'ai pas mesuré à vérifier) ​​qu'il ne fait aucune différence, ou même effectue * mieux * quand la propriété n'existe pas: WPF doit localiser la propriété dans les deux cas, et si la propriété n'existe pas, elle * l'enregistre * en l'interrogeant et en connectant l'événement PropertyChanged! Le seul coût que je puisse voir est l'impression du message. Cela pourrait être coûteux - mais j'espère que WPF ne prendrait pas la peine d'essayer d'imprimer le message s'il n'y avait aucun endroit où l'imprimer ... Bien sûr, puisque je ne l'ai pas mesuré, mes suppositions ne valent rien ... ! – itowlson

Répondre

6

Vous ne voyez que cette sortie car vous exécutez Visual Studio. Normalement, ces instructions de suivi ne vont nulle part car il n'y a pas d'écouteur de trace. De toute façon, les implications de performance sont complètement négligeables. D'autre part, les exceptions seraient un moyen très coûteux de signaler les échecs de liaison, en particulier parce que, comme vous le constatez, il existe souvent des liaisons qui fonctionnent contre certains objets mais pas d'autres.

14

Je n'ai pas testé moi-même, mais un blog post from the Visual Studio team dit que les erreurs de liaison en effet la performance d'impact:

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

Questions connexes