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
는 BackgroundWorker
가하는 동안 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
을 설정해야한다고 생각했지만 그 방법은 아직 확실하지 않습니다.
모든 조언을 환영합니다. 고맙습니다! 지금은