WPF TextBox привязка к числовым или DateTime полям / свойствам

Я видел много ссылок на make TextBox, позволяющих вводить только цифры... нет проблем, я понимаю, как это сделать. Тем не менее, типичная привязка по-прежнему к "Text" (зависимость TextProperty) TextBox, который является строковым значением.

Если вводимое значение принуждается к числовому (скажем... целочисленное или двойное, с плавающей запятой для окончательного хранения), как бы вы имели правильную двустороннюю привязку, чтобы сказать

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# приведено к типу, я не вижу никаких "подразумеваемых" или "преобразованных" значений из текста в числовые.

Аналогично, для ввода данных элемента управления TextBox типа DATE или DATETIME. Нет подразумеваемого / преобразованного значения...

Как я могу / должен продолжить это?

1 ответ

Решение

Я не знаю, не понимаю ли я ваш вопрос, но Binding класс обрабатывает преобразования основных типов для вас. TextBox.Text может только когда-либо показывать строковое / текстовое значение независимо от того, с чем оно связано (int, double, DateTime и т. д.). Binding отвечает за преобразование значений туда и обратно между целью и источником, т. е. Int32 -> String (для цели) и String -> Int32 (назад к источнику).

Вы можете очень легко обозначить TextBox принимать только DateTime значения, зная, что пользователь собирается ввести их как String и Binding преобразует его в ожидаемый DateTime значение. Когда вам нужно преобразовать значения, которые не обрабатываются автоматически Binding, вы должны предоставить свой собственный IValueConverter,

Это отвечает на ваш вопрос, или я пропустил суть?

Другие вопросы по тегам