C# 单击ItemTemplate中的文本框时,ListView.SelectedItems不会更改

C# 单击ItemTemplate中的文本框时,ListView.SelectedItems不会更改,c#,wpf,listview,C#,Wpf,Listview,我有一个绑定了ObservableCollection的ListView。ListView的Itemtemplate如下所示: <ListView ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" PreviewMouseLeftButtonUp="ListViewClicked" PreviewKeyDown="NameBox_KeyDown"> <ListView.ItemTemplate>

我有一个绑定了ObservableCollection的ListView。ListView的Itemtemplate如下所示:

<ListView ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" PreviewMouseLeftButtonUp="ListViewClicked" PreviewKeyDown="NameBox_KeyDown">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Image Source="./Resources/DeleteIcon.png"/>
                <TextBox Text="{Binding Path=Name}"/>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

这样,我就可以让用户选择更改元素的名称,或者从列表中删除它。我通过附加到ListView的两个事件处理程序在代码隐藏中处理这两个操作

问题是,当我单击文本框时,ListView的SelectedItems属性没有改变,它指向最后一个选中的项目。当我单击图像或选择周围的可用空间时,更改

现在我有两个问题:

  • 有没有一种简单的方法来修复这种行为
  • 是否可以获取对其属性由TextBox公开的集合项的引用

  • 处理此问题的一种方法是设置
    触发器
    ,当键盘焦点位于
    列表视图项

    
    
    您需要多选还是单选就足够了?我正在使用单选。关于第二个问题。您想在何处访问此列表项?在
    数据模板中
    或在代码中?在代码中。我正在测试您的代码,但我在第一次单击时遇到了一些问题(无论我在哪里单击,它总是选择第一个项目),我正在试图理解为什么在
    列表视图上强制
    SelectionMode=“Single”
    。我已经更新了我的答案如果你想在代码隐藏中获得
    SelectedItem
    ,那么只需将其转换为收藏中的项目类型。哦,是的,我只是想知道是否可以直接从文本块获取引用而不是调用SelectedItems。我问这个问题是因为我读到一个ItemClick事件,其中ItemClickedEventArgs包含引用,我希望找到类似的内容。
    SelectedItem(s)
    SelectionChangedEventArgs
    中的项目将属于集合项目类型。如果您有像
    ListViewItem
    这样的UI容器,或者它的任何子项,那么您可以通过
    DataContext