Очистка текстового поля не устанавливает привязку к нулю - PullRequest
6 голосов
/ 14 января 2010

У меня проблемы с установкой пустого TextBox в NULL в пустом поле БД.

XAML

<y:TextBox Text="{Binding Year1Cost, Mode=TwoWay,  
     UpdateSourceTrigger=PropertyChanged,   
     NotifyOnValidationError=True,   
     ValidatesOnDataErrors=True,   
     ValidatesOnExceptions=True,  
     StringFormat=\{0:c\}}" Grid.Row="3" Grid.Column="1" />

Когда я ввожу любое значение в него, привязка в порядке, и введенное значение передается
Когда я оставляю пустое значение, передается нулевое значение
Если я удаляю значение из TextBox, переданное значение является исходным значением Textbox, и пользовательский интерфейс не уведомляется об изменении Grrrrrrrrrrrrrrrr

Я потратил много времени на проверку вариантов ничего, кроме размещения кода за OnTextChanged для каждого обнуляемого поля. Я не вижу эффективности в этом.

Заранее спасибо:

пс. Посмотрел на TargetNullValue безуспешно

Visual Studio 2008 - SP1 - .Net 3.5

Ответы [ 3 ]

14 голосов
/ 14 января 2010

Установите для свойства TargetNullValue привязки значение String.Empty:

<TextBox Text="{Binding TargetNullValue={x:Static sys:String.Empty}}"/>

Я попробовал, и это работает для меня.

И если я не ошибаюсь (пожалуйста, простите меня, если я есть), вы должны установить свойство StringFormat так:

StringFormat={}{0:C}

Возможно, это даже причина вашего исключения.

4 голосов
/ 14 января 2010

Рассмотрите возможность использования преобразователя значений . Вы должны иметь возможность реализовать метод ConvertBack для перевода пустых строк в нули.

3 голосов
/ 17 июня 2011

У меня работает только конвертер: Вот ссылка

public class NullableConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
       return value == null ? string.Empty : String.Format(culture, "{0}", value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
       return string.IsNullOrEmpty(String.Format(culture, "{0}", value)) ? null : value;
    }
}
...