2012-11-02 2 views
1

WPF에서 데이터 컨텍스트를 명확히하는 것에 대한 질문이 있습니다. PRISM 기반 응용 프로그램이 있습니다. DataTrigger를 Button 컨트롤에 배치하려고합니다. 이 Button 컨트롤은 PRISM 명령 인터프리터를 사용하도록 구성됩니다.WPF DataTrigger 및 PRISM을 사용하는 버튼

<Button 
    Grid.Column="0"        
    Content="{Resx AdvancedTroubleShootingButtonLabel}" 
    prism:Click.Command="{Binding AdvancedTroubleShootingCommand}" 
> 
    <Button.Resources> 
    <Style 
     TargetType="{x:Type Button}" BasedOn="{StaticResource CDMWrappedButtonStyle}"> 

     <Style.Triggers> 

     <DataTrigger Binding="{Binding Path=SizerVisible, ElementName=SecuritySizer}" Value="False" > 
      <Setter Property="Button.IsEnabled" Value="True" /> 
     </DataTrigger> 

     <DataTrigger Binding="{Binding Path=SizerVisible, ElementName=SecuritySizer}" Value="True" > 
      <Setter Property="Button.IsEnabled" Value="False" /> 
     </DataTrigger> 
     </Style.Triggers> 

    </Style> 
    </Button.Resources> 
</Button> 

내 생각에 DataTriggers는 트리거의 데이터 인터페이스에 지정된 elementName을 사용합니다. 이 XAML을 테스트 할 때 트라이 거가 실행되지 않습니다. PRISM 명령 구문을 제거하고 표준 Button Click 이벤트에 연결 한 다음 테스트하면 트리거가 시작됩니다.

내가 알고 싶은 것은 PRISM 명령 처리기 [구문] 트리거를 스크립트에서 식별 된 DataContext 사용하지 않는 원인은 무엇입니까?

+0

버튼에 제본 스크립트를 넣고있는 또 다른 상황을 생각해보십시오. 바운드 프로퍼티는 의존성 프로퍼티이며, 버튼에 의해 픽업되어야한다. 그렇지 않았습니다. 이 버튼에는 PRISM 명령 처리기도 있습니다. 내가 그것을 제거했을 때 바운드 속성은 변경되었을 때 잡혔습니다. 흥미로운 점은 동일한 컨트롤에 다른 바운드 속성이 있다는 것입니다. PRISM 명령 바인딩 활성 상태로 잡히게됩니다. 두 개의 바운드 프로퍼티는 뷰의 데이터 컨텍스트가 첨부 된 ViewModel에 정의됩니다. 유일한 차이점은 두 번째 변환기가 사용된다는 것입니다. 베드로 –

답변

0

명령 정의에서 CanExecute를 설정합니까?

IsEnabled가 해당 명령의 CanExecute에 바인딩되어 있기 때문에 트리거가 작동하지 않을 수 있습니다.