0

Example: I have a form that can perform some work. While the work is done i need to hide some UI elements.

What I do now is set the converter for each element that I need to be hidden:

<Button1 ..      Visibility="{Binding Executing, Converter={StaticResource BoolToVisibilityInversed}}"/>
<TextBlock2 ..   Visibility="{Binding Executing, Converter={StaticResource BoolToVisibilityInversed}}"/>
<CancelButton .. Visibility="{Binding Executing, Converter={StaticResource BoolToVisibility}}"/>

What I would like to have is some kind of variable in xaml to assign once and be able to bind to: (pseudo code. doesn't work)

<!-- The Variables -->
<Visibility Name="VisibleWhileExecuting" Value="{Binding Executing, Converter={StaticResource BoolToVisibility}}" />
<Visibility Name="HiddenWhileExecuting"  Value="{Binding Executing, Converter={StaticResource BoolToVisibilityInversed}}" />

<!-- The Elements -->
<Button1 ..      Visibility="{Binding HiddenWhileExecuting}"/>
<TextBlock2 ..   Visibility="{Binding HiddenWhileExecuting}"/>
<CancelButton .. Visibility="{Binding VisibleWhileExecuting}"/>

Is there a way to do so?


Update:

What I have come up to is creating two icons displaying the work status. Then I can bind to that icon's visibility.

something like this (didn't check)

<Image Name="ExecutingIcon" .. Visibility="{Binding Executing, Converter={StaticResource BoolToVisibility}}"/>
<Image Name="IdleIcon" ..      Visibility="{Binding Executing, Converter={StaticResource BoolToVisibilityInversed}}"/>

<Button1 ..      Visibility="{Binding ElementName=IdleIcon, Path=Visibility}" />
<CancelButton .. Visibility="{Binding ElementName=ExecutingIcon, Path=Visibility}"/>
Pasetchnik
  • 318
  • 1
  • 9
  • BindingProxy: https://stackoverflow.com/questions/24452264/bindingproxy-binding-to-the-indexed-property - not related issue, but shows BindingProxy implementation – ASh Jul 05 '22 at 20:23
  • 1
    or CalcBinding : https://stackoverflow.com/a/61550165/1506454 – ASh Jul 05 '22 at 20:28
  • Why don't you simply set the source property? Why would you need any additional variable? – mm8 Jul 06 '22 at 09:17
  • mm8, didn't really get what you mean. How can the source property help here? – Pasetchnik Jul 06 '22 at 10:31

1 Answers1

0

If you are manually setting the boolean values, then you can directly use

Visibility HiddenWhileExecuting;
Visibility VisibleWhileExecuting;

instead of boolean values, which you can bind directly and need not send it to converter.

You can handle the visibility in the C# code as follows

HiddenWhileExecuting = Visibility.Hidden;