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);
}
}
}