RaisePropertyChanged не обновляет привязку - PullRequest
0 голосов
/ 17 февраля 2011

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

<HyperlinkButton x:Name="ProjectBeheerLink"
       Visibility="{Binding IsBeheerder, Converter={StaticResource VisibilityConverter}}"/>

В моей viewmodel свойство реализовано следующим образом:

Public ReadOnly Property IsBeheerder As Boolean
    Get
        Return iwtApp.AllMyFunctieRollen.Any(Function(x) x.Rol.Equals(Constants.RoleBeheerder))
    End Get
End Property

Затем, когда я поднимаю событие PropertyChanged в моемметод обратного вызова

Private Sub GetMyPersonCompleted(ByVal lo As LoadOperation(Of FunctieRol))
    'Init FunctieRollen ect. ...
    RaisePropertyChanged(Function() Me.IsBeheerder)
End Sub

моя привязка не обновляется.

Однако !Если я реализую поле бэкэнда следующим образом:

        _isBeheerder = iwtApp.AllMyFunctieRollen.Any(Function(x) x.Rol.Equals(Constants.RoleBeheerder))
        RaisePropertyChanged(Function() Me.IsBeheerder)

И меняю свое свойство так:

Public ReadOnly Property IsBeheerder As Boolean
    Get
        Return _isBeheerder
    End Get
End Property

Все работает нормально ... Может кто-нибудь объяснить мне такое поведение?

Просто любопытно, почему ..

1 Ответ

0 голосов
/ 17 февраля 2011

Лучший способ реализовать связанное свойство заключается в следующем:

    Dim _isBeheerder As Boolean
    Public ReadOnly Property IsBeheerder As Boolean
        Get
            Return _isBeheerder
        End Get
        Set
            If value <> _isBeheerder Then
                _isBeheerder = value
                RaisePropertyChanged(Function() Me.IsBeheerder)
            End If
        End Get
    End Property

, тогда в обратном вызове службы вы просто устанавливаете это свойство:

    Private Sub GetMyPersonCompleted(ByVal lo As LoadOperation(Of FunctieRol))
        IsBeheerder = myNewValue
    End Sub
...