Hier ist mein aktueller Code. Der Text wird erst dann mit Kommaformatierung angezeigt, wenn der Fokus verloren geht, und nicht bei jedem Tastendruck:
Code: Select all
@using System.Globalization
@code
{
[Parameter] public decimal? Value { get; set; }
[Parameter] public EventCallback ValueChanged { get; set; }
[Parameter] public string? Placeholder { get; set; }
[Parameter] public Variant Variant { get; set; } = Variant.Outlined;
[Parameter] public string Class { get; set; } = string.Empty;
private MudTextField _input = default!;
private string _displayValue = string.Empty;
protected override void OnInitialized()
{
if (Value.HasValue)
{
_displayValue = FormatNumber(Value.Value);
}
}
private void OnTextChanged(string newValue)
{
var raw = newValue.Replace(",", "");
if (decimal.TryParse(raw, out var parsed))
{
Value = parsed;
ValueChanged.InvokeAsync(parsed);
_displayValue = FormatNumber(parsed);
}
else
{
_displayValue = newValue;
}
}
private async Task OnInputFocus(FocusEventArgs args)
{
await _input.SelectAsync();
}
private string FormatNumber(decimal number) => number.ToString("###,##0.##", CultureInfo.InvariantCulture);
}