2012-08-30 8 views
0

ListView 내의 하위 컨트롤에 포커스가있을 때 ListView.SelectedItem을 범하는 방법은 무엇입니까?ListView 자식 컨트롤에 포커스가있을 때마다 ListViewItem.SelectedItem을 업데이트하는 방법은 무엇입니까?

<ListView ItemsSource="{Binding Path=Records, Mode=TwoWay}" IsSynchronizedWithCurrentItem="True"> 
    <ListView.SelectedItem> 
      <Binding Path="SelectedRecord" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"/> 
    </ListView.SelectedItem> 
    <ListView.ItemContainerStyle> 
      <Style TargetType="{x:Type ListViewItem}"> 
       <Style.Triggers> 
        <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
         <Setter Property="IsSelected" Value="True"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
    </ListView.ItemContainerStyle> 
    <ListView.Resources> 
      <DataTemplate DataType="x:Type ListViewItem"> 
       <ListViewItem IsSelected="{Binding IsKeyboardFocusWithin"/> 
      </DataTemplate> 
    </ListView.Resources> 
    <ListView.View> 
      <GridView> 
       <GridViewColumn> 
       <TextBox ... Tag="{Binding}".../> 
       </GridViewColumn> 
       <GridViewColumn> 
       <TextBox ... Tag="{Binding}".../> 
       </GridViewColumn> 
      </GridView> 
    </ListView.View> 
</ListView> 

ListViewGridView 열 내 자식 컨트롤의 행이 있습니다. 모든 행의 자식 컨트롤 중 하나에 키보드 포커스가있는 경우 ListView.SelectedItem의 바운드 속성을 업데이트하려고합니다. 코드 숨김에 의지하지 않고도 .xaml 파일 내에서이 작업을 완전히 수행 할 수 있다면 좋을 것입니다.

답변

6

그런 다음 기본 SelectedItem를 설정 한 경우 ListBox 기본 SelectedItem을 설정하지 않으면 현재 코드가 작동

Single에의 SelectionMode는, 그러나 그것을 선택 취소 자동으로하지 않습니다 변경 당신은 클릭 두 번째 항목이므로 SelectedItem은 해당 행에 포커스를두고 다시 제거 할 때까지 기본 선택된 항목에 바인딩됩니다.

XAML을 약간 단순화 할 수도 있습니다. 당신은 당신의 ListBoxItem.Resources에서 DataTemplate 필요하지 않습니다 그리고 당신은 직접 <ListBox> 태그에서 작동

<ListView ItemsSource="{Binding Path=Records}" IsSynchronizedWithCurrentItem="True" 
      SelectedItem="{Binding SelectedRecord}" SelectionMode="Single"> 

    <ListView.ItemContainerStyle> 
      <Style TargetType="{x:Type ListViewItem}"> 
       <Style.Triggers> 
        <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
         <Setter Property="IsSelected" Value="True"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
    </ListView.ItemContainerStyle> 

    <ListView.View> 
      <GridView> 
       <GridViewColumn> 
       <TextBox ... Tag="{Binding}".../> 
       </GridViewColumn> 
       <GridViewColumn> 
       <TextBox ... Tag="{Binding}".../> 
       </GridViewColumn> 
      </GridView> 
    </ListView.View> 
</ListView> 
+0

SelectedItem을 설정할 수 있습니다. 레이첼에게 고마워! –