g_m
g_m

Reputation: 526

How to remove Binding from BindableProperty via DataTrigger in Xamarin.Forms (XAML)

Since it is possible to add a Binding to a BindableProperty via DataBinding, should also be able to remove Binding from BindableProperty via DataTrigger?

<Style TargetType="Label" x:Key="MyStyle">
    <Style.Triggers>
        <DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference mySwitch}, Path=IsToggled}" Value="True">
            <Setter Property="Text">
                <Setter.Value>
                    <Binding Path="Name" />
                </Setter.Value>
            </Setter>
        </DataTrigger>
        <DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference mySwitch}, Path=IsToggled}" Value="False">
            <Setter Property="Text">
                <Setter.Value>
                    <!--The Binding removal should occur here-->
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>

Of course, I'm talking about removing from the Style level in XAML, not from the code level. From the code level, we can do BindableObject.RemoveBinding, but how to do it in XAML?

Upvotes: 0

Views: 748

Answers (1)

Morse
Morse

Reputation: 9124

You can use Path="null" but I checked when it loads first time IsToggled=True I can see Text being set, when I change i.e IsToggled=False the switch the text is blank. That's what is expected according to your question.

However when I toggle switch again IsToggled=True I don't see the text with the binding Name however.

It doesn't seem there is XAML that is exactly equivalent to BindableObject.RemoveBinding I think good bet is to rely on C# code for the same.

Update:

One more trigger when IsToggled=false is not required at all. Just remove it. The first trigger activates and binds only when IsToggled=True when its false Binding is itself removed.

    <ResourceDictionary>
        <Style TargetType="Label"
               x:Key="MyStyle">
            <Style.Triggers>
                <DataTrigger TargetType="Label"
                             Binding="{Binding Source={x:Reference mySwitch}, Path=IsToggled,Mode=TwoWay}"
                             Value="True">
                    <Setter Property="Text">
                        <Setter.Value>
                            <Binding Path="FirstName" />
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
             <!-- end of all triggers -->
            </Style.Triggers>
          <!-- end of style -->
        </Style>
    </ResourceDictionary>

IsToggeled=true IsToggeled=true

IsToggeled=false IsToggeled=false

I tested this and it works. Hope this is what you are looking for.

testing

Upvotes: 2

Related Questions