Триггер WPF не может изменить свойство в mvvm - PullRequest
0 голосов
/ 05 февраля 2020

Я хотел, чтобы это произошло, изменив свойство в ViewModel, используя тег Trigger в xaml.

Код, который я сделал, был таким:

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

Я привязал данные к LogoHeight свойство во ViewModel, и я хотел установить это свойство равным 150, когда родительская сетка достаточно велика, чтобы показать Lo go Image.

Она отлично работает в пользовательском интерфейсе , но оно не изменило LogoHeight свойство. То же самое происходит, когда я использую анимацию с тегом Storyboard.

Это нормальные вещи, которые нельзя изменить с помощью тега Trigger или анимации в теге Storyboard.

Подскажите пожалуйста, есть ли способ изменить свойство в теге Trigger или Storyboard.

Спасибо.

1 Ответ

0 голосов
/ 05 февраля 2020

A Setter в Style не может установить свойство модели представления. Он может установить только свойство элемента, к которому применяется Style, то есть Grid в этом случае.

Вы можете обойти это, используя Storyboard, который анимирует свойство источника:

Установка логического свойства ViewModel внутри раскадровки

...