添加了过滤器用法

This commit is contained in:
2025-07-28 20:09:54 +08:00
parent 0093693d72
commit 717a3e5d6f
@@ -165,6 +165,17 @@ namespace XericUI.FlipPage
#endregion
/// <summary>
/// 是否通过过滤器
/// </summary>
/// <param name="manager">传入管理器,建议将过滤器放在管理器中,然后具体的通过规则写在这里,根据对象的不同,通过的规则都不一样。</param>
/// <returns></returns>
public virtual bool PassFilter(XericFlipPageIndexVesselBase manager)
{
return true;
}
public override string ToString()
{
return $"[{nameof(ItemInfo)}] ({name})";
@@ -234,7 +245,8 @@ namespace XericUI.FlipPage
private List<ItemInfo> _backupItemInfos;
public List<ItemInfo> BackItemInfos => _backupItemInfos;
#endregion
#region 生命周期
@@ -599,6 +611,23 @@ namespace XericUI.FlipPage
return itemIndex / DefaultItemCountPerPage;
}
/// <summary>
/// 获取备份所有数据项目
/// </summary>
/// <param name="backupAtLocal">是否在本地备份?(默认启用,启用后返回的枚举器内容来自备份数据,允许推迟处理过程,但也会覆盖上一次备份)</param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public IEnumerable<T> BackupItemsFormPages<T>(bool backupAtLocal = true)
where T : ItemInfo
{
if (backupAtLocal)
{
BackupItemsFormPages();
return _backupItemInfos.OfType<T>();
}
return AllItemInfos.OfType<T>();
}
/// <summary>
/// 备份所有数据项目
/// </summary>
@@ -609,26 +638,41 @@ namespace XericUI.FlipPage
}
/// <summary>
/// 保存所有数据项目(强制重排操作)
/// 强制重排所有数据项目(从备份中恢复数据)
/// </summary>
public void RestoreItemsToPages(List<ItemInfo> overrideDatas = null)
public void RestoreItemsToPages()
{
var od = overrideDatas ?? _backupItemInfos;
if (od == null)
RestoreItemsToPages(_backupItemInfos);
}
/// <summary>
/// 强制重排所有数据项目(从备份中通过过滤器恢复数据)
/// </summary>
public void RestoreItemsByFilterToPages()
{
RestoreItemsToPages(_backupItemInfos.Where(a => a.PassFilter(this)).ToList());
}
/// <summary>
/// 强制重排所有数据项目(从给定备份中恢复数据)
/// </summary>
public void RestoreItemsToPages<T>(List<T> overrideDatas)
where T : ItemInfo
{
if (overrideDatas == null || overrideDatas.Count <= 0)
{
Debug.LogError($"重排数据需要一个有效的数据对象列表", this);
Debug.LogError($"重排数据需要一个有效的数据对象列表,如果希望将数据重置为空,可以使用Clear方法,而不是重排操作。", this);
return;
}
if (ItemIndex2PageIndex(od.Count - 1) > _pageInfos.Count)
if (ItemIndex2PageIndex(overrideDatas.Count - 1) > _pageInfos.Count)
{
Debug.LogError($"重排数据时,原有数据数量({od.Count})超出现有面板数量({_pageInfos.Count}),已拒绝重排", this);
Debug.LogError($"重排数据时,原有数据数量({overrideDatas.Count})超出现有面板数量({_pageInfos.Count}),已拒绝重排", this);
return;
}
// 执行重排
var page = _pageInfos.First;
page.Value.itemInfos.Clear();
var pageIndex = 0;
for (int i = 0; i < od.Count; i++)
for (int i = 0; i < overrideDatas.Count; i++)
{
var newPageIndex = ItemIndex2PageIndex(i);
if (pageIndex != newPageIndex)
@@ -642,7 +686,7 @@ namespace XericUI.FlipPage
}
page.Value.itemInfos.Clear();
}
page.Value.itemInfos.Add(od[i]);
page.Value.itemInfos.Add(overrideDatas[i]);
}
}