Слоистый INotifyPropertyChanged

У меня есть класс, который реализует INotifyPropertyChanged для свойства.

У меня есть элемент управления, связанный с этим свойством.

У меня есть другой класс, который слушает событие изменилось. В обработчике событий этого класса я изменяю значение свойства в коде.

У меня проблема в том, что я не хочу делать какую-либо логику в обработчике событий в следующий раз, когда он сработает из-за изменения свойства из-за кода.

Однако, если пользователь изменяет значение свойства в среднем времени (через асинхронный ввод графического интерфейса), я все равно хочу, чтобы логика сработала. Мне также нужно убедиться, что элемент управления обновляется (это двусторонняя привязка).

Каков наилучший способ сделать это, чтобы это не превратилось в полный беспорядок?

2 ответа

Решение

Одним из способов сделать это было бы рефакторинг сеттера для вашего свойства, чтобы он вызывал метод, принимающий параметр, указывающий, вызывать ли событие. Вот простой пример кода:

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

Ваш вопрос немного расплывчатый, но вы можете проверить, действительно ли значение изменилось, чтобы определить, следует ли вам выполнять логику. Было бы лучше, если бы вы включили некоторый код, чтобы быть более конкретным в вашем вопросе.

Другие вопросы по тегам