Hallo,
ich habe ein paar Textboxen für die Eingabe von Decimal Werte z.B. 3, 4 oder mit Decimal Punkt z.B. 3.67 (immer zwei Stellen nach em Komma).
wie kann ich am besten realisieren, dass nur gültige Werte eingegeben werden bzw validieren?
ist es eine gute Lösung das eingegebene Komma , durch Punkt . zu ersetzen?
ich habe versucht StringFormat zu benutzen aber 1,1 wird als 11 interpretiert
<TextBox Grid.Row="4" Grid.Column="1"
Text="{Binding Path=PrintingData.Start, StringFormat=0{0.0}, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
Height="26" HorizontalAlignment="Right" Name="textBoxStart" VerticalAlignment="Top" Width="65"
PreviewTextInput="textBoxStart_PreviewTextInput" Margin="0,0,47,0" />
public decimal Start
{
get { return _Start; }
set
{
if (_Start != value)
{
_Start = value;
// update end value for non marker
if (_IsMarker == false)
End = _Start + _Length;
else
End = _Start + _Length - 1;
OnPropertyChanged("Start");
}
}
}
private string ValidateStart()
{
// avoid problem because of decimal point . or , (german or englisch system)
var nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = ".";
var p = Start.ToString(nfi);
if (Start < 0) return "Start can not be a negative value!";
if (_IsMarker == false)
{
// checked Format xxxxxxx.x
var regex = new Regex(@"^\d+(\.\d{1})?$");
if (regex.IsMatch(p) == false)
return "Start has wrong format!";
return null;
}
....
}
In WPF und mit MVVM macht man das üblicherweise mit ValidationRules.
Siehe Binding Validation in den Docs: How to: Implement Binding Validation - WPF .NET Framework
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code