1

我有一个 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 来解决这个问题,但如果可能的话,我宁愿避免这种情况。

所以我现在的问题是,任何人都可以重现这个问题,当然更重要的是,有人知道如何解决它吗?:-)

谢谢,马库斯

4

1 回答 1

0

好的,如果有人遇到同样的问题,这里是解决方案:只需将 DependencyProperty 的可见性从私有更改为公共。

实际上很明显...... :-/

于 2009-10-19T09:46:18.733 回答