2011-10-17 3 views
0

Binding 값을 기반으로 ContentTemplate을 적용하려고합니다. 문제는 작동하지 않는 것입니다.DataTrigger를 사용하여 DataTemplate 스타일을 적용하는 방법

TemplateA라는 기본 템플릿이 있는데, 그런 다음 데이터 바인딩 된 값 (TemplateA 또는 TemplateB 중 하나)에 따라 스타일을 표시하려고합니다.

기본 템플릿을 주석 처리하면 어느 템플릿도 선택되지 않습니다.

데이터 바인딩 된 값을 확인했는데 값은 ok입니다.

어디서 잘못 볼 수 있습니까?

여기

<CollectionViewSource x:Key="ListDataView" /> 

이것은 윈도우의 리소스 섹션 내에 위치하고이 ListDataView는 코드 내의 ObservableCollection에 부착되는 ListDataView에게이다. 도움이 될 수있는 WPF DataTemplateSelector를 사용

<DataTemplate x:Key="TemplateA"> 
    <TextBlock Text="Template A" /> 
</DataTemplate> 

<DataTemplate x:Key="TemplateB"> 
    <TextBlock Text="Template B" /> 
</DataTemplate> 

    <ContentControl x:Name="LISTINGCONTROLA"> 
    <ContentControl.Style> 
     <Style TargetType="{x:Type ContentControl}"> 
      <Setter Property="ContentTemplate" Value="{StaticResource TemplateA}" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Source={StaticResource ListDataView}, Path=ListType}" Value="TEMPLATEA"> 
        <Setter Property="ContentTemplate" Value="{StaticResource TemplateA}" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding Source={StaticResource ListDataView}, Path=ListType}" Value="TEMPLATEB"> 
        <Setter Property="ContentTemplate" Value="{StaticResource TemplateB}" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ContentControl.Style> 
</ContentControl> 
+0

템플릿 정의도 포함시킬 수 있습니까? –

+0

2 개의 템플릿을 추가하십시오 – Ben

+0

템플릿이 멋지게 보입니다 - ListDataView의 정의를 게시 할 수 있습니까? –

답변

1

당신이 CollectionViewSource 자체의 속성을 가리키는 바인딩 때문에 문제가 대부분이며, 그 클래스는 속성 이름이 없습니다 ListType 그래서 바인딩 할 값이 없습니다 (따라서 기본값이 항상 사용됩니다).

ListType 속성은 어디에 바인딩합니까?

+0

테스트에서 나는 값을 표시하기 위해 UI에 Label을 삽입했습니다.

+0

이것을 추가해 주시겠습니까?''어딘가에 새로운 TextBlock에 어떤 텍스트가 표시되는지 알려주시겠습니까? –

+0

TextBlock을 추가했습니다. 비어있었습니다. 테스트에서 Path = ListType을 추가하고 TemplateB를 선택하는 데 필요한 값을 표시했습니다. – Ben

관련 문제