Sometimes you want to tell the view to play an animation (Storyboard). One simple way to do this is to define a StartStoryboardMessage class, populate this with the name of a Storyboard to play, then send it to the Messenger.
public class StartStoryboardMessage
{
public string StoryboardName { get; set; }
public bool LoopForever { get; set; }
}
In the viewmodel when you want to tell the view to play an animation:
Messenger.Default.Send(new StartStoryboardMessage { StoryboardName = "TimerFinAnimation",LoopForever=true });
The view (i.e. in the code-behind) registers for these messages:
Messenger.Default.Register<StartStoryboardMessage>(this, x => StartStoryboard(x.StoryboardName, x.LoopForever));
...
private void StartStoryboard(string storyboardName, bool loopForever)
{
var storyboard = FindName(storyboardName) as Storyboard;
if (storyboard != null)
{
if (loopForever)
storyboard.RepeatBehavior = RepeatBehavior.Forever;
else
storyboard.RepeatBehavior = new RepeatBehavior(1);
storyboard.Begin();
}
}
SHARE: