2010-04-15 138 views
1

我有一个WPF的自定义实现ICommand,它在BackgroundWorker中执行绑定,以便UI保持响应。将样式DataTrigger绑定到自定义ICommand的状态属性

我想在绑定正在执行时显示自定义效果。目前,效果被简化为将命令源的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属性,该属性设置为TrueBackgroundWorker执行其绑定的东西,从而禁用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(这是设置为我的视图模型的一个实例),但它会绑定到对SelectedItem一无所知的命令。

有可能有更多的方法来解决这个问题,我很有兴趣听到他们。我自己一直在思考如何使用附加属性来替换命令的IsExecute的直接绑定,并且需要设置DataContext,但我还不确定如何执行此操作。

任何建议是最受欢迎的。谢谢!

回答

0

现在,我想出了这个简单的解决方案:

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

它做什么,我想,所以我很高兴。如果有人认为有更好的办法,我仍然对此感兴趣。