每当ListView子控件获得焦点时如何更新ListViewItem.SelectedItem?

Kok*_*Teh 0 wpf listview selecteditem mvvm childcontrol

如何更好地ListView.SelectedItem控制内部的儿童控制ListView

<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>
Run Code Online (Sandbox Code Playgroud)

ListView具有内子控件的行GridView列.我想更新ListView.SelectedItem任何行中的任何子控件具有键盘焦点时的绑定属性.如果可以在.xaml文件中完全完成而不必诉诸代码,那将是很棒的.

Rac*_*hel 6

将您的SelectionMode更改ListBoxSingle

如果未设置默认值SelectedItem,则当前代码有效,但是如果设置默认值,SelectedItem则单击第2个项目时不会自动取消选择,因此SelectedItem保持绑定到默认选定项目,直到您将该行设置为焦点为止.再次删除它.

您也可以稍微简化您的XAML.你不需要DataTemplate你的ListBoxItem.Resources,你可以直接SelectedItem在你的<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>
Run Code Online (Sandbox Code Playgroud)