using System.Collections.Generic; using System.Linq; using AntDesign.TableModels; using Microsoft.AspNetCore.Components; namespace AntDesign { public partial class Table : ITable { [Parameter] public IEnumerable SelectedRows { get => _selectedRows; set { _dataSourceCache ??= new Dictionary>(); if (value != null && value.Any()) { _dataSourceCache.Values.ForEach(x => x.Selected = x.Data.IsIn(value)); } else if (_selectedRows != null) { _dataSourceCache.Values.ForEach(x => x.Selected = false); } _selectedRows = value; StateHasChanged(); } } [Parameter] public EventCallback> SelectedRowsChanged { get; set; } private ISelectionColumn _selection; private IEnumerable _selectedRows; ISelectionColumn ITable.Selection { get => _selection; set => _selection = value; } public void SetSelection(string[] keys) { _selection.SetSelection(keys); } void ITable.SelectionChanged() => SelectionChanged(); private void SelectionChanged() { foreach (var selection in _selection.RowSelections) { _dataSourceCache[selection.RowData.CacheKey].Selected = selection.Checked; } if (SelectedRowsChanged.HasDelegate) { _selectedRows = _dataSourceCache.Values.Where(x => x.Selected).Select(x => x.Data); SelectedRowsChanged.InvokeAsync(_selectedRows); } } } }