namespace Caliburn.Micro.Core { /// /// A base class for various implementations of that maintain an active item. /// /// The type that is being conducted. public abstract class ConductorBaseWithActiveItem : ConductorBase, IConductActiveItem where T: class { T activeItem; /// /// The currently active item. /// public T ActiveItem { get { return activeItem; } set { ActivateItem(value); } } /// /// The currently active item. /// /// object IHaveActiveItem.ActiveItem { get { return ActiveItem; } set { ActiveItem = (T)value; } } /// /// Changes the active item. /// /// The new item to activate. /// Indicates whether or not to close the previous active item. protected virtual void ChangeActiveItem(T newItem, bool closePrevious) { ScreenExtensions.TryDeactivate(activeItem, closePrevious); newItem = EnsureItem(newItem); if(IsActive) ScreenExtensions.TryActivate(newItem); activeItem = newItem; NotifyOfPropertyChange("ActiveItem"); OnActivationProcessed(activeItem, true); } } }