触发Property Trigger时如何设置viewmodel属性

Mik*_*ron 10 c# wpf xaml c#-4.0

我有一个带View Model的ListView.ItemsSource是View Model中的对象集合.视图模型中存在一些属性IsFlagOn.当ListViewItem检测到IsMouseOver时,我想在View Model中将该属性设置为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>
Run Code Online (Sandbox Code Playgroud)

更新:

错误是

无法解析样式属性'IsFlagOn'.验证拥有类型是Style的TargetType,还是使用Class.Property语法指定Property.

UPDATE(2):

这里有一些现有的XAML(以下).您可以看到ListView绑定了VM的属性AllItems.需要注意的是,列表中的每个项目都是一个VM,每个列都绑定在一起.对ListView VM或Item VM的ItemContainerStyle绑定也是如此?

<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>
Run Code Online (Sandbox Code Playgroud)

Adi*_*ter 8

这几乎就是为什么OneWayToSource绑定模式 - 能够从视图中更新视图模型.但是,由于IsMouseOver是只读属性,您将无法执行此操作(由于WPF中的错误):

<Setter Property="IsMouseOver" Value="{Binding Path=IsFlagOn, Mode=OneWayToSource}" />
Run Code Online (Sandbox Code Playgroud)

有办法绕过它.其中一些在这里描述:OneWayToSource绑定来自XAML中的readonly属性