由于可以通过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中做呢?
答案 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>
我对此进行了测试,并且可以正常工作。希望这就是您想要的。