Die geheimnisvolle Variable KeepAlive von Prism

Wie bereits im Artikel RibbonRegionAdapter in VB.Net versprochen gehe ich nun auf die Variable KeepAlive ein. Für mein Projekt benötigte ich Views, die ihre RibbonTabs selbstständig laden und entladen. Schließlich möchte man die Modularität, die man durch Prism gewinnt, nicht gleich wieder entbehren müssen.

Mein erster Versuch scheiterte an einer Auflistung unzähliger RibbonTabs. Jedes Mal, wenn die View geöffnet wurde, öffnete sich auch ein weiterer RibbonTab. Mit dem Öffnen der View konnte ich zwar einen RibbonTab laden, doch konnte ich die bereits geladenen RibbonTabs nicht entfernen, wenn die View wechselte. Über einen kleinen Workaround war es mir irgendwann möglich alle geladenen RibbonTabs zu durchsuchen und passende RibbonTabs zu entfernen. Wirklich elegant war diese Lösung allerdings nicht.

Kurze Zeit später entdeckte ich die Variable KeepAlive und fand damit die eine wesentlich bessere Lösung. Der nachfolgende Ausschnitt der Code-Behind-Datei eines RibbonTabs bzw. dessen ViewModels zeigt, dass der RibbonTab das Interface IRegionMemberLifetime implementiert. Das Porperty KeepAlive implementiert IRegionMemberLifetime.KeepAlive und hat den Typ Boolean. Der Ausschnitt ist übrigens in VB.Net, lässt sich aber genauso in C# verwenden.

Public Class RibbonTabA
    Inherits RibbonTab
    Implements IRegionMemberLifetime

    Public ReadOnly Property KeepAlive As Boolean 
      Implements IRegionMemberLifetime.KeepAlive
        Get
            Return True
        End Get
    End Property
End Class

Soll der RibbonTab entfernt werden, sobald ein anderer RibbonTab in die Region geladen wird, so gibt man an dieser Stelle den Wert False zurück. Möchte man den RibbonTab dagegen grundsätzlich geladen lassen, so setzt man das Property auf True. So kann das Entladen eines RibbonTabs ganz einfach über das Property KeepAlive gesteuert werden.