2010-10-23 1 views
4

J'ai un problème très intéressant et je me suis cassé la tête depuis longtemps.Mes liaisons de données ne sont pas évaluées avant le chargement du contrôle, je reçois la propriété a changé les événements après le contrôle est chargé pourquoi?

Je suis nouveau à WPF et des choses liées comme MVVM et tous.

J'ai une fenêtre dans laquelle je place un contrôle utilisateur qui héberge un TabControl à l'intérieur.

Ce contrôle de tabulation a un bouton radio personnalisé et des zones de liste déroulante qui exposent peu de propriétés de dépendance. Maintenant, lorsque ces contrôles personnalisés sont chargés, l'auteur vérifie les valeurs et fait quelque chose de particulier. Cependant, dans mon cas, lorsque le contrôle est chargé, les DP ont des valeurs nulles. Je vois que la propriété DP a changé les événements en cours d'envoi après le chargement de ce contrôle uniquement dans mon cas. Cela fonctionne bien sur d'autres fenêtres. C'est un peu étrange pour moi car je m'attendrais à ce que les DP soient liés à des valeurs liées avant que le contrôle ne soit chargé, mais je ne vois pas ce comportement ici.

J'ai lu sur MSDN que les points de distribution devraient être définis correctement avant l'événement de chargement, et dans un exemple d'application, je le vois se comporter selon MSDN.

La liaison se passe correctement car il n'y a pas d'erreur dans la fenêtre des mises + je reçois le DP - la propriété a changé des événements aussi bien, mais cela se produit uniquement après le chargement (je ne sais pas pourquoi ??)

Toute aide vraiment être appréciée.

EDIT:

Après avoir vérifié les traces de sortie i get suivantes pour toutes les liaisons pour la première fois que j'ouvre la boîte de dialogue

ne peut pas récupérer la valeur en utilisant la liaison et aucune valeur de repli valide existe; en utilisant par défaut à la place

Je ne sais pas pourquoi tous ne peuvent pas être trouvés ??? S'agit-il d'un problème de temporisation, j'utilise l'héritage de la valeur de propriété de contexte DATA partout ...

Répondre

0

Vos valeurs DP sont définies avant le chargement, mais elles sont définies sur Liaisons qui ne sont pas jusqu'à ce que l'interface utilisateur soit chargée (et ne fournisse donc aucune valeur au point de détection). Les valeurs définies directement (en XAML en général) sont appliquées au DP immédiatement pendant le chargement car la valeur est garantie. Les liaisons peuvent souvent dépendre de choses telles que DataContext ou d'autres éléments d'arborescence visuelle (ElementName ou RelativeSource) qui peuvent ne pas être disponibles tant que le chargement n'est pas terminé, de sorte que le processus d'évaluation Binding a lieu plus tard.

+0

Mais John toutes ces valeurs sont disponibles en tant que propriétés locales et le contexte de données est également défini avant que le contrôle peut être chargé .. approche similaire fonctionne très bien sur d'autres fenêtres pourquoi pas le mien ?? – v703218

+0

il peut être, mais c'est un cas particulier avec vous alors. WPF a une séquence définie, et c'est comme si c'était pour répondre à des éléments comme ça. – TomTom

Questions connexes