这类似于这个问题,但是那个问题没有得到适用于我的情况的答案。
我有一个带有 DataTemplate 的列表框,用于显示项目列表。当鼠标悬停在列表中时,我希望能够告知列表中的每个项目。这是 XAML 中的示例:
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<Label x:Name="name" Content="{Binding Name}" />
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="{Binding MouseOverPropertyInModel}" Value="True" />
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
C#:
public partial class DataTriggerSetter : Window
{
public DataTriggerSetter()
{
InitializeComponent();
this.DataContext = new DataTriggerSetterViewModel();
}
}
public class DataTriggerSetterViewModel : ObservableObject
{
public ObservableCollection<SomeModel> Items { get; } = new ObservableCollection<SomeModel>
{
new SomeModel { Name = "Larry", },
new SomeModel { Name = "Atari", },
};
}
public class SomeModel
{
private bool mouseOver;
public string Name { get; set; }
public bool MouseOverPropertyInModel { get => mouseOver; set => throw new NotImplementedException(); }
}
基本上当鼠标悬停在其上时设置 MouseOverPropertyInModel 值。该示例不起作用,因为您无法在触发器设置器属性上设置绑定。
我想我可以通过将一个不可见的复选框绑定到属性来做到这一点,但似乎触发器应该能够写回驱动数据模板的数据,我只是不知道正确的方法。有什么建议吗?