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

现在,表中的某些字段可以具有值NULL。
在DataTemplate中使用常规数据绑定(bind)(为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";
    ...

但这似乎是太多的工作。同样,该逻辑将需要在现有的非平凡转换器中复制。

是否有一种快速实现此目标的方法?

最佳答案

绑定(bind)类具有一个名为 TargetNullValue 的属性,如果绑定(bind)返回NULL值,则该属性可用于替代其他内容。您的示例变为:-

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

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

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

09-21 00:03