protected async Task HandleOnChanged(UIChangeEventArgs e) { if (IsMultiple) { // when multiple selection is enabled we need to use javascript to get the list of selected items internalMultiValue = await JSRunner.GetSelectedOptions <TValue>(ElementId); // changed event must be called before validation await SelectedValuesChanged.InvokeAsync(internalMultiValue); ParentValidation?.UpdateInputValue(internalMultiValue); } else { if (Converters.TryChangeType <TValue>(e.Value, out var value)) { internalValue = value; } else { internalValue = default; } // changed event must be called before validation await SelectedValueChanged.InvokeAsync(internalValue); ParentValidation?.UpdateInputValue(internalValue); } }
protected override async Task <ParseValue <IReadOnlyList <TValue> > > ParseValueFromStringAsync(string value) { if (string.IsNullOrEmpty(value)) { return(ParseValue <IReadOnlyList <TValue> > .Empty); } if (Multiple) { // when multiple selection is enabled we need to use javascript to get the list of selected items var multipleValues = await JSRunner.GetSelectedOptions <TValue>(ElementId); return(new ParseValue <IReadOnlyList <TValue> >(true, multipleValues, null)); } else { if (Converters.TryChangeType <TValue>(value, out var result)) { return(new ParseValue <IReadOnlyList <TValue> >(true, new TValue[] { result }, null)); } else { return(ParseValue <IReadOnlyList <TValue> > .Empty); } } }