Telling a View to display a Message Dialog from the ViewModel With MVVMLight in Windows 8.1 Store Apps

The technique below is one technique, others exist, but the design goals of this approach are:

  1. The ViewModel cannot know or reference the View
  2. The ViewModel should should not care how the View displays or interacts with the user (it could be a dialog box, a flyout, etc.)
  3. The ViewModel must be Portable Class Library compatible and View agnostic, e.g. not need to know about dialog buttons, etc.
  4. Choices the user makes in the View dialog should result in Commands being executed on the ViewModel
  5. The ViewModel must not specify the content of the message text, button labels, etc. – the View should be responsible for the text/content of the message

One way to think about these design goals is that the ViewModel is asking for some semantic message/dialog to be displayed in the View.

Defining a Message to be used with the MVVM Light Messenger

The way the ViewModel “tells” the View to create a dialog is by sending a message using the MVVM Light Messenger.

First we define a custom message:

using System.Windows.Input;
using GalaSoft.MvvmLight.Messaging;

namespace Project.Portable.ViewModel.Messages
    public class ShowDialogMessage : MessageBase
        public ICommand Yes { get; set; }
        public ICommand No { get; set; }
        public ICommand Cancel { get; set; }

This message allows us to define the commands that the view will call, based on the choice that the user makes in the dialog.



Finding Total Number of Windows Store Downloads on the Dev Center Dashboard Page

Just hacked this JavaScript together to calculate the total number of downloads of Windows Store apps.

var totalDownloads = 0;

$("span:contains('Downloads')").siblings().each(function( index ) {
    var noCommas = $( this ).text().replace(',','');
    totalDownloads += parseInt(noCommas);


Just go to your Dashboard in your Windows Dev Center and open your browsers developer tools and paste it into the JavaScript console.

I’m sure there’s nicer looking JavaScript to do this!