我有一个控件继承另一个第三方控件来扩展一些基本功能。因此,我也不能继承DependencyObject。
我通过以下方式在我的AerosWpfMap控件上设置了一个附加的DependencyProperty:
Public Shared ReadOnly Property CountyCodesProperty As DependencyProperty = DependencyProperty.Register("CountyCodes", GetType(SystemCountyCodes), GetType(AerosWpfMap), New FrameworkPropertyMetaData(Nothing))
该财产的定义如下:
Public Property CountyCodes As SystemCountyCodes
Get
Return Dispatcher.Invoke(Function()
Return GetValue(CountyCodesProperty)
End Function)
End Get
Set
SetValue(CountyCodesProperty, value)
End Set
End Property
这里棘手的部分是SystemCountyCodes类继承List(Of CountyCodeInfo)。
现在,我有一个名为UI的窗口类,它包含这个AerosWpfMap控件,我试图将AerosWpfMap的CountyCodes属性绑定到我的UI类中的CountyCodes属性。我在我的窗口中实现了INotifyPropertyChanged,并在CountyCodes属性的setter期间引发事件,如下所示:
Public Property CountyCodes As SystemCountyCodes
Get
Return _countyCodes
End Get
Set
_countyCodes = value
RaiseEvent INotifyPropertyChanged_PropertyChanged(Me, New PropertyChangedEventArgs("CountyCodes"))
End Set
End Property
我的Xaml中的UI.xaml绑定如下:
<mapping:AerosWpfMap x:Name="Map"
Grid.Column="1"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Background="{StaticResource CheckerBackground}"
CountyCodes="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type mapping:UI}}, Path=CountyCodes, Mode=OneWay}"
Srid="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type mapping:UI}}, Path=Srid, Mode=OneWay}" />
具有讽刺意味的是,除非我以这种方式指定相对来源,否则它似乎不起作用,即使我应该能够使用RelativeSource = {RelativeSource Self}。
这一切都有效,并在运行时绑定;但是,我仍然遇到以下错误
严重级代码描述项目文件行抑制状态 错误A&#39;绑定&#39;不能设置在&#39; CountyCodes&#39;属性类型&#39; Controls_Mapping_AerosWpfMap_17_362199327&#39;。 A&#39;绑定&#39;只能在DependencyObject的DependencyProperty上设置。 AerosAdjusterMapping C:\ Projects \ AerosAdjusterMapping \ AerosAdjusterMapping \ Controls \ Mapping \ UI.xaml 383
这让我相信我仍然设置错误。谁能指出我正确的方向?
我想我可能向后有DependencyProperty的概念(即它应该在目标(UI)而不是Source(AerosWpfMap),或者我需要让我的AerosWpfMap控件从DependencyObject继承,但是我说,因为它已经从另一个控件继承而我不能走这条路。
任何帮助将不胜感激,并为它在VB中表示道歉(这是对此的要求之一)。我也精通C#,所以任何一种语言的帮助都会受到赞赏。
感谢。