WPF TextBox привязка к числовым или DateTime полям / свойствам - PullRequest
1 голос
/ 05 октября 2011

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

Итак, я хочу, чтобы экземпляр MyRecord.IntegerOnly возвращал числовое значение назад (в базу данных) и вперед (в представление для просмотра / редактирования пользователем).

Так как все в C # приведено к типу, я не вижу никакого значения "подразумеваемого" или "преобразования" из текста в числовое значение.

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

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

1 Ответ

3 голосов
/ 05 октября 2011

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

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

. Отвечает ли это на ваш вопрос или я пропустил суть?

...