如何通过Xamarin.Forms(XAML)中的DataTrigger从BindableProperty中删除绑定

时间:2018-11-23 18:35:21

标签: xaml xamarin.forms datatrigger

由于可以通过DataBinding将绑定添加到BindableProperty,所​​以还应该能够通过DataTrigger从BindableProperty删除绑定吗?

<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>

当然,我是在谈论从XAML中的样式级别中删除,而不是从代码级别中删除。从代码级别来看,我们可以做BindableObject.RemoveBinding,但是如何在XAML中做呢?

1 个答案:

答案 0 :(得分:1)

您可以使用Path="null",但是我在第一次加载IsToggled=True时进行了检查,可以看到正在设置文本,当我更改IsToggled=False时,该文本为空白。这是根据您的问题所期望的。

但是,当我再次切换开关IsToggled=True时,看不到绑定Name的文本。

似乎没有XAML完全等同于BindableObject.RemoveBinding,我认为最好还是依靠C#代码。

更新

完全不需要IsToggled=false 时再触发一次。只需将其删除。仅当IsToggled=True自身的错误Binding本身被移除时,第一个触发器才会激活并绑定。

    <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

我对此进行了测试,并且可以正常工作。希望这就是您想要的。

testing