使用WPF数据绑定将NULL值显示为“NULL”的最简单方法是什么?

时间:2009-01-06 10:49:55

标签: wpf linq-to-sql data-binding

我有这个遗留数据库,我正在使用Linq to Sql构建自定义查看器。

现在表中的某些字段的值可以为NULL。 在DataTemplate中使用常规数据绑定(为ORM Designer生成的类型键入)

<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 个答案:

答案 0 :(得分:18)

绑定类有一个名为 TargetNullValue 的属性,如果绑定返回NULL值,可用于替换其他内容。你的例子变成: -

<TextBlock Text="{Binding Path=columnX, TargetNullValue=My Substitute Text}"/>

Binding类的另一个属性也称为 FallbackValue 。如果无法解析(即找不到)绑定表达式,这将是替换值,例如,当您使用的路径(示例中的columnX)不是数据上下文或源的成员时。

更新(Gishu):需要 .NET Framework 3.5 SP1 下载53MB。没有它,上面的代码将无法编译。 TargetNullValue是Binding类的新增功能。

答案 1 :(得分:0)

右键单击DBML文件,单击“查看代码”。为要使用的表添加partial class。添加一个返回value ?? null或类似内容的属性。诀窍是LINQ to SQL将类声明为部分类,因此您可以轻松扩展它们。

答案 2 :(得分:0)

我认为没有更清洁的方法。您可以在样式模板中使用DataTrigger来获取空值,但使用NULL时数据触发器可能有点“有趣”,因此您可能还需要转换器。