Другой способ - просто запретить значения, которые не являются целыми числами.
Следующая реализация является немного отстойной, и я хотел бы абстрагироваться от нее позже, чтобы сделать ее более пригодной для повторного использования, но я сделал следующее:
в коде, на мой взгляд (я знаю, что это может быть больно, если вы хардкорный mvvm; o))
Я определил следующие функции:
private void NumericOnly(System.Object sender, System.Windows.Input.TextCompositionEventArgs e)
{
e.Handled = IsTextNumeric(e.Text);
}
private static bool IsTextNumeric(string str)
{
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("[^0-9]");
return reg.IsMatch(str);
}
И в представлении XAML каждое текстовое поле, которое должно было принимать только целые числа
был определен так:
<TextBox Padding="2" TextAlignment="Right" PreviewTextInput="NumericOnly" Text="{Binding xxx.yyyy}" MaxLength="1" />
Ключевым атрибутом является PreviewTextInput