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

XFEExtension.NetCore.WinUIHelper

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

公开
关注 0 Fork 0 Star 0
UTF-8
using CommunityToolkit.Mvvm.ComponentModel;
using System.Collections.ObjectModel;
using XFEExtension.NetCore.DelegateExtension;
using XFEExtension.NetCore.WinUIHelper.Interface;
using XFEExtension.NetCore.WinUIHelper.Utilities.Helper;

namespace XFEExtension.NetCore.WinUIHelper.Implements;

public abstract partial class SearchableViewModelBase<T, F> : ServiceBaseViewModelBase<F>, ISearchableViewModel<T> where T : class
{
    [ObservableProperty]
    private T? selectedItem;
    [ObservableProperty]
    private string searchText = string.Empty;
    /// <summary>
    /// 文本内容改变时自动搜索
    /// </summary>
    public bool AutoSearch { get; set; } = true;
    /// <summary>
    /// 前端展示视图列表
    /// </summary>
    public ObservableCollection<T> ViewList { get; set; } = [];
    /// <summary>
    /// 后端模型列表
    /// </summary>
    public List<T> ModelList { get; set; } = [];
    /// <summary>
    /// 搜索预测
    /// </summary>
    public Func<string, T, bool> SearchPredicate { get; set; } = (text, item) => ObjectHelper.Search(item, text);

    /// <summary>
    /// 搜索文本改变事件
    /// </summary>
    public event XFEEventHandler<string>? SearchTextChanged;

    partial void OnSearchTextChanged(string value)
    {
        SearchTextChanged?.Invoke(value);
        if (AutoSearch)
            Search();
    }

    protected virtual void Add() { }
    protected virtual async Task AddAsync() => await Task.CompletedTask;
    protected virtual void Remove() { }
    protected virtual async Task RemoveAsync() => await Task.CompletedTask;
    protected virtual void Edit() { }
    protected virtual async Task EditAsync() => await Task.CompletedTask;
    protected void Search() => (this as ISearchableViewModel<T>).SearchAndLoadToList();
}