Триггер события для анимации в Призме - PullRequest
0 голосов
/ 31 августа 2011

Я хочу запускать анимацию всякий раз, когда свойство установлено (скажем, «StatusMessages») в моей ViewModel.Разработчик уже настроил событие:

 eventAggregator.GetEvent<ShowStatusEvent>().Subscribe(
                    (message) => ShowStatus(message), ThreadOption.UIThread
                );

 private void ShowStatus(MyApp.MyModelViews.StatusMessage statusMessage){
   // set some values in status message view model
 }

Чего я не знаю, так это того, каким образом Prism подключил бы событие к моему представлению (предпочтительно в XAML), чтобы оно вызывалоанимация.Следующий «DataTrigger» работает (то есть запускает анимацию) только тогда, когда источник оценивается как определенное значение, скажем, изменено с «Отладка» на «Ошибка».Поэтому, если значение установлено 12 раз, но на одно и то же значение, скажем «Отладка» каждый раз, сборщик данных происходит не более одного раза (от значения по умолчанию до нового значения, при условии, что они не равны).

<DataTrigger Binding="{Binding DataContext.StatusMessages, ElementName=MyPanel}" Value="Error">...</DataTrigger>

Обходной путь, который мы сейчас нашли, состоит в том, чтобы добавить новое свойство bool, специально предназначенное для запуска анимации:

public bool CanBeginStoryboard{
    get
    {
        return canBeginStoryboard;
    }
    set
    {
       canBeginStoryboard = value;
       RaisePropertyChanged(() => CanBeginStoryboard);
    }
}
private void ShowStatus(MyApp.MyModelViews.StatusMessage statusMessage)
{
    CanBeginStoryboard = false;

    //// set some values in status message view model

    CanBeginStoryboard = true;
}
<DataTrigger Binding="{Binding DataContext.CanBeginStoryboard, ElementName=MyPanel}" Value="True">
<DataTrigger.EnterActions>
     <BeginStoryboard>...</BeginStoryboard>
</DataTrigger.EnterActions>

Я предполагаю, что существует стандартный "способ призмы" для таких действий(например, WPF "RoutedEvent"> "EventTrigger"?), что отличается от того, что мы здесь делаем?Кстати, мы используем Prism 4. Заранее спасибо.

...