【问题标题】:TreeView selects Root as selectedItem on double click eventTreeView 在双击事件中选择 Root 作为 selectedItem
【发布时间】:2024-04-20 12:55:02
【问题描述】:

我正在开发一个带有树视图控件的 WPF 应用程序。我为双击事件创建了事件。但是每当我双击一个 TreeViewItem 根元素时,就会被选中。

这里是 XAML

<HierarchicalDataTemplate x:Key="TreeViewItem" ItemsSource="{Binding Children}">
    <StackPanel Orientation="Horizontal">
        <TextBlock Margin="2" Text="{Binding Name}" />
    </StackPanel>
</HierarchicalDataTemplate>
<TreeView 
    ItemTemplate="{StaticResource TreeViewItem}"
    ItemsSource="{Binding Hosts}"
    MouseDoubleClick="TreeView_MouseDoubleClick">

这是我的代码。

private void TreeView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    var selectedItem = sender.SelectedItem;
}

这是我的 TreeView 结构示例

CountryA
    CityA
         Street1
         Street2
    CityB
         Street3
CountryB
    CityC

现在,如果我双击 Street1,那么在事件处理程序中 sender.SelectedItem 是 CountryA。如果我双击 CityA 或 CityB,也会发生同样的情况。有什么问题?

【问题讨论】:

  • 我无法重现您所描述的内容。您是否在 TreeView 上定义了任何其他绑定。你在 MouseDoubleClick 方法中还做了什么
  • 我已经关注了 MVVM。但是对于选定的项目,我正在使用事件处理程序。是这个问题吗?
  • 当我单击 TreeViewItem 的文本(空白)旁边的某个位置时,我只能重现您所描述的内容。如果我在 Text 上精确双击 SelectedItem 是正确的。
  • 我尝试调试。我为选定的更改事件添加了另一个事件。现在,当我双击子节点时,SelecteionChangedEvent 会命中两次。一个是给孩子的,第二个是给根的。

标签: c# wpf mvvm treeview


【解决方案1】:

这对我有用,举一个像你描述的那样简单的例子。 不过,我必须为发件人添加演员表,否则无法编译。

var selectedItem = (sender as TreeView).SelectedItem;

如果您这样做了,那么问题一定出在其他地方。您的代码中是否还有其他可能是问题根源的内容?

【讨论】:

  • 问题是别的。我的模型有问题。搞清楚。
最近更新 更多