如何在VB.Net 3.0中声明依赖属性

时间:2010-05-15 13:32:36

标签: wpf vb.net binding dependency-properties

我的公司坚持使用.Net 3.0。我试图解决的任务很简单,我需要将CheckBoxResolvesCEDAR的IsChecked属性绑定到我的Audio类中的CompletesCEDARWork。我读到的内容越多,似乎我必须将CompletesCEDARWork声明为依赖属性,但我找不到如何完成此操作的好例子。我找到了这个例子,但是当我粘贴到我的代码中时,我得到了GetValue的“未定义”错误,并且我还没有成功找出MyCode应该表示的内容。任何帮助/示例将不胜感激。

由于

Public Shared ReadOnly IsSpinningProperty As DependencyProperty = DependencyProperty.Register("IsSpinning", GetType(Boolean), GetType(MyCode))

Public Property IsSpinning() As Boolean
    Get
        Return CBool(GetValue(IsSpinningProperty))
    End Get
    Set(ByVal value As Boolean)
        SetValue(IsSpinningProperty, value)
    End Set
End Property

这是我现在停下来的音频课程。

Imports System.Xml

进口系统 进口System.IO Imports System.Collections.ObjectModel Imports System.ComponentModel

公共类音频

Private mXMLString As String
Private mTarpID As Integer
Private mStartTime As Date
Private mEndTime As Date
Private mAudioArray As Byte()
Private mFileXMLInfo As IO.FileInfo
Private mFileXMLStream As IO.FileStream
Private mFileAudioInfo As IO.FileInfo
Private mDisplayText As String
Private mCompletesCEDARWork As Boolean

Private Property CompletesCEDARWork() As Boolean
    Get
        Return mCompletesCEDARWork
    End Get
    Set(ByVal value As Boolean)
        mCompletesCEDARWork = value
    End Set
End Property

这是我设置绑定的XML Datatemplate。

<DataTemplate x:Key="UploadLayout" DataType="Audio">
                     <Border BorderBrush="LightGray" CornerRadius="8" BorderThickness="1" Padding="10" Margin="0,3,0,0">
                         <StackPanel Orientation="Vertical">
                            <TextBlock Text="{Binding Path=DisplayText}">
                            </TextBlock>
                            <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
                                <TextBlock Text="TARP ID" VerticalAlignment="Center"/>

                                <ComboBox x:Name="ListBoxTarpIDs"
                                         ItemsSource="{Binding Path=TarpIds}" 
                                          SelectedValue="{Binding Path=TarpID}"
                                          BorderBrush="Transparent"
                                          Background="Transparent" >
                                </ComboBox>

                            </StackPanel>
                            <CheckBox x:Name="CheckBoxResolvesCEDAR" 
                                      Content="Resolves CEDAR Work"
                                IsChecked="{Binding ElementName=Audio,Path=CompletesCEDARWork,Mode=TwoWay}"/>                                    
                                       </StackPanel>   
                     </Border>
                 </DataTemplate>

2 个答案:

答案 0 :(得分:4)

您只能在派生自DependencyObject的类中声明依赖项属性。这就是你得到“GetValue未定义”的原因。您应该阅读这篇关于依赖属性的基础文章以获取更多信息:http://msdn.microsoft.com/en-us/library/ms752914.aspx

或者,您可以使用INotifyPropertyChanged而不是DP来告知绑定值已更改。

答案 1 :(得分:0)

以下是我用来实现INotifyPropertyChanged

的代码
Public Class Audio
Implements INotifyPropertyChanged

Private mCompletesCEDARWork As Boolean

Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged

Public Property CompletesCEDARWork() As Boolean
    Get
        Return mCompletesCEDARWork
    End Get
    Set(ByVal value As Boolean)
        mCompletesCEDARWork = value
        NotifyPropertyChanged("CompletesCEDARWork")
    End Set
End Property

Private Sub NotifyPropertyChanged(ByVal info As String)
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
End Sub