如果您有 .NET 4.5 或更高版本,则可以强制执行 4.5 之前的行为
System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false;
在 .NET 4.5 中,默认情况下不再可以输入分隔符(逗号或点)UpdateSourceTrigger = PropertyChanged
。
你也可以有延迟:
<TextBox Width="100" Margin="10" Text="{Binding DoubleField, UpdateSourceTrigger=PropertyChanged,Delay=500, ValidatesOnDataErrors=True}">
另一种方法是使用 IValueConverter:
public class DoubleToPersistantStringConverter : IValueConverter
{
private string lastConvertBackString;
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (!(value is double)) return null;
var stringValue = lastConvertBackString ?? value.ToString();
lastConvertBackString = null;
return stringValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (!(value is string)) return null;
double result;
if (double.TryParse((string)value, out result))
{
lastConvertBackString = (string)value;
return result;
}
return null;
}
}
检查此链接:
Binding to double field with validation
但我认为最好的方法是你设置UpdateSourceTrigger
为LostFocus
.