Как правильно запустить триггер в представлении из ViewModel?

Я хотел бы выполнить действие в моем представлении после создания события в ViewModel. Я нашел решение здесь, но это кажется довольно сложным. Нет ли встроенного механизма? Я также читал о повышении RoutedEvent в ViewModel, но этот подход требует, чтобы ViewModel знал тип приемника - это в соответствии с шаблоном MVVM?

РЕДАКТИРОВАТЬ:

Чтобы быть более конкретным, мне нужно запустить нижеупомянутую анимацию из ViewModel:

<Page.Resources>
    <Storyboard x:Key="MyStoryboard">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="MyTextBlock">
            <EasingDoubleKeyFrame KeyTime="0:0:1" Value="1"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</Page.Resources>

Сначала я придумал определение eventTrigger в page.triggers, но для этого требуется routedEvent. У Вас есть какие-то предложения?


person eklxw    schedule 05.12.2013    source источник


Ответы (1)


Создание событий в ViewModel и их перехват во View разрешено в MVVM.

Взгляните на это здесь:

http://msdn.microsoft.com/en-us/library/gg405484%28v=pandp.40%29.aspx

Лучшим примером для событий, возникающих в ViewModel и улавливаемых View, является единственное событие INotifyPropertyChanged.

Давайте подробнее остановимся на этом механизме.

Представление спрашивает данные, реализован ли в них интерфейс INotifyPropertyChanged. Если это так, то View подписывается на событие PropertyChanged.

Теперь вам нужно сделать то же самое. Сделайте так, чтобы View запрашивал конкретное событие, о котором вы хотите спросить, и когда оно будет найдено, просто подпишитесь на него. Вот и все :)

Кстати, если вы хотите, чтобы мы помогли нам с кодом, пожалуйста, сначала предоставьте код.

person dev hedgehog    schedule 06.12.2013
comment
Я только что добавил код к своему вопросу, чтобы он был более понятным. - person eklxw; 07.12.2013