2009-10-12 9 views
1

J'ai un Label Silverlight 3 que je connecte à un ComboBox en utilisant la propriété Target de l'étiquette. Selon MSDN, la classe Label itère à travers les liaisons cibles et recherche les sources pour les métadonnées afin de déterminer le contenu de l'étiquette.Silverlight: Label n'évalue pas Liaison de DependencyProperty personnalisée

Cela fonctionne réellement tant que la cible est un contrôle standard. Mais si j'utilise un contrôle personnalisé, qui dans mon cas étend ComboBox et introduit un nouveau DependencyProperty, il est simplement ignoré.

E.g. cela fonctionne:

<dataInput:Label Grid.Row="3" Grid.Column="0" 
      Target="{Binding ElementName=cbxCountry}" 
      VerticalAlignment="Center"/> 
<ComboBox x:Name="cbxCountry" DisplayMemberPath="Name" 
     SelectedItem="{Binding DataModel.Country, Mode=TwoWay}" 
     ItemsSource="{Binding Countries, Source={StaticResource ApplicationData}}"/> 

Dans l'exemple ci-dessus SelectedItem La liaison est recherchée et DataModel.Country contient le DisplayName qui est pris.

Mais cela ne:

<dataInput:Label Grid.Row="3" Grid.Column="0" 
      Target="{Binding ElementName=cbxCountry}" 
      VerticalAlignment="Center"/> 
<local:MyComboBox x:Name="cbxCountry" DisplayMemberPath="Name" 
     MySelectedItem="{Binding DataModel.Country, Mode=TwoWay}" 
     MyItemsSource="{Binding Countries, Source={StaticResource ApplicationData}}"/> 

Les propriétés personnalisées sont des propriétés de dépendance et déclarés comme follws:

private static readonly DependencyProperty MySelectedItemProperty = 
          DependencyProperty.Register("MySelectedItem", 
          typeof(object), typeof(MyComboBox), 
          new PropertyMetadata(null, 
           MySelectedItemPropertyChanged)); 

Je sais que je peux contourner ce problème en définissant le PropertyPath sur l'étiquette, mais je préfère éviter cela, si possible.

Donc, ma question est maintenant, quelqu'un peut-il reproduire ce problème, et bien plus important bien sûr, quelqu'un sait comment le résoudre? :-)

Merci, Markus

Répondre

0

Ok tout le monde, en cas se heurte au même problème, voici la solution: Il suffit de changer la visibilité du DependencyProperty du privé au public.

Tout à fait évident en fait ...: -/

Questions connexes