使用 WPF 转换器处理瞬态值
本文关键字:处理 WPF 转换器 使用 | 更新日期: 2023-09-27 18:36:28
我有一个转换器,用来对数字进行舍入。它看起来像这样:
public class RoundNumberConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!value.IsNumber())
return DependencyProperty.UnsetValue;
return Math.Round((float)value, 2).ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
float number;
if (float.TryParse(value.ToString(), out number))
return number;
return DependencyProperty.UnsetValue;
}
}
这工作正常,直到我将UpdateTrigger切换到PropertyChanged。现在,当我尝试输入值 1.23 时,1 个字符按预期工作,但当我输入句点时,1。转换为 1.0,并且由于值未更改,因此不会在我的视图模型中设置它。此外,1.在文本框中显示时转换为字符串 1,因此用户无法添加句点。有没有人有一个简单的方法来解决这个问题?
我通过这样做修复了它:
public class RoundNumberConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!value.IsNumber())
return DependencyProperty.UnsetValue;
return Math.Round((float)value, 2).ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return DependencyProperty.UnsetValue;
var svalue = value.ToString();
if (svalue.EndsWith(".")) // Prevents problems when using this with UpdateTrigger.PropertyChanged and user enters 1.
return DependencyProperty.UnsetValue;
float number;
if (!float.TryParse(svalue, out number))
return DependencyProperty.UnsetValue;
return number;
}
}