繁体   English   中英

属性触发器触发时如何设置viewmodel属性

[英]How to set a viewmodel property when Property Trigger fires

我有一个带视图模型的ListView。 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”。 验证所属类型是否为Style的TargetType,或使用Class.Property语法指定Property。

UPDATE(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>

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

<Setter Property="IsMouseOver" Value="{Binding Path=IsFlagOn, Mode=OneWayToSource}" />

虽然有一些方法可以解决它。 其中一些描述如下: XAML中的readonly属性的OneWayToSource绑定

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM