ConductorBaseWithActiveItem.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. namespace Caliburn.Micro.Core {
  2. /// <summary>
  3. /// A base class for various implementations of <see cref="IConductor"/> that maintain an active item.
  4. /// </summary>
  5. /// <typeparam name="T">The type that is being conducted.</typeparam>
  6. public abstract class ConductorBaseWithActiveItem<T> : ConductorBase<T>, IConductActiveItem where T: class {
  7. T activeItem;
  8. /// <summary>
  9. /// The currently active item.
  10. /// </summary>
  11. public T ActiveItem {
  12. get { return activeItem; }
  13. set { ActivateItem(value); }
  14. }
  15. /// <summary>
  16. /// The currently active item.
  17. /// </summary>
  18. /// <value></value>
  19. object IHaveActiveItem.ActiveItem {
  20. get { return ActiveItem; }
  21. set { ActiveItem = (T)value; }
  22. }
  23. /// <summary>
  24. /// Changes the active item.
  25. /// </summary>
  26. /// <param name="newItem">The new item to activate.</param>
  27. /// <param name="closePrevious">Indicates whether or not to close the previous active item.</param>
  28. protected virtual void ChangeActiveItem(T newItem, bool closePrevious) {
  29. ScreenExtensions.TryDeactivate(activeItem, closePrevious);
  30. newItem = EnsureItem(newItem);
  31. if(IsActive)
  32. ScreenExtensions.TryActivate(newItem);
  33. activeItem = newItem;
  34. NotifyOfPropertyChange("ActiveItem");
  35. OnActivationProcessed(activeItem, true);
  36. }
  37. }
  38. }