我有这个旧数据库,正在使用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类的新增功能。