Sic04/FrameworkLocal/UIClient/Caliburn.Micro/Core/Conductor.cs

76 lines
2.7 KiB
C#

namespace Caliburn.Micro.Core {
using System;
using System.Collections.Generic;
/// <summary>
/// An implementation of <see cref="IConductor"/> that holds on to and activates only one item at a time.
/// </summary>
public partial class Conductor<T> : ConductorBaseWithActiveItem<T> where T: class {
/// <summary>
/// Activates the specified item.
/// </summary>
/// <param name="item">The item to activate.</param>
public override void ActivateItem(T item) {
if(item != null && item.Equals(ActiveItem)) {
if (IsActive) {
ScreenExtensions.TryActivate(item);
OnActivationProcessed(item, true);
}
return;
}
CloseStrategy.Execute(new[] { ActiveItem }, (canClose, items) => {
if(canClose)
ChangeActiveItem(item, true);
else OnActivationProcessed(item, false);
});
}
/// <summary>
/// Deactivates the specified item.
/// </summary>
/// <param name="item">The item to close.</param>
/// <param name="close">Indicates whether or not to close the item after deactivating it.</param>
public override void DeactivateItem(T item, bool close) {
if (item == null || !item.Equals(ActiveItem)) {
return;
}
CloseStrategy.Execute(new[] { ActiveItem }, (canClose, items) => {
if(canClose)
ChangeActiveItem(default(T), close);
});
}
/// <summary>
/// Called to check whether or not this instance can close.
/// </summary>
/// <param name="callback">The implementor calls this action with the result of the close check.</param>
public override void CanClose(Action<bool> callback) {
CloseStrategy.Execute(new[] { ActiveItem }, (canClose, items) => callback(canClose));
}
/// <summary>
/// Called when activating.
/// </summary>
protected override void OnActivate() {
ScreenExtensions.TryActivate(ActiveItem);
}
/// <summary>
/// Called when deactivating.
/// </summary>
/// <param name="close">Inidicates whether this instance will be closed.</param>
protected override void OnDeactivate(bool close) {
ScreenExtensions.TryDeactivate(ActiveItem, close);
}
/// <summary>
/// Gets the children.
/// </summary>
/// <returns>The collection of children.</returns>
public override IEnumerable<T> GetChildren() {
return new[] { ActiveItem };
}
}
}