1

我有一个带有网格视图的列表视图。gridview 第二列包含文本框(如果这与此特定问题相关,则文本框由数据模板呈现)。

我希望当用户在文本框中单击以键入和反映包含文本框的行(或列表视图项)时更新列表视图 SelectedItem。现在 listview SelectedItem 将仅在用户单击一行时才更新在文本框之外。如果我单击文本框或输入文本框,突出显示的行将保持不变,并且列表视图不会发生 SelectionChanged。

如何让列表视图的选定项更新?我可以强制更改其选定项或启用列表视图以某种方式将文本框单击视为自己的吗?

提前致谢。

Ps 解决方案位于此处:

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

列表视图 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>

模板选择器:

     <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>
4

1 回答 1

0

尝试将此事件连接到您PreviewGotKeyboardFocus的 listviewitem 上的事件:

protected void SelectCurrentItem(object sender, KeyboardFocusChangedEventArgs e)
{
    ListViewItem item = (ListViewItem)sender;
    item.IsSelected = true;
}
于 2015-05-01T21:53:00.073 回答