Imports Infragistics.Shared
Imports Infragistics.Win
Public Class ExampleClass
Inherits SubObjectBase
Private appearanceHolder As appearanceHolder
Private enabledValue As Boolean
' Listens for property change notifications of the object's sub objects.
Protected Overrides Sub OnSubObjectPropChanged(ByVal pci As Infragistics.Shared.PropChangeInfo)
' Check if the source is our appearance object.
If Not Me.appearanceHolder Is Nothing _
AndAlso pci.Source.Equals(Me.appearanceHolder.RootAppearance) Then
' Do what needs to be done (if anything) based on the
' nature of the change
Dim propId As AppearancePropIds
propId = pci.PropId
If propId = AppearancePropIds.Image _
OrElse propId = AppearancePropIds.ImageHAlign _
OrElse propId = AppearancePropIds.ImageVAlign Then
Me.DirtyImage()
Else
Me.DirtyText()
End If
' Call NotifyPropChange with the appropriate property id
' and the PropChangeInfo instance that was passed into
' this method.
Me.NotifyPropChange(StatusBarPropertyIds.Appearance, pci)
' Note: If there are any listeners to our 'SubObjectPropChanged'
' event, the event will be raised with a new PropChangeInfo
' event argument whose properties will be set as follows:
' 1. The Source property will refer to this object.
' 2. The PropId property will be StatusBarPropertyIds.Appearance.
' 3. The Trigger property will be the passed in PropChangeInfo.
'
' This will effectively create a chain of PropChangeInfo
' objects, with the new one at the head, that exposes
' complete context information regarding the change.
Return
End If
' There is an overload to the 'NotifyPropChange' method
' that just takes the passed in PropChangeInfo object.
' This is useful if you want to pass the notification
' along to this object's listeners 'as is'. In other words,
' without creating a new PropChangeInfo to add to the
' head of the chain (refer to above comments).
Me.NotifyPropChange(pci)
Dim sb As System.Text.StringBuilder
' The following code walks up the PropChangeInfo chain
' and writes out the source and property id of each
' object.
While Not pci Is Nothing
sb = New System.Text.StringBuilder()
sb.Append("Property Id: ")
sb.Append(pci.PropId.ToString())
sb.Append(", source: ")
sb.Append(pci.Source.ToString())
sb.Append(". type: ")
sb.Append(pci.Source.GetType().ToString())
Debug.WriteLine(sb.ToString())
Debug.Indent()
End While
' Get the next PropChangeInfo object in the chain
pci = pci.Trigger
' Reset the indent level of the Debug object
Debug.IndentLevel = 0
' Alternatively there are 'Find...' methods that
' will walk up the chain until they find the
' requested PropChangeInfo object to return or
' they will return null.
pci = pci.FindPropId(AppearancePropIds.BackGradientStyle)
pci = pci.FindTrigger(Me.appearanceHolder.RootAppearance)
' There is also a 'FindSource' method which will
' return the source object based on the passed
' in type. If no source object of that type is
' found in the chain this method will return null.
Dim source As Object
source = pci.FindSource(GetType(Infragistics.Win.Appearance))
End Sub
Public Property Enabled() As Boolean
Get
Return Me.enabledValue
End Get
Set(ByVal Value As Boolean)
If Not Me.enabledValue = Value Then
Me.enabledValue = Value
' Call the overload to the 'NotifyPropChange' method
' that just takes a property id.
Me.NotifyPropChange(StatusBarPropertyIds.Enabled)
' Note: If there are any listeners to our 'SubObjectPropChanged'
' event, the event will be raised with a PropChangeInfo
' event argument whose properties will be` set as follows:
' 1. The Source property will refer to this object.
' 2. The PropId property will be StatusBarPropertyIds.Enabled.
' 3. The Trigger property will be null.
End If
End Set
End Property
Public ReadOnly Property Appearance() As AppearanceBase
Get
' Lazily create the appearance holder
If Me.appearanceHolder Is Nothing Then
Me.appearanceHolder = New AppearanceHolder()
' Listen in to property changes generated by the
' object. When one of its properties changes our
' 'OnSubObjectPropChanged' method will be called.
AddHandler Me.appearanceHolder.SubObjectPropChanged, Me.SubObjectPropChangeHandler
End If
Return Me.appearanceHolder.Appearance
End Get
End Property
Protected Overrides Sub OnDispose()
If Not Me.appearanceHolder Is Nothing Then
' Remove ourselves as a listener
RemoveHandler Me.appearanceHolder.SubObjectPropChanged, Me.SubObjectPropChangeHandler
End If
End Sub
Private Sub DirtyImage()
End Sub
Private Sub DirtyText()
End Sub
End Class
Public Enum StatusBarPropertyIds
Appearance = 1
Enabled = 2
End Enum