MVVM - Trigger Storyboard in die View-Modell-in Silverlight
Habe ich ein paar Storyboards in meiner Ansicht, dass ich würde gerne die trigger aus dem ViewModel, wenn möglich. Gibt es eine einfache Möglichkeit oder elegante Möglichkeit dies zu tun. Hier ist, was ich versuche zu tun.
Person auf einen Knopf Klickt-->RelayCommand (Im ViewModel), die Relais-Befehl sollte dann spielen Sie das storyboard. Auch eine weitere Sache, ich möchte auch Auslöser der storyboard-animation von selbst in das ViewModel, ohne jegliche Interaktion.
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<cmd:EventToCommand Command="{Binding ButtonPress}" CommandParameterValue="RedButtonLight">
</cmd:EventToCommand>
</i:EventTrigger>
</i:Interaction.Triggers>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, es ist lange her. Aber ich habe geschrieben einen ausführlichen blog-post über die Auslösung von Storyboards und MVVM.
http://mark.mymonster.nl/2010/12/14/trigger-a-storyboard-on-viewmodel-changes/
Wenn Sie die Taste klicken Sie rein macht-ein Sicht-bezogene Sache und nicht eine tatsächliche Anwendungslogik, dann würde ich argumentieren, dass Sie tun können, all dies in der code-behind der view-Klasse.
Wenn dies nicht der Fall ist, dann würde ich eine Eigenschaft auf der Präsentation (ViewModel), um zu signalisieren, dass die Präsentation in einem Zustand sind, und haben die Aussicht reagieren, um das PropertyChanged-Ereignis und starten Sie das storyboard. Dies wird vorausgesetzt, Sie sind implimenting INotifyPropertyChanged auf Ihre Präsentation Klasse.
Haben Sie einen Blick auf die Ausdruck Muster. Gibt es einen trigger für Ereignisse, die von den datacontext.
DataEventTrigger
Könnten Sie verwenden, um trigger eine
ControlStoryboardAction
zu starten die story board, wenn Ihr viewmodel wirft ein bestimmtes Ereignis.Ihre viewmodel könnte, dann heben Sie die Veranstaltung als Teil des Befehls sowie zu anderen Zeiten.
Heres, wie Sie es tun können, in der Mischung, ohne zu berühren eine Zeile von xaml oder im code :
http://www.basarat.com/2011/05/expression-blend-starting-storyboard.html