2009-06-15 3 views
0

속성에 대해 INotifyPropertyChanged를 구현하는 클래스가 있습니다.계층화 된 INotifyPropertyChanged

해당 컨트롤에 바인딩 된 컨트롤이 있습니다.

propertychanged 이벤트를 수신하는 다른 클래스가 있습니다. 해당 클래스의 이벤트 처리기에서 코드의 속성 값을 변경합니다.

문제는 코드로 인해 속성 변경으로 인해 다음 번에 이벤트 처리기에서 어떤 로직을 수행하고 싶지 않다는 것입니다.

그러나 사용자가 비동기 GUI 입력을 통해 평균 시간 내에 속성 값을 변경하면 논리가 계속 실행되기를 원합니다. 또한 컨트롤이 업데이트되었는지 확인해야합니다 (twoway 바인딩).

이것이 완전히 엉망이되지 않으면 어떻게해야할까요?

답변

2

이 작업을 수행하는 한 가지 방법은 이벤트를 발생 시킬지 여부를 나타내는 매개 변수를 사용하는 메서드를 호출하기 위해 속성의 setter를 리팩토링하는 것입니다. 다음은 간단한 코드 샘플입니다.

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

귀하의 질문은 다소 모호 합니다만, 로직을 수행해야하는지 여부를 결정하기 위해 값이 실제로 변경되었는지 확인할 수 있습니다. 질문에 좀 더 구체적으로 코드를 포함 시키면 더 좋을 것입니다.

관련 문제