我正在尝试一些虚拟应用程序来测试绑定模式。所以,只是想知道绑定模式是如何工作的。我有这个xaml代码 -
<Button x:Name="btn"
Height="20"
Width="200"
VerticalAlignment="Top">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="IsEnabled"
Value="{Binding CanEnable, Mode=TwoWay}" />
<Style.Triggers>
<DataTrigger Binding="{Binding TextChanged}" Value="true">
<Setter Property="IsEnabled"
Value="true" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
此处按钮IsEanbled绑定到我的viemodel属性“CanEanble”,其默认值为false。现在在我的触发器中,我正在听“TextChanged”属性并将按钮IsEnabled设置为true。按钮被启用,因为它应该是,但即使将biding模式设置为TwoWay,属性“CanEnable”也没有设置为true。 为什么会发生这种情况?
答案 0 :(得分:2)
通过设置触发器中的值,您基本上可以删除之前在样式设置器中设置的绑定。仔细看看风格。您会注意到,基本上您将属性IsEnabled
设置为两次。首先在样式设置器中,在触发器中排在第二位。第二个值覆盖先前的值是合乎逻辑的。
如果使用SetCurrentValue
方法设置依赖项属性的值,则可以从代码中实现所需的效果:
SetCurrentValue(Button.IsEnabledProperty, true);
这样,不会删除在此属性上设置的绑定,它将按预期工作。