2010-04-15 93 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"> 

它做什麼,我想,所以我很高興。如果有人認爲有更好的辦法,我仍然對此感興趣。

相關問題