我有一个 Silverlight 3 标签,我使用标签的 Target 属性连接到一个 ComboBox。根据 MSDN,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 来解决这个问题,但如果可能的话,我宁愿避免这种情况。
所以我现在的问题是,任何人都可以重现这个问题,当然更重要的是,有人知道如何解决它吗?:-)
谢谢,马库斯