从List(Of T)继承的类的WPF DependencyProperty

时间:2016-04-05 19:55:21

标签: wpf vb.net xaml data-binding dependency-properties

我有一个控件继承另一个第三方控件来扩展一些基本功能。因此,我也不能继承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#,所以任何一种语言的帮助都会受到赞赏。

感谢。

0 个答案:

没有答案