【问题标题】:Null checking in binding expression绑定表达式中的空值检查
【发布时间】:2016-01-09 22:17:24
【问题描述】:

WPF 绑定表达式语法是否具有空值检查机制?例如 My TextBox 显示 People 对象数组的第一个元素的 Address 字段,如下所示:

Text="{Binding AllPeople[0].Address}" 

AllPeople 有时本身可以为 null。这不会导致任何异常,但 WPF 在即时窗口中静默记录绑定错误消息。有没有办法通过在 Path 表达式中指定空安全性来避免这种情况? AllPeople?[0].Address 上的东西。

注意:我知道这可以使用转换器轻松完成。我正在寻找一种速记符号。

【问题讨论】:

  • 你可以尝试定义你的类的一些空(空)实例,使用它而不是空。就像所谓的Null Object Pattern。这可能是某种矫枉过正。这里检查null的目的可能是在null时显示一些自定义字符串,所以我认为使用Converter是相当标准的。

标签: wpf xaml binding nullreferenceexception


【解决方案1】:

在您的绑定中,您可以配置两个可选属性:TargetNullValueFallbackValue。第一个应该是你需要的。

如果绑定在运行时不起作用,将应用FallbackValue

例子:

IsEnabled="{Binding Path=EnabledFlagInViewModel, TargetNullValue=false}"

【讨论】:

  • 对于 OP,AllPeople 可能为空。但实际路径是AllPeople[0].Address。所以我相信你需要在能够使用TargetNullValue之前将路径更改为AllPeople,然后你需要一些转换器来设置实际值(AllPeople[0].Address)。但是我认为FallbackValue 是OP 需要的。在这种情况下,绑定将失败并使用FallbackValue
  • 感谢您的意见。 TargetNullValue 在这种情况下不起作用; FallbackValue 然而确实如此。虽然这不是我所要求的,但它至少使我免于编写转换器并以标准方式解决手头的问题。
猜你喜欢
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
相关资源
最近更新 更多