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

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

既然可以通过 DataBinding 将 Binding 添加到 BindableProperty,是否也应该能够通过 DataTrigger 从 BindableProperty 中删除 Binding?

<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中如何做到呢?

您可以使用 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=false

我测试了这个并且它有效。希望这就是您要找的。