Как обновить ListViewItem.SelectedItem всякий раз, когда дочерний элемент управления ListView получает фокус?
Как обновить 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>
ListView
имеет ряды дочерних элементов управления в пределах GridView
колонны. Я хочу обновить связанное свойство ListView.SelectedItem
когда любой дочерний элемент управления в любом ряду имеет фокус клавиатуры. Было бы здорово, если бы это можно было сделать полностью в рамках .xaml
файл без необходимости прибегать к коду.
1 ответ
Измените SelectionMode вашего ListBox
в Single
Ваш текущий код работает, если вы не установите по умолчанию 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>