2009-06-15 5 views
0

J'ai une classe qui implémente INotifyPropertyChanged pour une propriété.Layered INotifyPropertyChanged

J'ai un contrôle lié à cette propriété.

J'ai une autre classe qui écoute l'événement propertychanged. Dans le gestionnaire d'événements de cette classe, je change la valeur de la propriété en code.

Le problème que j'ai est que je ne veux pas faire toute logique dans le gestionnaire d'événements pour la prochaine fois qu'il se déclenche en raison du changement de la propriété en raison de code.

Toutefois, si l'utilisateur change la valeur de la propriété dans le même temps (via async entrée IUG) Je veux toujours la logique au feu. J'ai également besoin de m'assurer que le contrôle est mis à jour (c'est une liaison bidirectionnelle).

Quelle est la meilleure façon de le faire sans que cela devienne un désordre complet?

Répondre

2

Une façon d'y parvenir serait de remanier le poseur sur votre propriété pour qu'il appelle une méthode prenant un paramètre indiquant si oui ou non pour déclencher l'événement. Voici un simple exemple de code:

Imports System.ComponentModel 

Public Class Class1 
    Implements INotifyPropertyChanged 

    Public Property MyData() As String 
     Get 
      Return _myData 
     End Get 
     Set(ByVal value As String) 
      SetMyData(value, True) 
     End Set 
    End Property 
    Private Sub SetMyData(ByVal value As String, ByVal triggerPropertyChanged As Boolean) 
     _myData = value 
     If triggerPropertyChanged Then 
      OnPropertyChanged("MyData") 
     End If 
    End Sub 
    Private _myData As String 

    Private Sub OnPropertyChanged(ByVal propertyName As String) 
     SetMyData("new value", False) 
     RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) 
    End Sub 
    Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged 
End Class 
1

Votre question est un peu vague, mais vous pouvez vérifier si la valeur a réellement changé pour déterminer si vous devriez faire votre logique. Il serait préférable que vous incluiez du code pour être plus précis dans votre question.

Questions connexes