У меня есть метка 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 на метке, но я бы предпочел этого избежать, если это возможно.
Так что мой вопрос сейчас таков: может ли кто-нибудь воспроизвести эту проблему, и, что гораздо важнее, конечно, кто-нибудь знает, как ее решить? : -)
Спасибо, Маркус