2011-04-21 63 views
1

我正在尝试一些虚拟应用程序只是为了测试绑定模式。所以,只是想知道绑定模式是如何工作的。我有这样的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。按钮被启用,因为它应该是,但属性“CanEnable”没有设置为true,即使标准模式设置为TwoWay .. 为什么会出现这种情况?

+0

请仔细阅读:[WPF中的双向绑定](http://stackoverflow.com/questions/320028/two-way-binding-in-wpf)。似乎是相关的。 – publicgk 2011-04-21 07:42:05

+0

问题在这种情况下是不同的。我已经在我的viewmodel中实现了INPC。 – 2011-04-21 08:06:48

回答

2

通过设置触发器中的值,您基本上可以删除先前在样式设置器中设置的绑定。仔细看看风格。你会注意到你基本上将你的财产IsEnabled设置了两次。首先在风格制定者中,第二名在触发器中。第二个值覆盖之前的值是合乎逻辑的。

所需的效果可以从代码,如果你使用SetCurrentValue方法来设置依赖项属性的值来实现:

SetCurrentValue(Button.IsEnabledProperty, true); 

这样,这个属性设置的绑定将不会被删除,如预期它会工作。

+0

是的,我也在想同一条线。其实我想要纯XAML方法,如果它可以实现,否则我必须解决代码背后的东西只有... :( – 2011-04-21 08:18:33

+0

此外,如果我绑定属性直接风格然后触发没有得到火这就是为什么我把它移动样式.. – 2011-04-21 08:19:59