如果属性路径中的父对象为null,该怎么办?

时间:2017-07-15 15:33:34

标签: wpf xaml binding

如果属性路径中的某个父对象为null,我们如何控制会发生什么?例如:

UIButton

如果<Button Command="{Binding ActiveDrawing.PrintCommand}" /> 为空,该怎么办?我希望在这种情况下禁用此按钮,但WPF会使其保持启用状态。我尝试将ActiveDrawing设置为null,如下所示:

FallBackValue

但它并没有什么区别。该按钮保持启用状态。

N.B。将<Button Command="{Binding ActiveDrawing.PrintCommand, FallbackValue={x:Null}}" /> 设置为TargetNullValue也没有任何区别。

1 个答案:

答案 0 :(得分:1)

我现在已经设计了以下解决方法。

  1. 创建一个名为NullCommand的新类:

    Public Class NullCommand
      Implements ICommand
    
      Public Event CanExecuteChanged As EventHandler Implements ICommand.CanExecuteChanged
    
      Public Sub Execute(parameter As Object) Implements ICommand.Execute
      End Sub
    
      Public Function CanExecute(parameter As Object) As Boolean Implements ICommand.CanExecute
        Return False
      End Function
    End Class
    
  2. 在参考资料部分创建该类的实例:

    <Window.Resources>
      <vm:NullCommand x:Key="NullCommand" />
    </RibbonGroup.Resources>
    
  3. 将此对象用作FallbackValue:

    <Button Command="{Binding ActiveDrawing.PrintCommand, FallbackValue={StaticResource NullCommand}" />
    
  4. 乌拉!有用。只要绑定属性路径因任何原因失败,您的按钮就会被禁用。

    TBH,我不喜欢这个解决方案的唯一原因。 FallbackValue应该处理这种情况。