单击文本区域时未选择 ListViewItem

ListViewItem is not selected when I clicked on the text area

我正在使用 ListView 显示使用数据模板的人员姓名列表:

<Windows.Resources>
  <DataTemplate Datatype="{x:Type local:Person}">
   <ListViewItem Content="{Binding Path=Name}">
  </DataTemplates>
</Windows.Resources>
<ListView Name="myList" itemSource="{Binding}">

后面的代码是

ObservableCollection<Person> lst = SomeMethod();
myList.DataContext = lst;

列表视图显示人员的姓名,但是当我准确地点击姓名时没有任何反应(该项目未获得焦点并且 SelectionChanged 事件不起作用)但是如果我点击列表视图项目中姓名的右侧部分它作品

我认为已连接到数据神庙,因为当我删除模板并将 person 的 ToString 方法覆盖到 return this.Name 时,它工作正常。

有什么想法吗?

谢谢。

您不应该在 DataTemplate 中使用 ListViewItem,这是一个 ContentControl,它通常描述内容应该如何在 ContentControl 中显示,而不是其他方式 :P

您的 DataTemplate 正在生成这个(简化的)可视化树:

ListView
    ItemsPresenter
        ListViewItem
            ContentPresenter
                ListViewItem

额外的 ListViewItem 可能吞噬了 Click 事件。相反,使用类似 TextBlock 的东西来显示文本,常规的 ListViewItem 行为应该按预期工作。

<DataTemplate Datatype="{x:Type local:Person}">
    <TextBlock Text="{Binding Path=Name}">
</DataTemplates>