当前位置: 代码迷 >> VB Dotnet >> 请大家伙儿帮忙看看:重写属性后触发PropertyChanged无效的原因是什么
  详细解决方案

请大家伙儿帮忙看看:重写属性后触发PropertyChanged无效的原因是什么

热度:1059   发布时间:2016-04-25 02:25:55.0
请大家帮忙看看:重写属性后触发PropertyChanged无效的原因是什么
我使用下面的代码重写了TabControl类的ItemSize属性。重写后,选项卡的大小却不随该属性修改而改变,请高手看看,是哪里出错了?
Public Event PropertyChanged As PropertyChangedEventHandler _
Implements INotifyPropertyChanged.PropertyChanged

    Private TabSize As New Size

    Public Overloads Property ItemSize() As Size
        Get
            Return TabSize
        End Get
        Set(ByVal value As Size)
            TabSize = value
            If TabSize.Height > 1 And TabSize.Width > 0 Then
                originalItemSize = value
            End If
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("ItemSize"))
        End Set
    End Property
------解决方案--------------------
Overloads -> Overrides

另外你这么写当你使用ItemSize.Size.Height = xxx的时候,Set不会触发,调用的是Get。
你应该让Size只读,同时使用Height Width属性来操作。
------解决方案--------------------
obj.ItemSize.Height = xxx
其实调用的是get
相当于
obj.Get_ItemSize().Height = xxx
或者说
Dim s As Size = obj.Get_ItemSize()
s.Height = xxx

而这么写才会调用set
obj.ItemSize = new Size(obj.ItemSize.Width, xxx)
它相当于
obj.Set_ItemSize(new Size(obj.ItemSize.Width, xxx))