我有一个实现属性INotifyPropertyChanged的类。
我有一个绑定到该属性的控件。
我有另一个监听propertychanged _ class事件的类。在该类的事件处理程序中,我在代码中更改了属性的值。
我的问题是,我不想在事件处理程序中做任何逻辑,因为下一次它将由于代码导致的属性更改而触发。
但是,如果用户同时更改了属性的值(通过异步gui输入),我仍然希望触发逻辑。我还需要确保控件得到更新(这是双向绑定)。
要做到这一点而不把事情搞得一团糟,最好的方法是什么?
发布于 2009-06-15 18:26:42
要做到这一点,一种方法是重构属性上的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发布于 2009-06-15 18:24:02
您的问题有点模糊,但您可以检查该值是否确实发生了更改,以确定是否应该执行逻辑操作。如果你在你的问题中包含一些更具体的代码会更好。
https://stackoverflow.com/questions/997499
复制相似问题