如何通过 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
我测试了这个并且它有效。希望这就是您要找的。
既然可以通过 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
我测试了这个并且它有效。希望这就是您要找的。