2014-09-04 2 views
0

У меня есть ListView и внутри этого другого ListView. Всякий раз, когда я выбираю элемент в дочернем элементе ListView, я хочу, чтобы родительский элемент был выбран в родительском ListView. Пример:Как установить свойство другого элемента управления из установщика стиля

<Window> 
    <Window.Resources> 
     <!-- Parent ListView ItemsTemplate... Incomplete --> 
     <DataTemplate x:Key="parentItemTemplate"> 
      <!-- Child ListView --> 
      <ListView SelectedItem="{Binding ChildSelectedItem}" ItemsSource="{Binding WhateverInParent}"> 
       <ListView.Resources> 
        <Style TargetType="ListViewItem"> 
         <Trigger Property="IsSelected" Value="True"> 
          <!-- This is what I want to do, but ofc this doesn't work because it produces a compile error saying can't set TargetName in a setter --> 
          <Setter TargetName="parent" Property="SelectedValue" Value="{Binding DataContext, RelativeSource={RelativeSource AncestorType=ListView}}" /> 
         </Trigger> 
        </Style> 
       </ListView.Resources> 
      </ListView> 
     </DataTemplate> 
    </Window.Resources> 
    <ListView ItemsTemplate="{StaticResource parentItemTemplate}" x:Name="parent" SelectedItem="{Binding ParentSelectedItem}" ItemsSource="{Binding Whatever}"/> 
</Window> 

Как это сделать? Предпочитаете, чтобы это было в XAML.

+0

не может сделать это с помощью style..but почему вы хотите это сделать? и ListView не имеет свойства IsSelected. Чего вы хотите достичь? – Nitin

+0

@nit: Потому что это требование пользователя. Ред. – nakiya

ответ

2

Вам просто нужно установить ListViewItem.ItemContainerStyle, как показано ниже, чтобы достичь того, чего вы хотите

<ListView ItemsTemplate="{StaticResource parentItemTemplate}" x:Name="parent" SelectedItem="{Binding ParentSelectedItem}" ItemsSource="{Binding Whatever}"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
     <Style.Triggers> 
      <Trigger Property="IsKeyboardFocusWithin" Value="true"> 
       <Setter Property="IsSelected" Value="true" /> 
      </Trigger> 
     </Style.Triggers> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 
+0

+1, Выглядит хорошо. Единственная проблема заключается в том, когда я выхожу за пределы родительского ListView, текущий выбор отменяется. – nakiya

Смежные вопросы