У меня есть веб-формы WebUserControl, который имеет логическое свойство ShowAccessLevels
:Как выполнить внутреннюю логику, когда UserControl значение свойства изменяется
Public Property ShowAccessLevels As Boolean
Get
Dim a As Object = ViewState("_ShowAccessLevels")
If a Is Nothing Then
a = False
End If
Return Convert.ToBoolean(a)
End Get
Set(value As Boolean)
ViewState("_ShowAccessLevels") = value
End Set
End Property
Когда сеттер вызывается, если значение изменилось, мне нужно выполнить некоторую внутреннюю логику, чтобы показать/скрыть поля на основе значения:
Private Sub ShowAccessLevelsChanged()
If value = False Then
' do stuff here
Else
' do stuff here
End If
End Sub
Я знаю, что я могу вызвать метод из сеттеров, но я не уверен в том, что это лучшая практика:
Set(value As Boolean)
If ViewState("_ShowAccessLevels") <> value Then
ViewState("_ShowAccessLevels") = value
ShowAccessLevelsChanged()
End Set
Мне понадобятся методы для многих разных свойств, поэтому создание нового каждый раз становится неуклюжим. Я вижу, что раньше задавали вопрос similar question, но я не могу понять, соответствует ли окончательное решение тому, что советуют эксперт и this MSDN article.
Обратите внимание, что мне не нужно поднимать событие вне контроля, его использование только для внутреннего использования, поэтому я изо всех сил стараюсь использовать оба источника в соответствии с моими потребностями.
Если я реализую INotifyPropertyChanged
тогда я в конечном итоге с этими дополнениями, но не может работать, как связать логику с моей собственности:
Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
Private Sub NotifyPropertyChanged(<CallerMemberName()> Optional ByVal propertyName As String = Nothing)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
End Sub
Я бы признателен за любые указатели пожалуйста.
'INotifyPropertyChanged' будет работать так же, как и альтернативный набор. Когда 'value <> _ShowAccessLevels' вы поднимете событие. Если подписчиков на мероприятие нет, он ничего не решит. Я могу показать, как его реализовать, но у вас будет одинаковый код в каждом сеттере, и он будет не менее «неуклюжим», чем тот, который у вас есть. Вопрос заключается в том, есть ли что-то, кто подписывается, возможно, предсказывает вызов ViewState. – Plutonix
Хорошо, что прояснение - это все, что я искал, в отсутствие решения, которое отличалось от того, что я сделал. Спасибо. – EvilDr
, вы можете использовать аналогичную * структуру * для обработки изменений, полученных в результате реквизита, а не для отдельной процедуры для каждого из них. – Plutonix