当ViewModel被悬停时,TreeViewItem通知它
本文关键字:TreeViewItem 通知 ViewModel 悬停 | 更新日期: 2023-09-27 18:10:01
我目前正在使用这篇博文中的代码,以便让我的TreeView突出显示那些目前被鼠标悬停的项目。这是按预期工作,但现在我想要的TreeViewItems通知他们附加的viewmodel,当他们悬停/不悬停。
然而,我不知道如何才能做到这一点。相应的XAML代码如下:
<Style TargetType="{x:Type TreeViewItem}">
<Style.Triggers>
<Trigger Property="Controls:TreeViewHelper.IsMouseDirectlyOverItem" Value="True">
<Setter Property="Background" Value="Green" />
</Trigger>
</Stile.Triggers>
</Style>
我如何从我的ViewModel中绑定属性,名为TreeNodeModel。悬停到TreeViewItem(或可能附加的依赖属性ismousedireclyoveritem),这样我就可以从我的代码中对这些变化做出反应?
我通过谷歌找到的所有例子都只解释了如何设置背景颜色。提前感谢你花时间回答这个可能微不足道的答案。
在您的Style
中,尝试添加将IsMouseDirectlyOverItem
绑定到IsHovered
的Setter
,并使用OneWayToSource
绑定模式以正确的方式推送值:
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="Controls:TreeViewHelper.IsMouseDirectlyOverItem"
Value="{Binding Path=IsHovered, Mode=OneWayToSource}" />
<Style.Triggers>
...
</Style>
EDIT:由于IsMouseDirectlyOver
是只读的,而只读dp不能成为任何绑定的目标,Fredrik Hedblad的PushBinding
可能是一个可能的解决方案:
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="pb:PushBindingManager.StylePushBindings">
<Setter.Value>
<pb:PushBindingCollection>
<pb:PushBinding TargetDependencyProperty="Controls:TreeViewHelper.IsMouseDirectlyOverItem"
Path="IsHovered" />
</pb:PushBindingCollection>
</Setter.Value>
</Setter>
<Style.Triggers>
...
</Style>