* 重构多页面框架传值

This commit is contained in:
Sunny 2022-08-30 10:59:54 +08:00
parent 347e919de8
commit ec7d24e8e0
3 changed files with 50 additions and 45 deletions

View File

@ -2140,6 +2140,7 @@ namespace Sunny.UI
}
page.Frame = this;
page.OnFrameDealPageParams += Page_OnFrameDealPageParams;
MainTabControl?.AddPage(page);
return page;
}
@ -2196,27 +2197,16 @@ namespace Sunny.UI
public bool ExistPage(Guid pageGuid) => GetPage(pageGuid) != null;
public bool SendParamToPage(int pageIndex, UIPageParamsArgs e)
{
SetDefaultTabControl();
UIPage page = GetPage(pageIndex);
page?.DealReceiveParams(e);
return e.Handled;
}
public bool SendParamToPage(Guid pageGuid, UIPageParamsArgs e)
{
SetDefaultTabControl();
UIPage page = GetPage(pageGuid);
page?.DealReceiveParams(e);
return e.Handled;
}
public bool SendParamToPage(int pageIndex, object value)
{
SetDefaultTabControl();
UIPage page = GetPage(pageIndex);
var args = new UIPageParamsArgs(null, value, UIParamSourceType.Frame);
if (page == null)
{
throw new NullReferenceException("未能查找到页面的索引为: " + pageIndex);
}
var args = new UIPageParamsArgs(null, page, value);
page?.DealReceiveParams(args);
return args.Handled;
}
@ -2225,14 +2215,27 @@ namespace Sunny.UI
{
SetDefaultTabControl();
UIPage page = GetPage(pageGuid);
var args = new UIPageParamsArgs(null, value, UIParamSourceType.Frame);
if (page == null)
{
throw new NullReferenceException("未能查找到页面的索引为: " + pageGuid);
}
var args = new UIPageParamsArgs(null, page, value);
page?.DealReceiveParams(args);
return args.Handled;
}
public virtual void DealReceiveParams(UIPageParamsArgs e)
private void Page_OnFrameDealPageParams(object sender, UIPageParamsArgs e)
{
ReceiveParams?.Invoke(this, e);
if (e == null) return;
if (e.DestPage == null)
{
ReceiveParams?.Invoke(this, e);
}
else
{
e.DestPage?.DealReceiveParams(e);
}
}
public event OnReceiveParams ReceiveParams;

View File

@ -52,12 +52,6 @@ namespace Sunny.UI
bool ExistPage(Guid pageGuid);
bool SendParamToPage(int pageIndex, UIPageParamsArgs e);
bool SendParamToPage(Guid pageGuid, UIPageParamsArgs e);
void DealReceiveParams(UIPageParamsArgs e);
void Init();
void Final();
@ -75,12 +69,12 @@ namespace Sunny.UI
public class UIPageParamsArgs : EventArgs
{
public UIPage Page { get; set; }
public UIPage SourcePage { get; set; }
public UIPage DestPage { get; set; }
public object Value { get; set; }
public UIParamSourceType SourceType { get; set; }
public bool Handled { get; set; } = false;
public UIPageParamsArgs()
@ -88,19 +82,13 @@ namespace Sunny.UI
}
public UIPageParamsArgs(UIPage page, object value, UIParamSourceType sourceType)
public UIPageParamsArgs(UIPage sourcePage, UIPage destPage, object value)
{
Page = page;
SourcePage = sourcePage;
DestPage = destPage;
Value = value;
SourceType = sourceType;
}
}
public enum UIParamSourceType
{
Frame,
Page
}
public delegate void OnReceiveParams(object sender, UIPageParamsArgs e);
}

View File

@ -832,28 +832,42 @@ namespace Sunny.UI
get; set;
}
internal event OnReceiveParams OnFrameDealPageParams;
public bool SendParamToFrame(object value)
{
var args = new UIPageParamsArgs(this, value, UIParamSourceType.Page);
Frame?.DealReceiveParams(args);
var args = new UIPageParamsArgs(this, null, value);
OnFrameDealPageParams?.Invoke(this, args);
return args.Handled;
}
public bool SendParamToPage(int pageIndex, object value)
{
var args = new UIPageParamsArgs(this, value, UIParamSourceType.Page);
Frame?.SendParamToPage(pageIndex, args);
UIPage page = Frame.GetPage(pageIndex);
if (page == null)
{
throw new NullReferenceException("未能查找到页面的索引为: " + pageIndex);
}
var args = new UIPageParamsArgs(this, page, value);
OnFrameDealPageParams?.Invoke(this, args);
return args.Handled;
}
public bool SendParamToPage(Guid pageGuid, object value)
{
var args = new UIPageParamsArgs(this, value, UIParamSourceType.Page);
Frame?.SendParamToPage(pageGuid, args);
UIPage page = Frame.GetPage(pageGuid);
if (page == null)
{
throw new NullReferenceException("未能查找到页面的索引为: " + pageGuid);
}
var args = new UIPageParamsArgs(this, page, value);
OnFrameDealPageParams?.Invoke(this, args);
return args.Handled;
}
public virtual void DealReceiveParams(UIPageParamsArgs e)
internal void DealReceiveParams(UIPageParamsArgs e)
{
ReceiveParams?.Invoke(this, e);
}