我有一个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
,但我还不确定如何做到这一点
欢迎任何建议。谢谢!
答案 0 :(得分:0)
目前,我已经提出了这个简单的解决方案:
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Command.IsExecuting, Mode=OneWay}" Value="True">
它做我想要的,所以我很高兴。如果有人认为有更好的方法,我仍然感兴趣。