2010-01-14 1 views
6

У меня возникли трудности с установкой пустого текстового поля на null в поле с возможностью 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 переданное значение является исходным значением текстового поля, и пользовательский интерфейс не уведомлен об изменении. Grrrrrrrrrrrrrrrr

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

Заранее благодарен:

пс. Посмотрели на TargetNullValue, чтобы не увенчались успехом

Visual Studio 2008 SP1 - - .Net 3.5

ответ

3

Рассмотрим с помощью value converter. Вы должны иметь возможность реализовать метод ConvertBack для перевода пустых строк в нули.

+0

Если бы преобразовать в пространство, как пустая строка не вызвать свойство измененного события для какой-либо причины. Благодарим вас за помощь, я буду реализовывать все необходимые места. – Traci

14

Установить свойство TargetNullValue связывания с String.Empty:

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

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

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

StringFormat={}{0:C} 

Это даже вероятно, причиной исключения вы получили.

+0

xmlns: sys = "clr-namespace: System; assembly = mscorlib" Я пробовал это, но продолжаю получать ошибку 24 Не могу загрузить тип 'Microsoft.Windows.Design.Metadata.ProvideMetadataAttribute' из сборки 'Microsoft.Windows.Design.Extensibility, Версия = 3.5.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a '. Линия '1' Позиция '6680'. – Traci

+0

Я не знаю. Но если бы я был вами, я бы попробовал только для теста иметь TextBox без других определений; просто привязка и TargetNullValue. Этот способ может помочь вам найти источник исключения. – Shimmy

+0

Пробовал удалить StringFormat все вместе, и я все еще получаю тот же самый meassage. --- ---- Это все, что у меня есть и все еще получаю исключение выше – Traci

3

Для меня только конвертер работает: Вот a link

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; 
    } 
}