You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TreeView展开器点击未触发SelectedItemChanged事件问题

解决TreeView点击展开器时命令不执行的问题

你的问题核心在于:TreeView.SelectedItemChanged事件仅当选中的节点发生变更时才会触发,点击展开/折叠箭头时,当前选中项并没有改变,因此绑定的SelectedPluginChangedCommand不会执行。

要让展开操作也触发命令,需要监听TreeViewItem的Expanded(或Collapsed)事件,将其绑定到目标命令。以下是修改后的完整XAML代码:

<TreeView Name="pluginsTreeView" ItemsSource="{Binding Plugins}">
    <!-- 保留原有的SelectedItemChanged触发器 -->
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectedItemChanged">
            <i:InvokeCommandAction Command="{Binding SelectedPluginChangedCommand}" 
                                   CommandParameter="{Binding ElementName=pluginsTreeView, Path=SelectedItem}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type plugins:PluginBase}" ItemsSource="{Binding Tabs}">
            <TextBlock Text="{Binding Name, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
        </HierarchicalDataTemplate>
        <DataTemplate DataType="{x:Type plugins:TabBase}">
            <TextBlock Text="{Binding Path=Name}" />
        </DataTemplate>
    </TreeView.Resources>
    <TreeView.ItemContainerStyle>
        <Style BasedOn="{StaticResource MaterialDesignTreeViewItem}" TargetType="TreeViewItem">
            <Setter Property="IsEnabled" Value="{Binding IsEnabled}" />
            <!-- 添加展开/折叠事件的命令绑定 -->
            <Setter Property="i:Interaction.Triggers">
                <Setter.Value>
                    <i:EventTrigger EventName="Expanded">
                        <i:InvokeCommandAction Command="{Binding DataContext.SelectedPluginChangedCommand, RelativeSource={RelativeSource AncestorType=TreeView}}" 
                                               CommandParameter="{Binding}" />
                    </i:EventTrigger>
                    <i:EventTrigger EventName="Collapsed">
                        <i:InvokeCommandAction Command="{Binding DataContext.SelectedPluginChangedCommand, RelativeSource={RelativeSource AncestorType=TreeView}}" 
                                               CommandParameter="{Binding}" />
                    </i:EventTrigger>
                </Setter.Value>
            </Setter>
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView>

关键说明:

  • TreeViewItem的DataContext是对应的节点数据(PluginBase或TabBase),因此需要通过RelativeSource向上找到TreeView的DataContext,才能绑定到SelectedPluginChangedCommand。
  • 若只需要在展开时触发命令,可移除Collapsed事件的触发器;反之亦然。
  • 命令参数{Binding}会传入当前展开/折叠的节点数据,你可以根据需求调整参数内容(比如传入pluginsTreeView.SelectedItem保持和原逻辑一致)。

内容的提问来源于stack exchange,提问作者James0n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 12:52:36