Слоистый 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
Ваш вопрос немного расплывчатый, но вы можете проверить, действительно ли значение изменилось, чтобы определить, следует ли вам выполнять логику. Было бы лучше, если бы вы включили некоторый код, чтобы быть более конкретным в вашем вопросе.