none
Проблема с наследованием RRS feed

  • Вопрос

  • У меня есть базовый класс classA, который реализует интерфейс INotifyPropertyChanged. Класс classB наследует classA и в нём добавляется новое свойство. Потом эти свойства связываются с элементами упрваления. Моя проблема состоит в том, что свойсвта базового каласса нормально отобрабражаются и обновляются, а вот свойство classB не отображается в элементе управления.

    Imports System.ComponentModel
    
    Public Class classA
        Implements INotifyPropertyChanged
    
        ' "INotifyPropertyChanged Members"
        Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
    
        Private Sub NotifyPropertyChanged(ByVal info As String)
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
        End Sub
    
        Private mQAQSmin As Nullable(Of Integer)
        
        Public Sub New()
            Me.mQAQSmin = Nothing
        End Sub
    
        Public Property QAQSmin As Nullable(Of Integer)
            Get
                If (Me.mQAQSmin.HasValue = True) Then
                    Return Me.mQAQSmin.Value
                Else
                    Return Nothing
                End If
            End Get
            Set(value As Nullable(Of Integer))
                If value Is Nothing Then
                    ' новое значение свойства равно Nothing
                    If (Me.mQAQSmin.HasValue = True) Then
                        ' старое значение свойства не равно Nothing
                        Me.mQAQSmin = value
                        NotifyPropertyChanged("QAQSmin")
                    Else
                        ' старое значение свойства равно Nothing, то есть значение свойства не изменится
                    End If
                Else
                    ' новое значение свойств не равно Nothing
                    If (Me.mQAQSmin.HasValue = True) Then
                        ' проверяем не равны ли новое и старое значения и если они не равны вызываем событие PropertyChanged
                        If Not (value = Me.mQAQSmin.Value) Then
                            Me.mQAQSmin = value
                            NotifyPropertyChanged("QAQSmin")
                        End If
                    Else
                        ' старое значение равно Nothing, а новое не равно Nothing, значит нужно вызвать событие PropertyChanged
                        Me.mQAQSmin = value
                        NotifyPropertyChanged("QAQSmin")
                    End If
                End If
            End Set
        End Property
    End Class
    
    Public Class classB
        Inherits classA
        'Implements INotifyPropertyChanged
    
        ' "INotifyPropertyChanged Members"
        Public Shadows Event PropertyChanged As PropertyChangedEventHandler 'Implements INotifyPropertyChanged.PropertyChanged
    
        Private Sub NotifyPropertyChanged(ByVal info As String)
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
        End Sub
    
        Private mDeltaEGc As Nullable(Of Single) ' zusätzliche Durchbiegung der Dichtung infolge von Kriechen
    
        Public Sub New()
            MyBase.New()
    
            Me.mDeltaEGc = Nothing
        End Sub
    
        Public Property DeltaEGc As Nullable(Of Single)
            Get
                If (Me.mDeltaEGc.HasValue = True) Then
                    Return Me.mDeltaEGc.Value
                Else
                    Return Nothing
                End If
            End Get
            Set(value As Nullable(Of Single))
                If value Is Nothing Then
                    ' новое значение свойства равно Nothing
                    If (Me.mDeltaEGc.HasValue = True) Then
                        ' старое значение свойства не равно Nothing
                        Me.mDeltaEGc = value
                        'NotifyPropertyChanged("DeltaEGc")
                        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("DeltaEGc"))
                    Else
                        ' старое значение свойства равно Nothing, то есть значение свойства не изменится
                    End If
                Else
                    ' новое значение свойств не равно Nothing
                    If (Me.mDeltaEGc.HasValue = True) Then
                        ' проверяем не равны ли новое и старое значения и если они не равны вызываем событие PropertyChanged
                        If Not (value = Me.mDeltaEGc.Value) Then
                            Me.mDeltaEGc = value
                            'NotifyPropertyChanged("DeltaEGc")
                            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("DeltaEGc"))
                        End If
                    Else
                        ' старое значение равно Nothing, а новое не равно Nothing, значит нужно вызвать событие PropertyChanged
                        Me.mDeltaEGc = value
                        'NotifyPropertyChanged("DeltaEGc")
                        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("DeltaEGc"))
                    End If
                End If
            End Set
        End Property
    End Class
    В classB у меня возникает проблемма с реализацией интерфейса INotifyPropertyChanged. Если я пробую реализовать интерфей в classB, то получаю сообщение о том, что он уже реализован в базовом классе. А если я пробую вызвать событие PropertyChanged базового класса, то получаю сообщение, что я не могу в классе наследнике вызывать события базового класса. В чём моя ошибка?
    2 октября 2013 г. 11:15

Ответы

Все ответы