XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension.NetCore.WinUIHelper

【DLL】WinUI的各种工具类,帮助开发者快速构建一个模块化的WinUI项目

公开
关注 0 Fork 0 Star 0
UTF-8
using XFEExtension.NetCore.WinUIHelper.Interface.Services;
using XFEExtension.NetCore.WinUIHelper.Utilities.Helper;
using System.Diagnostics.CodeAnalysis;

namespace XFEExtension.NetCore.WinUIHelper.Implements.Services;

class NavigationParameterService<T> : INavigationParameterService<T>
{
    private bool sameAsLast;
    private T? currentParameter;
    private Page? _page;
    public T? Parameter
    {
        get => _page is not null ? NavigationHelper.GetParameter(_page) is T t ? t : default : default;
        set
        {
            if (_page is not null)
                NavigationHelper.SetParameter(_page, value);
        }
    }

    public bool SameAsLast => sameAsLast;

    public Page? CurrentPage => _page;

    public event EventHandler<T?>? ParameterChange;

    [MemberNotNull(nameof(_page))]
    public void Initialize(Page page) => _page = page;

    public void OnParameterChange(object? parameter)
    {
        if (parameter is T parameterValue)
            Parameter = parameterValue;
        else
            Parameter = default;
        sameAsLast = Parameter is null ? currentParameter is null : Parameter.Equals(currentParameter);
        if (!sameAsLast)
            currentParameter = Parameter;
        ParameterChange?.Invoke(this, Parameter);
    }
}