重写数据绑定转换器(字符转整数,字符转实数)
使用sqlite数据库过程中,不管数据库中定义的是什么类型都能够转换过去,这样会对后续程序编写造成困难。数据输入、修改通过textbox的text binding类中的对应属性实现,更新数据库时将类中对应属性的值update至数据库中。因此通过重写textbox来保证,输入数据的类型符合要求。
1.新建类,继承IValueConverter
public class StringToDoubleConverter : IValueConverter
{
/// <summary>
/// 数据库的值转换到textbox的text
/// </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)
{
return value.ToString();
}
/// <summary>
/// textbox转为到类double对象
/// </summary>
/// <param name="value">textbox.text</param>
/// <param name="targetType">int</param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
try
{
double c = ((IConvertible)value).ToDouble(null);
if (c >= 0)
{
return c;
}
else
{
MessageBox.Show("请输入正实数");
return 0;
}
}
catch (Exception)
{
MessageBox.Show("输入有误,请输入正实数");
return "0";
}
}
}
2.xml文件中引用资源
<Window.Resources>
<local:StringToIntConverter x:Key="s2i"/>
<local:StringToDoubleConverter x:Key="s2d"/>
</Window.Resources>
<TextBox Text="{Binding ShipLength , Converter={StaticResource s2d}}" ></TextBox>
3.功能实现
textbox中输入其他类型的字符串,无法转换到实数时会返回0,且弹出提示窗口。数值小于0时同样如此。