WPF TextBox绑定到数字或DateTime字段/属性

时间:2011-10-05 14:46:37

标签: c# wpf dependencies bindingsource

我见过很多引用make的TextBox只允许数字输入......没问题,我明白怎么做。但是,典型的绑定仍然是TextBox的“Text”(TextProperty依赖项),它是一个字符串值。

如果输入的值被强制为数字的值(比如...整数或双精度,浮点数用于最终存储),那么你将如何使用正确的双向绑定来说明

TextBox.MyInteger
TextBox.MyDouble
TextBox.MyFloat
TextBox.MyDateTime

所以,如果我有一个班级(例如)

public class MyRecord
{
   public int IntegerOnly { get; set; }
   public double DoubleOnly { get; set; }
   public DateTime SomeDate { get; set; }
}

我在一个窗口上有一个TextBox用于输入,适用的行为/过滤器只允许将数字(和小数点)值输入到TextBox中,用户的显示是通过显示的“Text”值。

所以,我想要一个“MyRecord.IntegerOnly”的实例来获取推回(到数据库)和向前(到视图供用户查看/编辑)的数值。

由于C#中的所有内容都是类型转换的,因此我没有看到从文本到数字的任何“隐含”或“转换”值。

类似地,用于进行DATE或DATETIME TextBox控件的数据输入。没有暗示/转换价值......

我该怎样/应该继续这个?

1 个答案:

答案 0 :(得分:3)

我不知道我是否不理解您的问题,但Binding类会为您处理基本类型的转换。 TextBox.Text只能显示字符串/文本值,无论它绑定到什么(int,double,DateTime等)。 Binding负责在目标和来源之间来回转换值,即Int32 -> String(定位)和String -> Int32(返回来源)。

您可以非常轻松地指定TextBox仅接受DateTime值,因为他们知道用户要将其作为String输入,Binding会将其转换为DateTime预期的Binding值。当您需要转换IValueConverter未自动处理的值时,您需要提供自己的{{1}}。

这是回答你的问题还是我错过了这一点?