我开发工程应用程序,因此不断处理double
数字。作为一个新手,由于ComboBoxes和其他控件更喜欢字符串,我的模型是基于字符串的:
Diameter = "0.523";
我在谷歌上搜索过,有一些关于转换器的初步信息(令人困惑、矛盾):可能需要统一的解释。
IValueConverter
接口建立了Convert()
和ConvertBack()
对,但两者的方向是什么?转换器是XAML绑定到TextBox
的,而我的模型处理的是double
。Convert()
的半动作是从TextBox
中退出还是进入?
我的目标是在键入非法数字时形成的红色矩形附近添加一条警告:"您键入的浮点数字格式不正确"。
我写了两个转换器类:DoubleToString
和StringToDouble
。不确定哪一个是合适的(另外,两者都崩溃了)。
大多数时候,人们只在工作中使用Convert方法。ConvertBack用于双方都需要转换的情况。XAML到模型,反之亦然
这是双人间的样品。您可以根据需要进一步格式化该值。
[ValueConversion(typeof(double) ,typeof(string))]
public class DoubleConverter : IValueConverter
{
public object Convert(object value ,Type targetType ,object parameter ,CultureInfo culture)
{
double doubleType = (double)value;
return doubleType.ToString();
}
public object ConvertBack(object value ,Type targetType ,object parameter ,CultureInfo culture)
{
string strValue = value as string;
double resultDouble;
if ( double.TryParse(strValue ,out resultDouble) )
{
return resultDouble;
}
return DependencyProperty.UnsetValue;
}
}
你说你在你的模特身上牵线搭桥。这意味着您根本不需要转换器。但是,您最好在模型中放置替身,并对其进行适当转换。
此外,如果您只需要单向转换(从模型到控件),则根本不需要转换器。例如,请参见此处。