WPF触发器可以';不要更改mvvm中的属性

WPF触发器可以';不要更改mvvm中的属性,wpf,xaml,mvvm,triggers,Wpf,Xaml,Mvvm,Triggers,我想在xaml中使用Trigger标记更改ViewModel中的属性 我做的代码是这样的 <Grid x:Name="LogoGrid"> <Grid.Style> <Style TargetType="Grid"> <Setter Property="Height" Value="{Binding LogoHeight, Mode=TwoWa

我想在xaml中使用
Trigger
标记更改ViewModel中的属性

我做的代码是这样的

        <Grid x:Name="LogoGrid">
            <Grid.Style>
                <Style TargetType="Grid">
                    <Setter Property="Height" Value="{Binding LogoHeight, Mode=TwoWay}"/>

                    <Style.Triggers>
                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Grid}, Path=ActualHeight, Converter={StaticResource ImageHeight}}" Value="False">
                            <Setter Property="Height" Value="150"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Grid.Style>
            <Image Source="/Resources/Logo/Logo.png" Style="{StaticResource GameWindowLogoStyle}"/>
        </Grid>

我将数据绑定到ViewModel中的LogoHeight属性,并希望在父网格足够大以显示徽标图像时将该属性设置为150

它在UI中运行良好。但它并没有改变LogoHeight属性。 当我使用带有
序列图像板
标记的动画时,也会发生同样的事情

属性不能通过
Trigger
标记或
Storyboard
标记中的动画来更改是正常的吗

请告诉我是否有方法更改
触发器
标记或
情节提要
标记中的属性


谢谢。

样式中的
Setter
无法设置视图模型的属性。它只能设置应用
样式的元素的属性,即在这种情况下的
网格

您可以使用为源属性设置动画的
故事板来解决此问题:


您可以将控件的实际高度与Mode=OneWayToSource绑定,并在您的视图模型中使用,因为您用MVVM标记了您的问题。我必须告诉您,与视图相关的数据(如控件的高度或高度)通常不属于视图模型。触发是正确的方法。但是,如果控件的维度取决于父控件的维度,则将触发器绑定到此父控件的属性,例如
高度
。您可以使用
IValueConverter
执行此值的附加计算或转换。转换器甚至可以替换触发器,因为触发器不能检查“大于”之类的条件。其思想是通过触发器设置高度,而触发器又双向绑定到VM属性。