将Style DataTrigger绑定到自定义ICommand的status属性

时间:2010-04-15 11:24:39

标签: wpf xaml binding

我有一个WPF ICommand的自定义实现,它在BackgroundWorker中执行其绑定,以便UI保持响应。

我想在执行绑定时显示自定义效果。目前,将效果简化为将命令源的IsEnabled属性设置为False。之后,我们的设计师将提出一些不错的进步风格动画。

以下是我正在尝试做的一个例子,其中有效(有点):

<Button Width="80"
        Command="{x:Static Member=local:AppCommands.Test}"
        DataContext="{x:Static Member=local:AppCommands.Test}">
  <Button.Style>
    <Style TargetType="{x:Type Button}">
      <Setter Property="IsEnabled" Value="True"/>
      <Style.Triggers>
        <DataTrigger Binding="{Binding Path=IsExecuting, Mode=OneWay}" Value="True">
          <Setter Property="IsEnabled" Value="False"/>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Button.Style>
</Button>

很明显,我的ICommand包含IsExecuting属性,设置为True,而BackgroundWorker使用绑定执行其操作,从而禁用了UI。

不幸的是,必须明确地将按钮DataContext设置为命令实例会阻止我在这样的情况下引用原始DataContext

<Button Width="80"
        Command="{x:Static Member=local:AppCommands.ParamTest}"
        CommandParameter="{Binding Path=SelectedItem}"
        DataContext="{x:Static Member=local:AppCommands.ParamTest}">

这里,CommandParameter应该绑定到窗口的DataContext(设置为我的视图模型的一个实例),而是绑定到对{{1}一无所知的命令}。

可能有更多方法可以解决这个问题,我很想听听所有这些。我自己一直在考虑使用附加属性来替换命令SelectedItem的直接绑定,并且需要设置IsExecute,但我还不确定如何做到这一点

欢迎任何建议。谢谢!

1 个答案:

答案 0 :(得分:0)

目前,我已经提出了这个简单的解决方案:

<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Command.IsExecuting, Mode=OneWay}" Value="True">

它做我想要的,所以我很高兴。如果有人认为有更好的方法,我仍然感兴趣。