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