J'ai deux classes avec des propriétés différentes, mais héritent d'une autre catégorie de base: code-derrière: p> et mon xaml ressemble à ceci: p> Lorsque vous utilisez le mode de débogage, la fenêtre de sortie montre ceci: P> System.Windows.Data Attention: 40: Erreur de chemin de liaison à l'exception: «Propriété» Propriété non trouvée sur 'Object' '' 'Classa' (hashcode = 66437409) '. BindingExpression: chemin = biensb; Dataitem = 'Classa' (HashCode = 66437409); L'élément cible est 'textblock' (nom = ''); La propriété cible est 'Text' (type 'String') P>
System.Windows.data AVERTISSEMENT: 40: Erreur de chemin de liaison: «Propriété» Propriété non trouvée sur 'Object' '' 'Classb' (hashcode = 2764078) '. BindingExpression: Chemin = Profetta; Dataitem = 'Classb' (hashcode = 2764078); L'élément cible est 'textblock' (nom = ''); La propriété cible est 'Text' (type 'String') P>
BlockQuote> Y a-t-il un meilleur moyen de manipuler des liaisons comme celles-ci? Existe-t-il des implications de performance et est-il préférable d'utiliser FallbackValue = '' ou FallbackValue = {x: null}? P> p>
3 Réponses :
Je préférerais suivre la manière suivante:
écrire un convertisseur de valeur personnalisé Implémentation dans xaml ajoutez une multibelle comme celle-ci: p> imultivalueconverter code>. Dans ce convertisseur, vous pouvez vérifier les valeurs entrantes, choisir la validité valide et donner la valeur de cette valeur. P> <MultiBinding Converter="{StaticResource ResourceKey=myMultiValueConverter}" ConverterParameter="SomeParameterIfNecessary">
<Binding "ToTheFirstClass.PropertyA" />
<Binding "ToTheSecondClass.PropertyB" />
</MultiBinding>
Cela suppose que je veux une ou les autres propriétés affichées. Si tel était le cas, j'irais probablement pour une prise de priorité à la place, mais je veux réellement des valeurs vides si la propriété ne se trouve pas sur l'objet.
Personnellement, je les ignore juste. Si un élément n'existe pas, il est affiché comme une chaîne vide, ce qui est généralement ce que je préfère.
Ce sont des avertissements dans la fenêtre de débogage car ils sont simplement des avertissements, pas des erreurs. Ils vous avertissent d'un problème possible, mais rien de mal ne se produira si vous les ignorez. P>
Si cela vous dérange vraiment, vous pouvez probablement utiliser une colonne de modèle et spécifier différents types de données pour les différents types d'objets. p> i utilisera parfois parfois un convertisseur qui renvoie typeof (valeur) code> et utilisez ce type dans un Datriggigriggy p>
Savez-vous si les avertissements de la fenêtre de sortie ont un impact négatif sur la performance?
@Sveng je ne pense pas. Les avertissements n'apparaissent que dans le mode de débogage et n'existeraient même jamais en mode de libération. Voici une réponse aussi associée: Stackoverflow.com/a/2594600/302677
Merci beaucoup pour cette clarification!
Le seul problème est que maintenant, en fonction de la taille de votre application, vous vous retrouverez avec des "avertissements" dans votre fenêtre de sortie, dont certaines pourraient être acceptables, comme vous l'avez décrit ci-dessus, et certaines qui garantissent une enquête. Je préférerais que WPF vous donne un moyen de préciser dans la liaison «Ne me prénomez pas si cette liaison échoue», puis je sais que si une avertissement de liaison à experte apparaît, c'est quelque chose que j'ai besoin d'enquêter. Il est similaire à ne voulant aucune avertissement de compilation lors de la construction. Si vous commencez à autoriser certains avertissements à persister, cela entrave votre capacité à identifier de vrais problèmes.
option facile pour éliminer cet avertissement est d'utiliser avertissement n'apparaîtra pas pour manquant prioritybinding code> comme mentionné par @Snurre comme ceci: prob < / code> propriété. p> p>
Je fais face exactement au même problème et je suis impatient de voir une bonne solution à cette question!