2009-06-15 14 views
0

プロパティに対してINotifyPropertyChangedを実装するクラスがあります。レイヤードINotifyPropertyChanged

私はそのプロパティにバインドされたコントロールを持っています。

私はpropertychangedイベントをリッスンする別のクラスを持っています。そのクラスのイベントハンドラでは、コード内のプロパティの値を変更します。

問題は、コードに起因するプロパティの変更により次回イベントハンドラでロジックを実行したくないということです。

しかし、ユーザーが(async gui inputを使用して)平均的な時間にプロパティの値を変更した場合、私はまだロジックを起動します。私はまた、コントロールが更新されることを確認する必要があります(これは2つのバインディングです)。

これを完全に混乱させることなくこれを行うには、どのような方法が最適ですか?

答えて

2

これを達成する1つの方法は、イベントを発生させるかどうかを示すパラメータを取るメソッドを呼び出すように、プロパティでセッターをリファクタリングすることです。簡単なコードサンプルは次のとおりです。

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

あなたの質問は少し曖昧ですが、あなたのロジックを行うべきかどうかを判断するために値が実際に変更されているかどうかを確認することができます。 あなたの質問にもっと具体的になるようにいくつかのコードを含めると良いでしょう。

関連する問題