C# Corner

Windows 8: Advanced Live Tiles, Part 2

How to schedule live tile and badge updates in a Windows 8 application.

In part 1 of this series, I covered how to add secondary live tiles to your application.  Today I'll cover how to schedule periodical updates of live tiles.

The first thing needed is a Web service from which to pull tiles and badges. Start by creating a new ASP.NET MVC 4 project, as depicted in Figure 1.

[Click on image for larger view.]
Figure 1. Creating a new ASP.NET MVC 4 Web application.

When prompted, select Web API as your web application project type, as shown in Figure 2.

[Click on image for larger view.]
Figure 2. Selecting Web API ASP.NET project type.

Next add a new ApiController class named TileController. The TileController will serve as a dynamic tile that can be retrieved through an HTTP GET request.  You can easily add a new ApiController by right-clicking on the Controllers folder, clicking on add and then clicking on the  Controller... button (see Figure 3).

[Click on image for larger view.]
Figure 3. Adding a new ApiController class.

In the TileController I only kept the Get method and changed the return type to XElement to force proper XML output. The method returns a new live tile with wide and square representations. The message in the tile includes a randomly-generated number to increase the chance of getting a unique tile when it's polled. See Listing 1 for the full TileController class source.

Badge notifications may also be polled, so I add a new ApiController named BadgeController. I've chosen to keep the BadgeController minimal, as well. I've modified the Get method to return an XElement. The method takes a single id parameter and generates a random number, just like the TileController's Get method. The XML for a badge is much simpler, though: its format is

<badge value=x" />

where x is a whole number. See Listing 2 for the full BadgeController source code.

To allow for easy testing of the Web API service, I added a mediaFormat query string mapping to the service. To force an XML format you can append


to the polled Uri. To enforce this rule, open up Global.asax.cs and add the QueryStringMapping in Listing 3 to the Application_Start method.

Now it's time to test out the Web API REST service. Create a C# new Metro-style application, as shown in Figure 4.

[Click on image for larger view.]
Figure 4. Creating a new Metro-style application.

Open up MainPage.xaml and add the XAML markup in the root Grid element from Listing 4.

The next step is to poll the Web API service and send the retrieved tile or badge notification to Windows 8. Open up MainPage.xaml.cs and add the NotificationType enum defined below.

public enum NotificationType

Next, I've added the AddItemsFromEnum<T> method used to populate the notification type and recurrence combo boxes.

 private void AddItemsFromEnum<T>(ComboBox comboBox)
            foreach (var value in Enum.GetValues(typeof(T)))
                comboBox.Items.Add(new { Text = value.ToString(), Value = value });

            comboBox.DisplayMemberPath = "Text";
            comboBox.SelectedValuePath = "Value";

The LoadRecurrences and LoadNotificationType methods call the AddItemsFromEnum<T> method, to populate the Recurrences and NotifcationTypes combo boxes respectively.

private void LoadRecurrences()
private void LoadNotificationTypes()

In the PollButton_Click event, I use WinRT to actually poll the completed Uri and update the tile or badge. The full polling Uri is assembled by taking the base Uri entered by the user and appending either Badge\id or Tile\id, depending on the selected notification type.

Uri pollUri = new Uri(PollingUri.Text);
            PeriodicUpdateRecurrence updateDuration = (PeriodicUpdateRecurrence)Recurrences.SelectedValue;
            NotificationType notificationType = (NotificationType)NotifiactionTypes.SelectedValue;
            Uri fullPollUri = new Uri(String.Format("{0}/{1}/{2}?mediaFormat=XML",
                pollUri.AbsoluteUri, notificationType, Number.Text));
Now I check the notificationType and use either the BadgeUpdateManager or TileUpdateManager helper classes to schedule the periodic badge or tile updates. See Listing 5 for the code to schedule the Tile or Badge updates. See Listing 6 for the entire MainPage code-behind source.

[Click on image for larger view.]
Figure 5. The completed automatic polling sample application.

You should now be able to run the application and schedule either Tile or Badge periodic polling.  

As you can see, scheduled live tile and badge updates can prove to be quite useful for applications that require periodically updated content. Stay tuned for the third and final installment, where I'll cover lock screen badge notifications.

About the Author

Eric Vogel is a Senior Software Developer for Red Cedar Solutions Group in Okemos, Michigan. He is the president of the Greater Lansing User Group for .NET. Eric enjoys learning about software architecture and craftsmanship, and is always looking for ways to create more robust and testable applications. Contact him at [email protected].

comments powered by Disqus


  • GitHub Copilot for Azure Gets Preview Glitches

    This reporter, recently accepted to preview GitHub Copilot for Azure, has thus far found the tool to be, well, glitchy.

  • New .NET 9 Templates for Blazor Hybrid, .NET MAUI

    Microsoft's fifth preview of .NET 9 nods at AI development while also introducing new templates for some of the more popular project types, including Blazor Hybrid and .NET MAUI.

  • What's Next for ASP.NET Core and Blazor

    Since its inception as an intriguing experiment in leveraging WebAssembly to enable dynamic web development with C#, Blazor has evolved into a mature, fully featured framework. Integral to the ASP.NET Core ecosystem, Blazor offers developers a unique combination of server-side rendering and rich client-side interactivity.

  • Nearest Centroid Classification for Numeric Data Using C#

    Here's a complete end-to-end demo of what Dr. James McCaffrey of Microsoft Research says is arguably the simplest possible classification technique.

  • .NET MAUI in VS Code Goes GA

    Visual Studio Code's .NET MAUI workload, which evolves the former Xamarin.Forms mobile-centric framework by adding support for creating desktop applications, has reached general availability.

Subscribe on YouTube