2010-04-15 2 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> 

이 분명하게 알 수 있듯이, 내 ICommandBackgroundWorker가하는 동안 True로 설정되는 IsExecuting 속성이 포함되어 그 결과적으로 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"> 

그것은 내가 그렇게 싶어 내가 행복 해요 무엇을하지 않습니다. 더 좋은 방법이 있다고 생각하는 사람은 여전히 ​​관심이 있습니다.

관련 문제