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
相关产品推荐
相关产品推荐

