我有一个 WPF 应用程序,可以在模型中以摄氏温度保存用户定义的温度值。这些是在带有数字掩码的文本框中输入的,这些掩码绑定到 VM 上的整数属性。
我想让用户能够输入摄氏或华氏温度。这是由一个简单的用户设置控制的。因此,该值也必须以正确的单位显示在文本框中。
我试过使用转换器,但没有取得太大的成功。我可以让转换器工作,但不是我想要的。
当 UserControl 加载时,值可能需要从摄氏度转换为华氏度。我能够使用此转换器使其正常工作:
public class CelciusToFahrenheit : IValueConverter
{
/// <summary>
/// Converts from Celsius to Fahrenheit if required by user settings
/// </summary>
/// <param name="value"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
double returnValue = System.Convert.ToInt32(value);
if (Settings.Default.FahrenheitFlag)
{
returnValue = (returnValue * 1.8) + 32;
}
return Math.Floor(returnValue);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
int returnValue = System.Convert.ToInt32(value);
if (Settings.Default.FahrenheitFlag)
{
returnValue = System.Convert.ToInt32((returnValue - 32) / 1.8);
}
return returnValue;
}
}
这里的问题是,这也会在用户输入值时转换该值。这意味着如果您尝试输入 66,由于舍入错误,最终会得到 77。
以前有人这样做过吗?我敢肯定这是可能的,但我一直在反对这个问题有一段时间了。
我不相信这是您应该进行转换的地方。您的模型具有温度属性,正如您所说,它始终存储为摄氏度。这就是它应该保持的方式。
这里不需要值转换器,但可能希望将此计算移动到您的 ViewModel 中,并让get
和set
属性根据用户设置确定必须进行的转换,并一起避免使用值转换器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句