2016-12-03 4 views
0

Ich habe einen Regionsadapter für eine fließende RibbonTabItem und ich möchte es nur eine einzige RibbonGroupBox zu einer Zeit zeigen. Ich erwartete dies die Arbeit zu tun:Kann ich eine SingleActiveRegion ohne Hilfe der Ansicht erstellen?

protected override IRegion CreateRegion() 
    { 
     return new SingleActiveRegion(); 
    } 

, aber es funktioniert nicht (dh, wenn ich um die Region zu einer neuen Sicht zu navigieren, ich eine zusätzliche neue Sicht bekommen), es sei denn, ich meine Ansichten machen implementieren IRegionMemberLifetime und senden Sie false von KeepAlive zurück.

Frage: was vermisse ich? Wie erstellt man eine Region, die immer ihre ViewsCollection löscht, bevor eine neue Ansicht hinzugefügt wird?

Antwort

0

Mein schlechtes. Ich hätte ActiveViews (nicht Views) meiner Region beobachten sollen ... funktioniert jetzt gut.

Hier ist der vollständige Code:

public class RibbonTabItemRegionAdapter : RegionAdapterBase<RibbonTabItem> 
{ 
    public RibbonTabItemRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory) : base(regionBehaviorFactory) 
    { 
    } 

    protected override void Adapt(IRegion region, RibbonTabItem regionTarget) 
    { 
     region.ActiveViews.CollectionChanged += (s, e) => 
               { 
                switch (e.Action) 
                { 
                 case NotifyCollectionChangedAction.Add: 
                  foreach (var newItem in e.NewItems) 
                   regionTarget.Groups.Add((RibbonGroupBox)newItem); 
                  break; 
                 case NotifyCollectionChangedAction.Remove: 
                  foreach (var oldItem in e.OldItems) 
                   regionTarget.Groups.Remove((RibbonGroupBox)oldItem); 
                  break; 
                } 
               }; 
    } 

    protected override IRegion CreateRegion() 
    { 
     return new SingleActiveRegion(); 
    } 
} 
Verwandte Themen