Introducing (probably) The World's Only Mocking Framework for Windows Phone 7 (WP7)

Introducing MoqaLate

Whilst I love developing apps for Windows Phone 7, the testing aspect is hard! I'm a TDD-er by default and it's such a pain to have to hand roll my own mock objects. 

So I created MoqaLate.

It's an alpha version but is usable now.

Not sure framework is the right term but it's something that generates mocks from your interfaces.

Add to existing project from NuGet:

PM> Install-Package MoqaLate

Read more about the project.

Download an example solution.

Read (currently very basic!) documentation.

View on

Awesome overview diagram :)



January Monthly Windows Phone 7 Roundup

This is the first of a series of monthly posts highlighting some useful and cool Windows Phone 7 stuff.

There will be a post on or about the last day of each month, with an overall "post of the month"

PhoneGap now fully supports Windows Phone

Delete from a List animation

Caliburn.Micro v1.3 RTW With Mango Support

Mango Sample: a Secondary Tile in 5 Minutes

Speed up HTTP-heavy apps by using GZip

Change to Light/Dark theme in app code

A Lap Around Windows Phone 7.5 webcast

Changing the keyboard and IsNumeric

Post of the Month

From Concept to Code in 6 hours: Shipping my first Windows Phone App


Pushing To AppHarbor Using Mercural via Bitbucket

Rather than pushing Git to AppHarbor, you can create a (free) Mercurial repo on Bitbucket, grant read permissions to an AppHarbor user, set up a Bitbucket push to an AppHarbor build URL, then when you push to Bitbucket, AppHarbor will automatically pull your changes, build your app, run unit tests and auto deploy. Phew, long sentence :)


Baby Steps - Getting Started With Windows Phone 7 Development

These links are recommended reading to get started understanding developing for the Windows Phone 7 platform.

Recommended to be read in the order presented here, from most lightweight to most heavyweight.

The Metro design language overview - good for initial intro on what the platform stands for and the 'feel'.

Cool A3 Cheat Sheet showing loads of examples of usage of WP7 controls

Awesome Free eBook for Developers covering some important areas, plus some awesome inspirational examples of apps people have created.

UI Design and Interaction Guide for Windows Phone - 190+ pages - contains loads of detail

Happy reading :)


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);


MVVM Light Messenger Action Executing Multiple Times

With MVVM Light you can get into a situation where you code-behind's message handler gets called multiple times.

If the ctor for the view is registering for a message then the every time the view loads another subscription will be added; then when the message is sent the are effectively 2 'listeners' which end up executing the registered Action method multiple times.

One solution to this is to make sure you un-register when the view unloads.

The example below shows the code-behind for a simple settings page that registers for a DialogMessage in the ctor, and un-registers when the page is done with.

    public partial class Settings : PhoneApplicationPage
        public Settings()
            Messenger.Default.Register<DialogMessage>(this, DialogMessageHandler);
        private void DialogMessageHandler(DialogMessage message)
            var result = MessageBox.Show(message.Content, message.Caption, message.Button);
        private void PhoneApplicationPage_Unloaded(object sender, RoutedEventArgs e)