ListView SelectionChanged не будет обновляться при нажатии вложенного TextBox

У меня есть представление списка с сеткой. Второй столбец gridview содержит текстовые поля (и в случае, если это имеет отношение к данной конкретной проблеме, текстовые поля отображаются с помощью таблицы данных).

Я хочу, чтобы список SelectedItem обновлялся, когда пользователь нажимает в текстовом поле, чтобы напечатать и отразить строку (или элемент списка), содержащую текстовое поле. Прямо сейчас список просмотра SelectedItem будет обновляться только в том случае, если пользователь щелкает строку рядом с текстовым полем. Если я щелкну текстовое поле или введу его, выделенная строка останется прежней, и для представления списка не будет выбрано SelectionChanged.

Как я могу получить выбранный элемент списка просмотра для обновления? Могу ли я форсировать изменение его выбранного элемента или включить просмотр списка, чтобы текстовое поле щелкнуло как-то свое?

Заранее спасибо.

Ps Solution находится здесь:

https://drive.google.com/file/d/0B89vOvsI7UbdTmN5RVdLVTFGeXM/view?usp=sharing

ListView xaml:

  <ListView x:Name="CombinedlistView" Grid.Column="0"                                  
     DataContext="{Binding ElementName=mainWindow}"
     SelectedIndex="{Binding Path=SelectedIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
       IsSynchronizedWithCurrentItem="True">
          <ListView.View>
              <GridView >
                  <GridViewColumn CellTemplate="{StaticResource labelTemplate}" />
                  <GridViewColumn CellTemplateSelector="{StaticResource fieldValueTemplateSelector}" />
              </GridView>
          </ListView.View>                
   </ListView>

TemplateSelector:

     <loc:FieldValueTemplateSelector x:Key="fieldValueTemplateSelector" 
                        StringTemplate="{StaticResource stringTemplate}"
                        DateTimeTemplate="{StaticResource dateTimeTemplate}"/>

DataTemplate, где находится текстовое поле:

 <DataTemplate x:Key="stringTemplate" DataType="{x:Type System:String}">
  <StackPanel Style="{StaticResource dataTemplateStackPanelStyle}" Name="stringTemplStack">            
      <TextBox Name="searchValText"  Width="120"
        Text="{Binding Path=TextVal, Mode=OneWayToSource}"
        DataContext="{Binding ElementName=mainWindow}"/>
  </StackPanel>
 </DataTemplate>

1 ответ

Решение

Попробуйте подключить это событие к вашему PreviewGotKeyboardFocus событие в вашем списке просмотра:

protected void SelectCurrentItem(object sender, KeyboardFocusChangedEventArgs e)
{
    ListViewItem item = (ListViewItem)sender;
    item.IsSelected = true;
}
Другие вопросы по тегам