我有一个Silverlight 3标签,我使用Label的Target属性连接到ComboBox。根据MSDN,Label类遍历目标绑定并搜索元数据的源以确定标签的内容。
只要目标是标准控件,这实际上就有效。但是,如果我使用自定义控件,在我的情况下扩展ComboBox,并引入一个新的DependencyProperty,它就会被忽略。
E.g。这有效:
<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 Binding,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}}"/>
自定义属性是依赖属性,并声明为follws:
private static readonly DependencyProperty MySelectedItemProperty =
DependencyProperty.Register("MySelectedItem",
typeof(object), typeof(MyComboBox),
new PropertyMetadata(null,
MySelectedItemPropertyChanged));
我知道我可以通过在Label上定义PropertyPath来解决这个问题,但如果可能的话,我宁愿避免这种情况。
所以现在我的问题是,任何人都可以重现这个问题,当然更重要的是,有人知道如何解决它吗? : - )
谢谢Markus
答案 0 :(得分:0)
好的,如果有人遇到同样的问题,这就是解决方案:只需将DependencyProperty的可见性从私有更改为公共。
实际上很明显......: - /