Обнуляемые значения, не имеющие данных, не обновляются в Silverlight XAML - PullRequest
5 голосов
/ 05 января 2011

В моем проекте MVVM у меня есть два текстовых поля, одно из которых привязано к целочисленному полю nullable моего объекта, а другое - к строковому полю. Когда представление загружается, если я ввожу какое-либо значение в текстовое поле, привязанное к свойству строки, я вижу, что его значение обновляется до свойства строки объекта.

Однако проблема возникает, когда я ввел значение в текстовое поле, которое связано с полем обнуляемого целого поля моего объекта. Если это правильное целочисленное значение, то значение обновляется. Если я помещу буквенно-цифровую строку в текстовое поле, привязанное к полю целого числа, которое может принимать значения NULL, или если я просто оставлю это поле пустым, то поле целого числа, которое может содержать NULL, моего объекта не будет обновлено. Это все еще сохраняет то, что было установлено ранее.

Например. если я введу число «7» в числовое текстовое поле, оно будет обновлено до 7. Теперь, если я изменю его с «7» на «7a» или «a7» или «asd», или оставлю его пустым. Значение по-прежнему остается равным 7, что было более ранним значением.

Любой способ обойти эту проблему, кроме изменения типа Nullable?

Спасибо за ваше время ...

Ответы [ 2 ]

5 голосов
/ 03 апреля 2012

Если ваше текстовое поле было замаскировано для приема только числовых значений, вы также можете использовать:

Text = {Binding PropertyName, Mode = TwoWay, TargetNullValue = ''}

Это правильно установит связанный int? свойство null при обнаружении пустой строки.

2 голосов
/ 05 января 2011

Проблема здесь в том, что когда вы вводите empty string или alphabet values в вашем TextBox, который связан с Nullable<Int32>, значение nullable int не устанавливается.

В этом случае привязка завершается неудачно при преобразовании строкового значения в целочисленное значение. И после сбоя он не устанавливает значение в ноль, а просто оставляет старое значение как есть. Вы можете убедиться, что это происходит путем отладки.

Что вы можете сделать, это решить, создать конвертер. Этот конвертер пытается преобразовать строковое значение в int, а в случае неудачи возвращает значение null, которое будет установлено в значение null int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...