我可以使用触发器写回 DataContext 中的数据模型吗?

问题描述 投票:0回答:0

这类似于这个问题,但是那个问题没有得到适用于我的情况的答案。

我有一个带有 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 值。该示例不起作用,因为您无法在触发器设置器属性上设置绑定。

我想我可以通过将一个不可见的复选框绑定到属性来做到这一点,但似乎触发器应该能够写回驱动数据模板的数据,我只是不知道正确的方法。有什么建议吗?

c# wpf binding
© www.soinside.com 2019 - 2024. All rights reserved.