Как в WPF в Textbox обойти string.Empty?

162
31 января 2019, 08:50

Есть некоторая форма (её часть):

<Label Grid.Row="1" Grid.Column="0" Content="Колонка кол-ва" />
    <TextBox Grid.Row="1" Grid.Column="1"
             Text="{Binding CountColumn, UpdateSourceTrigger=PropertyChanged}" />
<Label Grid.Row="2" Grid.Column="0" Content="Кол-во (если нет колонки с кол-вом)" />
    <DockPanel Grid.Row="2" Grid.Column="1">
        <CheckBox IsChecked="{Binding IsCheckedCount, UpdateSourceTrigger=PropertyChanged}" />
        <TextBox Text="{Binding CountNumber, UpdateSourceTrigger=PropertyChanged}"
                 IsEnabled="{Binding IsCheckedCount, UpdateSourceTrigger=PropertyChanged}" />
    </DockPanel>

В модели указано следующее:

public int? CountNumber { get; set; }
public int? CountColumn { get; set; }

Однако в программе если оставить данные поля пустыми, то выскакивает следующая ошибка:

Почему так происходит и как обойти это?

Answer 1

@АндрейNOP посоветовал написать конвертер.

Я написал его и все заработало:

<Label Grid.Row="1" Grid.Column="0" Content="Колонка кол-ва" />
    <TextBox Grid.Row="1" Grid.Column="1"
             Text="{Binding CountColumn, UpdateSourceTrigger=PropertyChanged}" />
<Label Grid.Row="2" Grid.Column="0" Content="Кол-во (если нет колонки с кол-вом)" />
    <DockPanel Grid.Row="2" Grid.Column="1">
        <CheckBox IsChecked="{Binding IsCheckedCount, UpdateSourceTrigger=PropertyChanged,
                  Converter={StaticResource ResourceKey=EmptyStringToNullConverter}}" />
        <TextBox Text="{Binding CountNumber, UpdateSourceTrigger=PropertyChanged,
                 Converter={StaticResource ResourceKey=EmptyStringToNullConverter}}"
                 IsEnabled="{Binding IsCheckedCount, UpdateSourceTrigger=PropertyChanged}" />
    </DockPanel>

Конвертер:

namespace Converters
{
    public class EmptyStringToNullConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var s = value as string;
            return string.IsNullOrEmpty(s) ? null : s;
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return Binding.DoNothing;
        }
    }
}
READ ALSO
Почему не отправляется письмо с помощью Mailgun APi?

Почему не отправляется письмо с помощью Mailgun APi?

Пытаюсь отправить письмо с помощью MailGun APIИмею следующий код:

216
Создание объекта по имени класса [дубликат]

Создание объекта по имени класса [дубликат]

На данный вопрос уже ответили:

166
Создание dll с Roslyn

Создание dll с Roslyn

Пробую создать dll библиотеку c RoslynДобавил все библиотеки с NuGet для работы с Roslyn

179
Выделение объекта по контуру

Выделение объекта по контуру

Какие есть способы выделения(либо подсветки, а еще лучше подсветки только контура) объекта в игре при наведении на него курсораЕсли использовать...

179