Silverlight: метка не оценивает привязку пользовательского DependencyProperty - PullRequest
1 голос
/ 12 октября 2009

У меня есть метка Silverlight 3, которую я подключаю к ComboBox, используя свойство Target метки. Согласно MSDN, класс Label выполняет итерацию по привязкам целей и ищет в источниках метаданные, чтобы определить содержание Label.

Это на самом деле работает, пока цель является стандартным элементом управления. Но если я использую пользовательский элемент управления, который в моем случае расширяет ComboBox, и вводит новый DependencyProperty, он просто игнорируется.

например. это работает:

<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}}"/>

В приведенном выше примере выполняется поиск привязки SelectedItem, а DataModel.Country содержит отображаемое DisplayName.

Но это не так:

<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}}"/>

Пользовательские свойства являются свойствами зависимости и объявлены следующим образом:

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

Я знаю, что могу обойти это, определив PropertyPath на метке, но я бы предпочел этого избежать, если это возможно.

Так что мой вопрос сейчас таков: может ли кто-нибудь воспроизвести эту проблему, и, что гораздо важнее, конечно, кто-нибудь знает, как ее решить? : -)

Спасибо, Маркус

1 Ответ

0 голосов
/ 19 октября 2009

Хорошо, если кто-то столкнется с той же проблемой, вот решение: просто измените видимость свойства DependencyProperty с частного на общедоступное.

Совершенно очевидно, на самом деле ...: - /

...