0

我有一个为属性实现 INotifyPropertyChanged 的​​类。

我有一个绑定到该属性的控件。

我有另一个监听 propertychanged 事件的类。在该类的事件处理程序中,我更改了代码中属性的值。

我遇到的问题是,我不想在事件处理程序中执行任何逻辑,因为下次它会因为代码的属性更改而触发。

但是,如果用户同时更改属性的值(通过异步 gui 输入),我仍然希望触发逻辑。我还需要确保控件得到更新(这是双向绑定)。

在不让这变得一团糟的情况下,最好的方法是什么?

4

2 回答 2

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
于 2009-06-15T18:26:42.320 回答
1

您的问题有点含糊,但您可以检查该值是否实际上已更改以确定您是否应该执行您的逻辑。如果您在问题中包含一些更具体的代码会更好。

于 2009-06-15T18:24:01.513 回答