NotifyPropertyChanged… en VB
Dans ce post, je considère l’évènement PropertyChanged comme une Propriété de type PropertyChangedEventHandler. Le problème c’est que en VB… cela n’est pas possible.
Aussi ceux qui font du VB, des modifications s’imposent :
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Private _notifyPropertyChanged As NotifyPropertyChanged
Public ReadOnly Property NotifyPropertyChanged As NotifyPropertyChanged
Get
If _notifyPropertyChanged Is Nothing Then _
_notifyPropertyChanged = New NotifyPropertyChanged(Me, Sub(propertyName As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)))
Return _notifyPropertyChanged
End Get
End Property
Public Class NotifyPropertyChanged
Private _raiseEvent As Action(Of String)
Private _sender As Object
Public Sub New(ByVal sender As Object, ByVal [raiseEvent] As Action(Of String))
_raiseEvent = [raiseEvent]
_sender = sender
End Sub
Public Sub RaisePropertyChanged(ByVal propName As String)
If _raiseEvent IsNot Nothing Then _raiseEvent(propName)
End Sub
Public Sub RaisePropertyChanged(Of T)(ByVal exp As Expression(Of Func(Of T)))
Dim expPropertyName As String = PropertyName.GetPropertyName(exp)
If expPropertyName IsNot Nothing Then RaisePropertyChanged(expPropertyName)
End Sub
End Class
Public Module PropertyName
Public Function GetPropertyName(ByVal exp As LambdaExpression) As String
Dim memberExpression = TryCast(exp.Body, MemberExpression)
If memberExpression IsNot Nothing Then Return memberExpression.Member.Name
Return Nothing
End Function
End Module
Il y a peut-être mieux comme solution. N’hésitez pas à me laisser un commentaire dans ce cas.
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :