我有这个遗留数据库,我正在使用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";
...
但这似乎太多了。此逻辑也需要在现有的非平凡转换器中重复。
有没有一种快速的方法来实现这一目标?
答案 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时数据触发器可能有点“有趣”,因此您可能还需要转换器。