将样式DataTrigger绑定到自定义ICommand的状态属性
问题描述:
我有一个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
属性,该属性设置为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
(这是设置为我的视图模型的一个实例),但它会绑定到对SelectedItem
一无所知的命令。
有可能有更多的方法来解决这个问题,我很有兴趣听到他们。我自己一直在思考如何使用附加属性来替换命令的IsExecute
的直接绑定,并且需要设置DataContext
,但我还不确定如何执行此操作。
任何建议是最受欢迎的。谢谢!
答
现在,我想出了这个简单的解决方案:
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Command.IsExecuting, Mode=OneWay}" Value="True">
它做什么,我想,所以我很高兴。如果有人认为有更好的办法,我仍然对此感兴趣。