2012-07-26 4 views
0

항목을 선택하면 단순히 배경색을 변경해야하는 트리거가있는 데이터 형식을 정의했습니다. 어떤 이유로 그것은 작동하지 않는 것 같습니다.DataTemplateTrigger가 datatemplateselector와 함께 작동하지 않습니다.

 <DataTemplate x:Key="existingDeviceTemplate" > 
      <StackPanel Orientation="Horizontal"> 
       <Border Name="bd" Background="Green" BorderThickness="1" Padding="5"> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition/> 
         </Grid.RowDefinitions> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition /> 
          <ColumnDefinition /> 
          <ColumnDefinition /> 
         </Grid.ColumnDefinitions> 

         <TextBlock Grid.Column="0" Text="{Binding Path=Name}" Width="200"/> 
         <Button Grid.Column="1" Content="Settings" Click="cmdSettings_Clicked"/> 
         <Button Grid.Column="2" Content="Delete" Click="cmdDelete_Clicked"/> 
        </Grid> 
       </Border> 
      </StackPanel> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding IsSelected}" Value="true" > 
        <Setter TargetName="bd" Property="Background" Value="Red"/> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
+0

바인딩 오류가 있습니까? 어떤 컨트롤이이 DataTemplate을 사용합니까? – LPL

+0

목록 컨트롤입니다. 스타일 시트에서 스타일을 설정하고 데이터 템플릿 선택기를 사용하여 다른 행을 표시하는 방법을 결정해야합니다. – user1145533

답변

1

시도는 ListBoxItemIsSelected 속성에 바인딩 : 목록 제어는 x:Type ListViewItemx:Type ListBoxItem를 교체 가지고 ListView입니다

<DataTemplate.Triggers> 
    <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" Value="true"> 
      <Setter TargetName="bd" Property="Background" Value="Red" /> 
    </DataTrigger> 
</DataTemplate.Triggers> 

합니다.

+1

당신이 옳다고 생각합니다. 현재 코드는'ListBoxItem.DataContext.IsSelected'에 바인딩되어 있습니다. 대신 OP가'ListBoxItem.IsSelected'에 바인딩하려고하는데,이 경우에는이 트리거가 작동해야합니다. :) – Rachel

1

바인딩 된 모델의 이름이 IsSelected 인 속성이 있습니까? 내 생각 엔 행의 IsSelected 속성을 의미합니다. 그런 경우 FindAncestor를 사용하여 RelativeSource 바인딩을 ListItem에 넣어야합니다.

관련 문제