MVVM Light Telling the View to play Storyboards

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 { getset; }
    public bool LoopForever { getset; }

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;
            storyboard.RepeatBehavior = new RepeatBehavior(1);


Add comment