@typeparam TBind @if (Visible) { } @code { private TBind _value = default!; [Parameter] [EditorRequired] public required IEnumerable> Elements { get; set; } [Parameter] [EditorRequired] #pragma warning disable BL0007 // While this implementation is suboptimal, this is technically fine. Should be reworked. public required TBind Value { get => _value; set { _value = value; CurrentSelection = Elements.First(element => element.Selection != null && element.Selection.Equals(value)); CurrentIcon = CurrentSelection.Icon; } } #pragma warning restore BL0007 [Parameter] public EventCallback ValueChanged { get; set; } private DropdownElement? CurrentSelection { get; set; } private RenderFragment? CurrentIcon { get; set; } private bool Visible { get; set; } = false; private void UpdateSelected(DropdownElement element) { CurrentSelection = element; CurrentIcon = CurrentSelection.Icon; ValueChanged.InvokeAsync(element.Selection); Visible = false; } private void Toggle() { Visible = !Visible; } protected override void OnInitialized() { UpdateSelected(Elements.FirstOrDefault() ?? throw new InvalidOperationException()); } }