【发布时间】:2014-03-14 11:17:55
【问题描述】:
我有一个带有自定义项目模板的ListBox,当鼠标悬停在ListBox 中的项目上时,我希望在DataContext 上设置一个属性(ListBoxItem 绑定到的项目)。
我可以很容易地改变视觉上的东西,例如当我使用DataTrigger 悬停时的背景颜色:
<Style x:Key="MyListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border Name="Border">
<Image Source="{Binding ImageSource}" Width="32" Height="32" Margin="2,0,2,0"/>
</Border>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding IsMouseOver,RelativeSource={RelativeSource Self}}"
Value="True">
<Setter TargetName="Border" Property="Background" Value="Red" />
</DataTrigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Border" Property="Background" Value="Gray" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
但我不知道如何让DataTrigger 在我的DataContext 上设置一个属性,以便我的 ViewModel 可以对悬停做出反应。
不幸的是,在这个项目中,我无法使用 Blend 交互 DLL,因为我无法在我们的安装过程中引入新的依赖项,因此通常推荐用于此类任务。
【问题讨论】:
-
你需要设置什么类型的属性??
-
您是否尝试将上下文添加为资源并将
DataContext属性的Value绑定到DataTrigger中的该资源? -
@petchirajan 我只想通知我的视图模型。我刚刚获得了一种相当繁琐的技术,它使用两个附加的行为和两个工作的 ICommand。
-
@HamletHakobyan - 我在这方面尝试的几乎所有东西都遇到了语法错误。
-
不幸或幸运的是,如果不包括
Interaction.Triggers,这种繁琐的技术(附加行为)可能是MVVM风格中唯一可能的选择。
标签: c# wpf xaml data-binding mvvm