Проверка PoCo в Textbox для целочисленного типа данных - PullRequest
0 голосов
/ 06 февраля 2012

Я разрабатываю приложение WPF, в котором я использую текстовое поле, связанное с полем int моей сущности POCO, и когда я очищаю текстовое поле, я хочу, чтобы мой текущий объект был недействительным, поскольку это поле, не допускающее обнуления. *

Но дело в том, что когда я очищаю свое текстовое поле, оно преобразуется в string.empty, для которого не может быть установлено значение int, поэтому мое поле int никогда не обновляется, и мой объект остается действительным.

Пожалуйста, предложите какое-то логическое решение для этого.

Ответы [ 4 ]

0 голосов
/ 06 февраля 2012

По умолчанию WPF должен отображать ErrorTemplate при возникновении ошибки проверки, включая ошибки проверки, вызванные неправильными приведениями, такими как попытка сохранить строковое поле в int.ErrorTemplate по умолчанию для TextBox - красная граница, и для большинства пользователей это означает, что что-то неверно и изменения не будут сохранены.

Если вы хотите чего-то большего, выможет попытаться использовать IValueConverter в вашей привязке, которая попытается преобразовать значение в int и вернет 0 (или какое-то недопустимое значение), если произойдет сбой, так что ваш объект будет обновлен чем-то, независимо от того, что вводит пользователь.

0 голосов
/ 06 февраля 2012

На мой взгляд, вы не сможете установить пустое значение для элемента управления int. Возможно, вы могли бы использовать элемент управления IntegerUpDown в Extended WPF Toolkit , который позволяет предоставлять водяной знак для отображения текста вместо значения NULL или устанавливать значение по умолчанию, которое может быть 0 .

У него также есть кнопки, которые можно при необходимости скрыть.

0 голосов
/ 06 февраля 2012

Я скопировал свой ответ из здесь . Я надеюсь, что это вам тоже поможет.

если у вашей модели представления есть свойство типа int, то ваша привязка просто работает если ваш взгляд получил ввод, который можно преобразовать в int. иначе Ваша модель представления никогда не будет проинформирована. Есть 2 способа:

сначала: вы убедитесь, что ваш вид может принимать числовой ввод (с ваше числовое текстовое поле) и свойство viewmodel может быть int.

или второе: ваш тип свойства viewmodel - typeof string, и вы используете IDataErrorInfo, чтобы сообщить представлению, когда ввод не является числовым.

0 голосов
/ 06 февраля 2012

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

...