我有一个标准的WPF TreeView控件。 TreeViewItem带有一个箭头,如果展开TreeViewItem节点,该箭头会旋转。
如果选择了其子级之一,则TreeView默认将突出显示设置为折叠的节点。我设法确保当一个节点折叠时,我的VM上的SelectedItem不会更新,即使如果以前选择了一个子节点,控件中的选择图形也会跳到该节点。 (我通过将TreeView上的MouseUp事件绑定到我的VM上的命令而不是使用SelectedItemChanged来解决,我将SelectedItem作为commandaparameter提供,这样,除非用户真正单击节点,否则我的VM上的SelectedItem不会更改)
问题是,当人们再次使用箭头扩展折叠的节点时,我希望选择突出显示再次跳回子节点,这实际上是VM上我的集合中具有其属性IsSelected设置为的项目。是的。
如果我可以在MouseDown上的VM上触发一个命令,或者当ToggleButton被选中时,我可能可以解决此问题。
问题是,我没有找到一种方法来强制通过应用样式将TreeView的ToggleButton上的MouseDown事件触发我的VM上的命令。可能吗?如果是这样,怎么能做到这一点。我使用MVVM-Light,因此最好使用EventToCommand,但这似乎在Style中根本不起作用?
我想做什么...(并影响到TreeView中的ToggleButton)
<Style TargetType="{x:Type ToggleButton}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDown">
<command:EventToCommand Command="{Binding UpdateTreeState}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Style>