我有一个带有视图模型的列表视图。ItemsSource是视图模型中对象的集合。在视图模型上存在一个标志属性IsFlagOn。当ListViewItem检测到IsMouseOver时,我希望将该属性设置为True。然后将其他UI元素绑定到同一属性,以便在切换MouseOver时更改视图。
我该如何在XAML中实现这个功能?
我会想象类似于下面的代码(但这会导致错误):
<Style> <!-- on the ListViewItem -->
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="DataContext.IsFlagOn" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
更新:
错误为:
无法解析样式属性“IsFlagOn”。请验证所有者类型是否为样式的 TargetType,或使用“Class.Property”语法指定该属性。
更新(2):
以下是现有 XAML 的部分内容。可以看到 ListView 绑定了 VM 的一个属性 AllItems。重要的是要注意列表中的每个项都是一个 VM,其中每个列都被绑定。因此,ItemContainerStyle 是绑定到 ListView VM 还是 Item VM?
<ListView Itemssource="{Binding AllItems}">
<ListView.ItemContainerStyle>
<Style> <!-- on the ListViewItem -->
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="DataContext.IsFlagOn" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<!-- ... -->
</GridView>
</ListView.View>
</ListView>
INotifyPropertyChanged
接口,因此IsFlagOn
不是一个依赖属性。 - Mike Caron