我有一个为属性实现 INotifyPropertyChanged 的类。
我有一个绑定到该属性的控件。
我有另一个监听 propertychanged 事件的类。在该类的事件处理程序中,我更改了代码中属性的值。
我遇到的问题是,我不想在事件处理程序中执行任何逻辑,因为下次它会因为代码的属性更改而触发。
但是,如果用户同时更改属性的值(通过异步 gui 输入),我仍然希望触发逻辑。我还需要确保控件得到更新(这是双向绑定)。
在不让这变得一团糟的情况下,最好的方法是什么?
我有一个为属性实现 INotifyPropertyChanged 的类。
我有一个绑定到该属性的控件。
我有另一个监听 propertychanged 事件的类。在该类的事件处理程序中,我更改了代码中属性的值。
我遇到的问题是,我不想在事件处理程序中执行任何逻辑,因为下次它会因为代码的属性更改而触发。
但是,如果用户同时更改属性的值(通过异步 gui 输入),我仍然希望触发逻辑。我还需要确保控件得到更新(这是双向绑定)。
在不让这变得一团糟的情况下,最好的方法是什么?
实现此目的的一种方法是重构您的属性上的 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
您的问题有点含糊,但您可以检查该值是否实际上已更改以确定您是否应该执行您的逻辑。如果您在问题中包含一些更具体的代码会更好。