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