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