Как вы объявляете свойство зависимости в VB.Net 3.0 - PullRequest
1 голос
/ 15 мая 2010

Моя компания застряла на .Net 3.0. Задача, которую я пытаюсь решить, проста, мне нужно привязать свойство IsChecked CheckBoxResolvesCEDAR к CompletesCEDARWork в моем классе Audio. Чем больше я читаю об этом, тем больше мне кажется, что я должен объявить 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 Импортирует System.Collections.ObjectModel Импортирует System.ComponentModel

Public Class Audio

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 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 ]

4 голосов
/ 15 мая 2010

Вы можете объявить свойства зависимостей только в классах, производных от DependencyObject. Вот почему вы получаете «GetValue не определено». Вы должны прочитать эту фундаментальную статью о свойствах зависимостей для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/ms752914.aspx.

В качестве альтернативы вы можете использовать INotifyPropertyChanged вместо DP, чтобы сообщить привязке, что значение изменилось.

0 голосов
/ 15 мая 2010

Вот код, который я использовал для реализации 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
...