当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),这样我就可以从我的代码中对这些变化做出反应?

我通过谷歌找到的所有例子都只解释了如何设置背景颜色。提前感谢你花时间回答这个可能微不足道的答案。

当ViewModel被悬停时,TreeViewItem通知它

在您的Style中,尝试添加将IsMouseDirectlyOverItem绑定到IsHoveredSetter,并使用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>