0

プロパティのINotifyPropertyChangedを実装するクラスがあります。

そのプロパティにバインドされているコントロールがあります。

propertychangedイベントをリッスンする別のクラスがあります。そのクラスのイベントハンドラーで、コード内のプロパティの値を変更します。

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

ただし、ユーザーがその間にプロパティの値を変更した場合(非同期GUI入力を介して)、ロジックを起動する必要があります。また、コントロールが更新されることを確認する必要があります(これは双方向バインディングです)。

これが完全に混乱することなくこれを行うための最良の方法は何ですか?

4

2 に答える 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
于 2009-06-15T18:26:42.320 に答える
1

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

于 2009-06-15T18:24:01.513 に答える