C# 单击ItemTemplate中的文本框时,ListView.SelectedItems不会更改
我有一个绑定了ObservableCollection的ListView。ListView的Itemtemplate如下所示: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>
<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属性没有改变,它指向最后一个选中的项目。当我单击图像或选择周围的可用空间时,更改
现在我有两个问题:
处理此问题的一种方法是设置
触发器
,当键盘焦点位于列表视图项
您需要多选还是单选就足够了?我正在使用单选。关于第二个问题。您想在何处访问此列表项?在数据模板中
或在代码中?在代码中。我正在测试您的代码,但我在第一次单击时遇到了一些问题(无论我在哪里单击,它总是选择第一个项目),我正在试图理解为什么在列表视图上强制SelectionMode=“Single”
。我已经更新了我的答案如果你想在代码隐藏中获得SelectedItem
,那么只需将其转换为收藏中的项目类型。哦,是的,我只是想知道是否可以直接从文本块获取引用而不是调用SelectedItems。我问这个问题是因为我读到一个ItemClick事件,其中ItemClickedEventArgs包含引用,我希望找到类似的内容。SelectedItem(s)
和SelectionChangedEventArgs
中的项目将属于集合项目类型。如果您有像ListViewItem
这样的UI容器,或者它的任何子项,那么您可以通过DataContext