Conductor.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. namespace Caliburn.Micro.Core {
  2. using System;
  3. using System.Collections.Generic;
  4. /// <summary>
  5. /// An implementation of <see cref="IConductor"/> that holds on to and activates only one item at a time.
  6. /// </summary>
  7. public partial class Conductor<T> : ConductorBaseWithActiveItem<T> where T: class {
  8. /// <summary>
  9. /// Activates the specified item.
  10. /// </summary>
  11. /// <param name="item">The item to activate.</param>
  12. public override void ActivateItem(T item) {
  13. if(item != null && item.Equals(ActiveItem)) {
  14. if (IsActive) {
  15. ScreenExtensions.TryActivate(item);
  16. OnActivationProcessed(item, true);
  17. }
  18. return;
  19. }
  20. CloseStrategy.Execute(new[] { ActiveItem }, (canClose, items) => {
  21. if(canClose)
  22. ChangeActiveItem(item, true);
  23. else OnActivationProcessed(item, false);
  24. });
  25. }
  26. /// <summary>
  27. /// Deactivates the specified item.
  28. /// </summary>
  29. /// <param name="item">The item to close.</param>
  30. /// <param name="close">Indicates whether or not to close the item after deactivating it.</param>
  31. public override void DeactivateItem(T item, bool close) {
  32. if (item == null || !item.Equals(ActiveItem)) {
  33. return;
  34. }
  35. CloseStrategy.Execute(new[] { ActiveItem }, (canClose, items) => {
  36. if(canClose)
  37. ChangeActiveItem(default(T), close);
  38. });
  39. }
  40. /// <summary>
  41. /// Called to check whether or not this instance can close.
  42. /// </summary>
  43. /// <param name="callback">The implementor calls this action with the result of the close check.</param>
  44. public override void CanClose(Action<bool> callback) {
  45. CloseStrategy.Execute(new[] { ActiveItem }, (canClose, items) => callback(canClose));
  46. }
  47. /// <summary>
  48. /// Called when activating.
  49. /// </summary>
  50. protected override void OnActivate() {
  51. ScreenExtensions.TryActivate(ActiveItem);
  52. }
  53. /// <summary>
  54. /// Called when deactivating.
  55. /// </summary>
  56. /// <param name="close">Inidicates whether this instance will be closed.</param>
  57. protected override void OnDeactivate(bool close) {
  58. ScreenExtensions.TryDeactivate(ActiveItem, close);
  59. }
  60. /// <summary>
  61. /// Gets the children.
  62. /// </summary>
  63. /// <returns>The collection of children.</returns>
  64. public override IEnumerable<T> GetChildren() {
  65. return new[] { ActiveItem };
  66. }
  67. }
  68. }