2017-07-15 17 views
0

如果属性路径中的其中一个父对象为空,我们如何控制会发生什么?例如:如果属性路径中的父对象为空,该怎么办?

<Button Command="{Binding ActiveDrawing.PrintCommand}" /> 

如果ActiveDrawing为空怎么办?在这种情况下,我希望禁用此按钮,但WPF会保持启用状态。我曾尝试设置FallBackValue为空,这样的:

<Button Command="{Binding ActiveDrawing.PrintCommand, FallbackValue={x:Null}}" /> 

但它不会有所作为。该按钮保持启用状态。

N.B.设置TargetNullValue{x:Null}也没有区别。

+0

执行PrintCommand,并在CanExecute中检查ActiveDrawing.PrintCommand。取消直接连接。 – Aphelion

+0

我确实实施了'PrintCommand'和'CanExecute'。问题是,如果“ActiveDrawing”为null,那么WPF不会去那么远评估'CanExecute'。如果您要求我将所有命令从ActiveDrawing移至当前上下文,那么这太大了。我相信应该有一个简单的方法来指定一个值,以防因为某些原因评估失败。 – dotNET

+0

事实上,我希望'FallbackValue'完全是为了这个目的,但不知何故它不能按我的预期工作。 – dotNET

回答

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}" /> 
    

万岁!有用。每当绑定属性路径因任何原因失败时,您的按钮将被禁用。

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

相关问题