namespace Yw.WinFrmUI { /// /// 步骤管理器 /// public class WizardManager : IWizardManager where T : class, new() { #region 事件 /// /// 选择页面改变事件 /// public event Action, int> SelectedPageChangedEvent; /// /// 选择页面状态改变事件 /// public event Action, int> SelectedPageStateChangedEvent; #endregion #region 初始化 /// /// 初始化管理器 /// /// 步骤页面数组 public virtual void InitialManager(IWizardPage[] pages) { _pages = pages; if (_pages != null && _pages.Length > 0) { _isInitialize = true; foreach (var page in _pages) { page.PageStateChangedEvent += () => { if (page == this.SelectedPage) { TriggerSelectedPageStateChangedEvent(); } }; } _selectedIndex = 0; this.SelectedPage.InitialPage(_vm); TriggerSelectedPageChangedEvent(); } else { _isInitialize = false; } } /// /// 步骤页面数组 /// protected IWizardPage[] _pages; /// /// 是否初始化 /// protected bool _isInitialize = false; /// /// vm对象 /// protected readonly T _vm = new(); #endregion #region 选择 /// /// 选择页面 /// public virtual IWizardPage SelectedPage { get { if (_isInitialize) { return _pages[this.SelectedIndex]; } return default; } } /// /// 选择索引 /// public virtual int SelectedIndex { get { return _selectedIndex; } } /// /// 选择索引 /// protected int _selectedIndex; #endregion #region 操作 /// /// 上一步 /// public virtual bool Prev() { if (!_isInitialize) { return false; } if (!this.SelectedPage.AllowPrev) { return false; } if (this.SelectedPage.CanPrev()) { --_selectedIndex; this.SelectedPage.InitialPage(_vm); TriggerSelectedPageChangedEvent(); return true; } return false; } /// /// 下一步 /// public virtual bool Next() { if (!_isInitialize) { return false; } if (!this.SelectedPage.AllowNext) { return false; } if (this.SelectedPage.CanNext()) { ++_selectedIndex; this.SelectedPage.InitialPage(_vm); TriggerSelectedPageChangedEvent(); return true; } return false; } /// /// 取消 /// public virtual bool Cancel() { if (!_isInitialize) { return false; } if (!this.SelectedPage.AllowCancel) { return false; } if (this.SelectedPage.CanCancel()) { return true; } return false; } /// /// 完成 /// public virtual bool Complete() { if (!_isInitialize) { return false; } if (!this.SelectedPage.AllowComplete) { return false; } if (this.SelectedPage.CanComplete()) { return true; } return false; } #endregion #region 方法 /// /// 触发选择页面改变事件 /// protected void TriggerSelectedPageChangedEvent() { this.SelectedPageChangedEvent?.Invoke(this.SelectedPage, this.SelectedIndex); } /// /// 触发选择页面状态改变事件 /// protected void TriggerSelectedPageStateChangedEvent() { this.SelectedPageStateChangedEvent?.Invoke(this.SelectedPage, this.SelectedIndex); } #endregion } }