Каков самый простой способ отображения нулевых значений в виде "NULL" с привязкой данных WPF?
У меня есть эта устаревшая база данных, для которой я создаю пользовательский просмотрщик с помощью Linq to Sql.
Теперь некоторые поля в таблице могут иметь значение NULL.
Использование обычной привязки данных в DataTemplate (типизированной для класса, созданного конструктором ORM)
<TextBlock Text="{Binding Path=columnX}"/>
Если columnX имеет значение NULL, то ничего не отображается. (Похоже, что это соглашение WPF) я хотел бы отобразить "NULL" вместо этого, если значение равно NULL. (эквивалентно column_value ?? "NULL")
Я мог бы использовать конвертер, как в
<TextBlock Text="{Binding Path=columnX, Converter={StaticResource nullValueConverter}}"/>
Класс преобразователя
class NullValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return "NULL";
...
Но это кажется слишком большой работой. Кроме того, эта логика должна быть продублирована в существующих нетривиальных преобразователях..
Есть ли быстрый способ добиться этого?
3 ответов:
Класс привязки имеет свойство, называемое TargetNullValue Это можно использовать для замены чего-то другого, если привязка возвращает нулевое значение. Ваш пример становится: -
<TextBlock Text="{Binding Path=columnX, TargetNullValue=My Substitute Text}"/>Есть еще одно полезное свойство класса Binding, которое называется FallbackValue. Это будет заменяющее значение, которое будет использоваться, если выражение привязки не может быть разрешено (т. е. не найдено), например, когда путь, который вы используете (columnX в вашем примере), не является членом контекст или источник данных.
Обновление (Гишу): требуется .NET Framework 3.5 SP1 загрузка 53 МБ. Без него приведенный выше код не будет компилироваться. TargetNullValue-это новое дополнение к классу привязки.
Щелкните правой кнопкой мыши файл DBML и выберите пункт Просмотр кода. Добавьте
partial classдля таблицы, с которой вы хотите работать. Добавьте свойство, возвращающееvalue ?? nullили что-то в этом роде. Хитрость заключается в том, что LINQ to SQL объявляет классы как разделяемые, поэтому вы можете легко расширить их.
Я не думаю, что есть более чистый способ сделать это. Возможно, вы можете использовать DataTrigger в шаблоне стиля, чтобы подобрать значения null, но триггеры данных могут быть немного "смешными" при использовании нулей, поэтому вам, вероятно, понадобится конвертер в любом случае.
Comments