@namespace LANCommander.UI.Components @typeparam TItem
@foreach (var item in DataSource) { }
@code { [Parameter] public IEnumerable DataSource { get; set; } [Parameter] public TItem Value { get; set; } = default!; [Parameter] public EventCallback ValueChanged { get; set; } [Parameter] public IEnumerable Values { get; set; } = null!; [Parameter] public EventCallback> ValuesChanged { get; set; } [Parameter] public RenderFragment ChildContent { get; set; } [Parameter] public RenderFragment ItemTemplate { get; set; } [Parameter] public FlexGap Gap { get; set; } = FlexGap.Middle; bool _radio; bool _checkbox; List _selectedValues = new(); protected override void OnInitialized() { if (ValueChanged.HasDelegate) _radio = true; else if (ValuesChanged.HasDelegate) _checkbox = true; if (ChildContent == null && ItemTemplate != null) ChildContent = ItemTemplate; } async Task SelectionChanged(TItem item, bool selected) { if (_radio && selected) { Value = item; await ValueChanged.InvokeAsync(Value); } else if (_checkbox) { _selectedValues.Remove(item); if (selected) _selectedValues.Add(item); Values = _selectedValues; await ValuesChanged.InvokeAsync(Values); } } }