2010-05-15 5 views
1

Ma société est bloquée sur .Net 3.0. La tâche que j'essaie de résoudre est simple, j'ai besoin de lier la propriété IsChecked de CheckBoxResolvesCEDAR à la classe CompletesCEDARWork dans ma classe Audio. Plus je lis à ce sujet, il semble que je dois déclarer CompletesCEDARWork comme propriété de dépendance, mais je ne peux pas trouver un bon exemple de la façon dont cela est fait. J'ai trouvé cet exemple, mais quand j'ai collé dans mon code, j'obtiens une erreur "is not defined" pour GetValue et je n'ai pas réussi à comprendre ce que MyCode est supposé représenter. Toute aide/exemple serait grandement apprécié.Comment déclarer une propriété de dépendance dans VB.Net 3.0

Merci

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 

Voici mon Slimed vers le bas Audio Class tel qu'il est maintenant.

Imports System.Xml 

Imports système Imports System.IO Imports System.Collections.ObjectModel Imports 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 

Et voici mon XML datatemplate où je mis la contraignant.

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

Répondre

4

Vous pouvez uniquement déclarer des propriétés de dépendance dans les classes dérivées de DependencyObject. C'est pourquoi vous obtenez un "GetValue n'est pas défini". Vous devriez lire cet article fondamental sur les propriétés de dépendance pour plus d'informations: http://msdn.microsoft.com/en-us/library/ms752914.aspx.

Vous pouvez également utiliser INotifyPropertyChanged au lieu d'un DP pour indiquer à la liaison que la valeur a changé.

+0

Mis en œuvre INotifyPropertyChanged et cela a fonctionné parfaitement. Je vous remercie! – user38349

0

Voici le code que je l'habitude de mettre en œuvre 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 
Questions connexes