2011-09-14 3 views
0

Je déplace un projet de Silverlight à WPF et j'ai rencontré un problème.Comment définir le convertisseur de liaison par défaut dans Wpf?

J'ai un contrôle avec une propriété INotifyPropertyChanged GeoRect de type GeoRect. GeoRect a une variété de propriétés publiques qui sont définies dans son constructeur, chacune de type IGeoPosition.

Je suis en train de se lier à une de ces propriétés comme ceci:

<TextBlock Text="{Binding GeoRect.TopRight, ElementName=x_SomeControl}"></TextBlock> 

Dans Silverlight la méthode ToString par défaut est appelé par exemple IGeoPosition chaque fois que les changements de propriété GeoRect. Dans Wpf, je ne reçois aucun texte.

Je peux corriger cela dans Wpf en ajoutant un ValueConverter au TextBlock qui appelle simplement la méthode ToString sur l'objet, mais cela semble être fat inutile. Quelqu'un peut-il aider?

Répondre

1

Je suppose qu'il y a un autre problème dans votre liaison. Toujours dans WPF, la liaison de données appelle la méthode ToString() pour générer le texte d'un contrôle de texte.
Avez-vous vérifié la fenêtre de sortie de Visual Studio pour une erreur de liaison? Ou peut-être que la classe GeoRect ne prend pas en charge INotifyPropertyChanged pour la propriété TopRight?

+0

Merci pour la réponse. Je pensais que WPF devrait se comporter comme ça. Le champ de sauvegarde pour la propriété TopRight est uniquement défini dans le constructeur. Si je change la propriété à renvoyer une chaîne (et renvoie la méthode ToString sur l'objet champ de support), le résultat correct est obtenu. Cela semble être quelque chose dans la façon dont l'interface est traitée. Mystérieux! –

0

Je suppose que ElementName=x_SomeControl et GeoRect.TopRight provoquent une probable erreur de comination "Source et Path". Êtes-vous sûr que votre x_SomeControl a une propriété appelée 'GeoRect'? Est également x_SomeControl.GeoRect non nul? Et x_SomeControl.GeoRect.TopRight a une valeur correcte? Comme HCL l'a souligné, cela apparaîtra lorsque vous visualiserez votre fenêtre de sortie où l'erreur BindingExpression doit apparaître pour cette liaison.

Veuillez vérifier.

+0

Merci pour la réponse. Les fenêtres de sortie était mon premier d'appel, mais pas de chance. Je suis sûr que GeoRect n'est pas nul, parce que si j'ajoute un convertisseur de valeur à la liaison, je peux 'snoop' et voir que ce n'est pas le cas. En effet, appeler ToString dans un ValueConverter fonctionnera. –

Questions connexes