dotNET
dotNET

Reputation: 35400

What if parent object in property path is null?

How do we control what happens if one of the parent objects in the property path is null? For example:

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

What if ActiveDrawing is null? I want this button to be disabled in that case, but WPF keeps it enabled. I have tried setting FallBackValue to null, like this:

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

but it doesn't make a difference. The button keeps enabled.

N.B. Setting TargetNullValue to {x:Null} also doesn't make a difference.

Upvotes: 1

Views: 666

Answers (1)

dotNET
dotNET

Reputation: 35400

I have devised the following workaround for now.

  1. Create a new class named 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. Create an instance of the class in the Resources section:

    <Window.Resources>
      <vm:NullCommand x:Key="NullCommand" />
    </RibbonGroup.Resources>
    
  3. Use this object as your FallbackValue:

    <Button Command="{Binding ActiveDrawing.PrintCommand, FallbackValue={StaticResource NullCommand}" />
    

Hurrah! It works. Whenever the binding property path fails for any reason, your button will be disabled.

TBH, I don't like this solution for one sole reason. FallbackValue should have handled this situation.

Upvotes: 1

Related Questions