<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>caliburnmicro Wiki Rss Feed</title><link>http://caliburnmicro.codeplex.com/</link><description>caliburnmicro Wiki Rss Description</description><item><title>New Comment on "Introduction"</title><link>https://caliburnmicro.codeplex.com/wikipage?title=Introduction&amp;ANCHOR#C27511</link><description>typo&amp;#58;  &amp;#34;Simply inherit from Bootsrapper&amp;#34; --&amp;#62; should be  &amp;#34;BootsTrapper&amp;#34;</description><author>wst</author><pubDate>Fri, 17 May 2013 13:13:57 GMT</pubDate><guid isPermaLink="false">New Comment on "Introduction" 20130517011357P</guid></item><item><title>Updated Wiki: Documentation</title><link>https://caliburnmicro.codeplex.com/documentation?version=89</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Documentation&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;Getting Started
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Introduction&amp;referringTitle=Documentation"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Obtain%20and%20Build%20the%20Code&amp;referringTitle=Documentation"&gt;Obtain and Build the Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Nuget&amp;referringTitle=Documentation"&gt;Nuget&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Cheat%20Sheet&amp;referringTitle=Documentation"&gt;Cheat Sheet&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Soup to Nuts
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Basic%20Configuration%2c%20Actions%20and%20Conventions&amp;referringTitle=Documentation"&gt;Basic Configuration, Actions and Conventions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Customizing%20The%20Bootstrapper&amp;referringTitle=Documentation"&gt;Customizing The Bootstrapper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&amp;referringTitle=Documentation"&gt;All About Actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Working with Windows Phone 7 &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207&amp;referringTitle=Documentation"&gt;v1.0&lt;/a&gt; &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207%20v1.1&amp;referringTitle=Documentation"&gt;v1.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20WinRT&amp;referringTitle=Documentation"&gt;Working with WinRT&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://compiledexperience.com/blog/posts/share-caliburn"&gt;WinRT Sharing with Caliburn Micro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://compiledexperience.com/blog/posts/settings-caliburn"&gt;WinRT Settings with Caliburn Micro&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=IResult%20and%20Coroutines&amp;referringTitle=Documentation"&gt;IResult and Coroutines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Screens%2c%20Conductors%20and%20Composition&amp;referringTitle=Documentation"&gt;Screens, Conductors and Composition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Conventions&amp;referringTitle=Documentation"&gt;All About Conventions&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=View%2fViewModel%20Naming%20Conventions&amp;referringTitle=Documentation"&gt;View&amp;#47;ViewModel Naming Conventions&lt;/a&gt; (v1.3)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Handling%20Custom%20Conventions&amp;referringTitle=Documentation"&gt;Handling Custom Conventions&lt;/a&gt; (v1.3)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Using%20the%20NameTransformer&amp;referringTitle=Documentation"&gt;Using the NameTransformer - Advanced&lt;/a&gt; (v1.1)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Event%20Aggregator&amp;referringTitle=Documentation"&gt;The Event Aggregator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Simple%20IoC%20Container&amp;referringTitle=Documentation"&gt;The Simple IoC Container&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Service%20Locator&amp;referringTitle=Documentation"&gt;The Service Locator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Window%20Manager&amp;referringTitle=Documentation"&gt;The Window Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Design-Time%20Support&amp;referringTitle=Documentation"&gt;Design-Time Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Async%20%28Task%29%20Support&amp;referringTitle=Documentation"&gt;Async &amp;#40;Task&amp;#41; Support&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;External Tutorial
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mindscapehq.com/blog/index.php/2012/01/12/caliburn-micro-part-1-getting-started/"&gt;Mindscape&amp;#39;s Getting Started Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.markermetro.com/2011/05/technical/mvvm-friendly-visual-state-management-with-windows-phone-7/"&gt;Marker Metro’s Visual State Management with WP7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.terrymarshall.com.au/Blog/tabid/162/tagid/37/Caliburn-Micro.aspx"&gt;Terry Marshall&amp;#39;s WinRT Tutorial Series&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wp.qmatteoq.com/first-steps-with-caliburn-micro-in-windows-phone-8-the-complete-series/"&gt;Matteo Pagani&amp;#39;s WP8 Tutorials&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Recipes
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=LoadCatalog%20Result&amp;referringTitle=Documentation"&gt;LoadCatalog Result&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Testing%20Coroutines&amp;referringTitle=Documentation"&gt;Testing Coroutines&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;i&gt;NOTE: Recipes are not maintained by the Caliburn.Micro project but by their contributors. Please contact the contributor with any issues you may find.&lt;/i&gt;&lt;/blockquote&gt;
&lt;ul&gt;&lt;li&gt;Contests
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=2010%20Caliburn.Micro%20Application%20Contest%20Winners&amp;referringTitle=Documentation"&gt;2010 Caliburn.Micro Application Contest Winners&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;3rd Party Extensions
&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/vcaraulean/Caliburn.Micro.Telerik"&gt;Telerik Integration&lt;/a&gt; (for SL 5.0 and WPF 4.0)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://calmicrodevexpress.codeplex.com/"&gt;DevExpress Integration&lt;/a&gt; (for WPF 4.0)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dchaib/Caliburn.Micro.ReactiveUI"&gt;ReactiveUI Integration&lt;/a&gt; (for SL 5.0, WPF 4.5 and WinRT)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kamranayub/CaliburnBindableAppBar"&gt;Bindable ApplicationBar&lt;/a&gt; (for WP 7.1 and WP 8.0)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tibel/Caliburn.Micro.Extras"&gt;Some Extras&lt;/a&gt; (for all platforms)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;i&gt;NOTE: Please contact us if you want a project to be added to the list.&lt;/i&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>McDonnellDean</author><pubDate>Tue, 14 May 2013 22:07:02 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20130514100702P</guid></item><item><title>Updated Wiki: The Service Locator</title><link>https://caliburnmicro.codeplex.com/wikipage?title=The Service Locator&amp;version=1</link><description>&lt;div class="wikidoc"&gt;&lt;i&gt;To Follow...&lt;/i&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>McDonnellDean</author><pubDate>Tue, 14 May 2013 22:06:20 GMT</pubDate><guid isPermaLink="false">Updated Wiki: The Service Locator 20130514100620P</guid></item><item><title>Updated Wiki: The Event Aggregator</title><link>https://caliburnmicro.codeplex.com/wikipage?title=The Event Aggregator&amp;version=10</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;The Event Aggregator&lt;/h1&gt;Caliburn.Micro comes pre-bundled with an Event Aggregator, conveniently called EventAggregator. For those unfamiliar, an Event Aggregator is a service that provides the ability to publish an object from one entity to another in a loosely based fashion. &lt;a href="http://martinfowler.com/eaaDev/EventAggregator.html"&gt;Event Aggregator&lt;/a&gt; is actually a pattern and it&amp;#39;s implementation can vary from framework to framework. For Caliburn.Micro we focused on making our Event Aggregator implementation simple to use without sacrificing features or flexibility.&lt;br /&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;As previously mentioned we provide an implementation of Event Aggregator for you. This implementation implements the IEventAggregator interface, however, you can provide your own implementation if required. Please take a moment to familiarize yourself with the IEventAggregator signature.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;interface&lt;/span&gt; IEventAggregator {
    	Action&amp;lt;Action&amp;gt; PublicationThreadMarshaller { &lt;span style="color:Blue;"&gt;get&lt;/span&gt;; &lt;span style="color:Blue;"&gt;set&lt;/span&gt;; }
    	&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; HandlerExistsFor(Type messageType);
    	&lt;span style="color:Blue;"&gt;void&lt;/span&gt; Subscribe(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; subscriber);
    	&lt;span style="color:Blue;"&gt;void&lt;/span&gt; Unsubscribe(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; subscriber);
    	&lt;span style="color:Blue;"&gt;void&lt;/span&gt; Publish(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message);
    	&lt;span style="color:Blue;"&gt;void&lt;/span&gt; Publish(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message, Action&amp;lt;Action&amp;gt; marshal);
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Creation and Lifecycle&lt;/h3&gt;To use the EventAggregator correctly it must exist as an application level service. This is usually achieved by creating an instance of EventAggregator as a &lt;a href="http://en.wikipedia.org/wiki/Singleton_pattern"&gt;Singleton&lt;/a&gt;. We recommend that you use &lt;a href="http://en.wikipedia.org/wiki/Dependency_Injection"&gt;Dependency Injection&lt;/a&gt; to obtain a reference to the instance although we do not enforce this. The sample below details how to create an instance of EventAggregator, add it to the &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Simple%20IoC%20Container&amp;amp;referringTitle=Documentation"&gt;IoC container&lt;/a&gt; included with Caliburn.Micro  (although you are free to use any container you wish) and request it in a ViewModel.&lt;br /&gt; &lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Green;"&gt;// Creating the EventAggregator as a singleton.&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; Bootstrapper : BootstrapperBase {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; SimpleContainer _container =
            &lt;span style="color:Blue;"&gt;new&lt;/span&gt; SimpleContainer();

         &lt;span style="color:Green;"&gt;// ... Other Bootstrapper Config&lt;/span&gt;

        &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Configure(){
            _container.Singleton&amp;lt;IEventAggregator, EventAggregator&amp;gt;();
        }

        &lt;span style="color:Green;"&gt;// ... Other Bootstrapper Config&lt;/span&gt;
    }

    &lt;span style="color:Green;"&gt;// Acquiring the EventAggregator in a viewModel.&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
        }
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;Note that we are utilizing the &lt;a href="http://caliburnmicro.codeplex.com/wikipage?title=Customizing%20The%20Bootstrapper&amp;amp;referringTitle=Documentation"&gt;Bootstrapper&lt;/a&gt;, and specifically the Configure method, in the code above. There is no requirement to wire up the EventAggregator in a specific location, simply ensure it is created before it is first requested.&lt;/i&gt;&lt;br /&gt; 
&lt;h3&gt;Publishing Events&lt;/h3&gt;Once you have obtained a reference to the EventAggregator instance you are free to begin publishing Events. An Event or message as we call it to distinguish between .Net events, can be any object you like. There is no requirement to build your Events in any specific fashion. As you can see in the sample below the Publish method can accept any entity that derives from System.Object and will happily publish it to any interested subscribers.&lt;br /&gt; &lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;

            _eventAggregator.Publish(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; &lt;span style="color:Blue;"&gt;object&lt;/span&gt;());
            _eventAggregator.Publish(&lt;span style="color:#A31515;"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;);
            _eventAggregator.Publish(22);
        }
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Publishing using a custom thread Marshal&lt;/h3&gt;By convention, the EventAggregator publishes on the UI thread. You can override this in two places, globally and per publish. Consider the following code below which publishes the message supplied on a background thread.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    _eventAggregator.Publish(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; &lt;span style="color:Blue;"&gt;object&lt;/span&gt;(), action =&amp;gt; {
                    Task.Factory.StartNew(action);
                });
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;You can also swap out the default marshaller globally.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    _eventAggregator.PublicationThreadMarshaller = action =&amp;gt; { action(); };
&lt;/pre&gt;&lt;/div&gt; 
&lt;h2&gt;Subscribing To Events&lt;/h2&gt;Any entity can subscribe to any Event by providing itself to the EventAggregator via the Subscribe method. To keep this functionality easy to use we provide a special interface (IHandle&amp;lt;T&amp;gt;) which marks a subscriber as interested in an Event of a given type.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    IHandle&amp;lt;TMessage&amp;gt; : IHandle {
	    &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle&amp;lt;TMessage&amp;gt;(TMessage message);
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Notice that by implementing the interface above you are forced to implement the method Handle(T message) were T is the type of message you have specified your interest in. This method is what will be called when a matching Event type is published. &lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : IHandle&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// Handle the message here.&lt;/span&gt;
        }
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;You may be wondering about IHandle&amp;lt;T&amp;gt; implementing IHandle. IHandle is a &lt;a href="http://stackoverflow.com/questions/1023068/what-is-the-purpose-of-a-marker-interface"&gt;Marker Interface&lt;/a&gt; used internally to assist with reflecting over various IHandle Implementations, you do not need to work with this interface directly.&lt;/i&gt;&lt;br /&gt; 
&lt;h3&gt;Subscribing To Many Events&lt;/h3&gt;It is not uncommon for a single entity to want to listen for multiple event types. Because of our use of generics this is as simple as adding a second IHandle&amp;lt;T&amp;gt; interface to the subscriber. Notice that Handle method is now overloaded with the new Event type.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : IHandle&amp;lt;&lt;span style="color:Blue;"&gt;string&lt;/span&gt;&amp;gt;, IHandle&amp;lt;&lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;
    
        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }
    
        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;string&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// Handle the message here.&lt;/span&gt;
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// Handle the message here.&lt;/span&gt;
        }
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Polymorphic Subscribers&lt;/h3&gt;Caliburn.Micro&amp;#39;s EventAggregator honors polymorphism. When selecting handlers to call, the EventAggregator will fire any handler who&amp;#39;s Event type is assignable from the Event being sent. This results in a lot of flexibility and helps reuse.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : IHandle&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;, IHandle&amp;lt;&lt;span style="color:Blue;"&gt;string&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;
    
        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
            _eventAggregator.Publish(&lt;span style="color:#A31515;"&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;);
        }
    
        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// This will be called&lt;/span&gt;
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;string&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// This also&lt;/span&gt;
        }
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;In the example above, because String is derived from System.Object both handlers will be called when a String message is published.&lt;br /&gt;&lt;br /&gt;
&lt;h3&gt;Querying Handlers&lt;/h3&gt;When a subscriber is passed to the EventAggregator it is broken down into a special object called a Handler and a weak reference is maintained. We provide a mechanism to query the EventAggregator to see if a given Event type has any handlers, this can be useful in specific scenarios were at least one handler is assumed to exist.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : IHandle&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message){
            &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (_eventAggregator.HandlerExistsFor(&lt;span style="color:Blue;"&gt;typeof&lt;/span&gt;(SpecialMessageEvent))){
                _eventAggregator.Publish(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SpecialEventMessage(message));
            }
        }
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Coroutine Aware Subscribers&lt;/h3&gt;If you are using the EventAggregator with Caliburn.Micro as opposed to on it&amp;#39;s own via Nuget, access to &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=IResult%20and%20Coroutines&amp;amp;referringTitle=Documentation"&gt;Coroutine&lt;/a&gt; support within the Event Aggregator becomes available. Coroutines are supported via the IHandleWithCoroutine&amp;lt;T&amp;gt; Interface.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;interface&lt;/span&gt; IHandleWithCoroutine&amp;lt;TMessage&amp;gt; : IHandle {
		IEnumerable&amp;lt;IResult&amp;gt; Handle(TMessage message);
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The code below utilizes Coroutines with the EventAggregator. In this instance Activate will be fired asynchronously, Do work however, will not be called until after Activate has completed.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : Screen, IHandleWithCoroutine&amp;lt;EventWithCoroutine&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; IEnumerable&amp;lt;IResult&amp;gt; Handle(EventWithCoroutine message) {
            &lt;span style="color:Blue;"&gt;yield&lt;/span&gt; &lt;span style="color:Blue;"&gt;return&lt;/span&gt; message.Activate();
            &lt;span style="color:Blue;"&gt;yield&lt;/span&gt; &lt;span style="color:Blue;"&gt;return&lt;/span&gt; message.DoWork();
        }
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; EventWithCoroutine {
        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; IResult Activate() {
            &lt;span style="color:Blue;"&gt;return&lt;/span&gt; &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskResult(Task.Factory.StartNew(() =&amp;gt; {
                    &lt;span style="color:Green;"&gt;// Activate logic&lt;/span&gt;
                }));
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; IResult DoWork() {
            &lt;span style="color:Blue;"&gt;return&lt;/span&gt; &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskResult(Task.Factory.StartNew(() =&amp;gt; {
                &lt;span style="color:Green;"&gt;// Do work logic&lt;/span&gt;
            }));
        }
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Task Aware Subscribers&lt;/h3&gt;Caliburn.Micro also provides support for task based subscribers where the asynchronous functionality of Coroutines is desired but in a more light weight fashion. To utilize this functionality implement the IHandleWithTask&amp;lt;T&amp;gt; Interface, seen below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;interface&lt;/span&gt; IHandleWithTask&amp;lt;TMessage&amp;gt; : IHandle {
        Task Handle(TMessage message);
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Any subscribers that implement the above interface can then handle events in Task based manner.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : Screen, IHandleWithTask&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; Task Handle(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message) {
            &lt;span style="color:Blue;"&gt;return&lt;/span&gt; Task.Factory.StartNew(() =&amp;gt; message);
        }
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Unsubscribing and Leaks&lt;/h3&gt;The problem with standard .Net events is that they are prone to memory leaks. We avoid this situation by maintaining a weak reference to subscribers. If the only thing that references a subscriber is the EventAggregator then it will be allowed to go out of scope and ultimately be garbage collected. However, we still provide an explicit way to unsubscribe to allow for conditional handling as seen below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : Screen, IHandle&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// Handle the message here.&lt;/span&gt;
        }

        &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; OnActivate() {
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
            &lt;span style="color:Blue;"&gt;base&lt;/span&gt;.OnActivate();
        }

        &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; OnDeactivate(&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; close) {
            _eventAggregator.Unsubscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
            &lt;span style="color:Blue;"&gt;base&lt;/span&gt;.OnDeactivate(close);
        }
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;In the code above Screen is used to expose lifecycle events on the ViewModel. More on this can be found on this in the &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Screens%2c%20Conductors%20and%20Composition&amp;amp;referringTitle=Documentation"&gt;Screens, Conductors and Composition&lt;/a&gt; article on this wiki.&lt;/i&gt;&lt;br /&gt; 
&lt;h3&gt;Custom Result Handling&lt;/h3&gt;
In more complex scenarios it may be required to override the default handling of Handlers which have results. In this instance it is possible to swap out the existing implementation in favour of your own. First we create a new handler type.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    IHandleAndReturnString&amp;lt;T&amp;gt; : IHandle {
	    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; Handle&amp;lt;T&amp;gt;(T message);
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Next we create our new result processor. This can be configured in the bootstrapper.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;var&lt;/span&gt; standardResultProcesser = EventAggregator.HandlerResultProcessing;
    EventAggregator.HandlerResultProcessing = (target, result) =&amp;gt;
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; stringResult = result &lt;span style="color:Blue;"&gt;as&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt;;
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (stringResult != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
            MessageBox.Show(stringResult);
        &lt;span style="color:Blue;"&gt;else&lt;/span&gt;
            standardResultProcesser(target, result);
    };
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Now, any time an event is processed returns a string, it will be captured and displayed in a MessageBox. The new handler falls back to the default implementations in cases were the result is not assignable from string. It is extremely important to note however, this feature was not designed for request / response usage, treating it as such will most definitely create bottle necks on publish.&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>McDonnellDean</author><pubDate>Mon, 13 May 2013 08:36:53 GMT</pubDate><guid isPermaLink="false">Updated Wiki: The Event Aggregator 20130513083653A</guid></item><item><title>Updated Wiki: The Event Aggregator</title><link>https://caliburnmicro.codeplex.com/wikipage?title=The Event Aggregator&amp;version=9</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;The Event Aggregator&lt;/h1&gt;Caliburn.Micro comes pre-bundled with an Event Aggregator, conveniently called EventAggregator. For those unfamiliar, an Event Aggregator is a service that provides the ability to publish an object from one entity to another in a loosely based fashion. &lt;a href="http://martinfowler.com/eaaDev/EventAggregator.html"&gt;Event Aggregator&lt;/a&gt; is actually a pattern and it&amp;#39;s implementation can vary from framework to framework. For Caliburn.Micro we focused on making our Event Aggregator implementation simple to use without sacrificing features or flexibility.&lt;br /&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;As previously mentioned we provide an implementation of Event Aggregator for you. This implementation implements the IEventAggregator interface, however, you can provide your own implementation if required. Please take a moment to familiarize yourself with the IEventAggregator signature.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;interface&lt;/span&gt; IEventAggregator {
    	Action&amp;lt;Action&amp;gt; PublicationThreadMarshaller { &lt;span style="color:Blue;"&gt;get&lt;/span&gt;; &lt;span style="color:Blue;"&gt;set&lt;/span&gt;; }
    	&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; HandlerExistsFor(Type messageType);
    	&lt;span style="color:Blue;"&gt;void&lt;/span&gt; Subscribe(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; subscriber);
    	&lt;span style="color:Blue;"&gt;void&lt;/span&gt; Unsubscribe(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; subscriber);
    	&lt;span style="color:Blue;"&gt;void&lt;/span&gt; Publish(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message);
    	&lt;span style="color:Blue;"&gt;void&lt;/span&gt; Publish(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message, Action&amp;lt;Action&amp;gt; marshal);
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Creation and Lifecycle&lt;/h3&gt;To use the EventAggregator correctly it must exist as an application level service. This is usually achieved by creating an instance of EventAggregator as a &lt;a href="http://en.wikipedia.org/wiki/Singleton_pattern"&gt;Singleton&lt;/a&gt;. We recommend that you use &lt;a href="http://en.wikipedia.org/wiki/Dependency_Injection"&gt;Dependency Injection&lt;/a&gt; to obtain a reference to the instance although we do not enforce this. The sample below details how to create an instance of EventAggregator, add it to the &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Simple%20IoC%20Container&amp;amp;referringTitle=Documentation"&gt;IoC container&lt;/a&gt; included with Caliburn.Micro  (although you are free to use any container you wish) and request it in a ViewModel.&lt;br /&gt; &lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Green;"&gt;// Creating the EventAggregator as a singleton.&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; Bootstrapper : BootstrapperBase {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; SimpleContainer _container =
            &lt;span style="color:Blue;"&gt;new&lt;/span&gt; SimpleContainer();

         &lt;span style="color:Green;"&gt;// ... Other Bootstrapper Config&lt;/span&gt;

        &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Configure(){
            _container.Singleton&amp;lt;IEventAggregator, EventAggregator&amp;gt;();
        }

        &lt;span style="color:Green;"&gt;// ... Other Bootstrapper Config&lt;/span&gt;
    }

    &lt;span style="color:Green;"&gt;// Acquiring the EventAggregator in a viewModel.&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
        }
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;Note that we are utilizing the &lt;a href="http://caliburnmicro.codeplex.com/wikipage?title=Customizing%20The%20Bootstrapper&amp;amp;referringTitle=Documentation"&gt;Bootstrapper&lt;/a&gt;, and specifically the Configure method, in the code above. There is no requirement to wire up the EventAggregator in a specific location, simply ensure it is created before it is first requested.&lt;/i&gt;&lt;br /&gt; 
&lt;h3&gt;Publishing Events&lt;/h3&gt;Once you have obtained a reference to the EventAggregator instance you are free to begin publishing Events. An Event or message as we call it to distinguish between .Net events, can be any object you like. There is no requirement to build your Events in any specific fashion. As you can see in the sample below the Publish method can accept any entity that derives from System.Object and will happily publish it to any interested subscribers.&lt;br /&gt; &lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;

            _eventAggregator.Publish(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; &lt;span style="color:Blue;"&gt;object&lt;/span&gt;());
            _eventAggregator.Publish(&lt;span style="color:#A31515;"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;);
            _eventAggregator.Publish(22);
        }
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Publishing using a custom thread Marshal&lt;/h3&gt;By convention, the EventAggregator publishes on the UI thread. You can override this in two places, globally and per publish. Consider the following code below which publishes the message supplied on a background thread.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    _eventAggregator.Publish(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; &lt;span style="color:Blue;"&gt;object&lt;/span&gt;(), action =&amp;gt; {
                    Task.Factory.StartNew(action);
                });
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;You can also swap out the default marshaller globally.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    _eventAggregator.PublicationThreadMarshaller = action =&amp;gt; { action(); };
&lt;/pre&gt;&lt;/div&gt; 
&lt;h2&gt;Subscribing To Events&lt;/h2&gt;Any entity can subscribe to any Event by providing itself to the EventAggregator via the Subscribe method. To keep this functionality easy to use we provide a special interface (IHandle&amp;lt;T&amp;gt;) which marks a subscriber as interested in an Event of a given type.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    IHandle&amp;lt;TMessage&amp;gt; : IHandle {
	    &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle&amp;lt;TMessage&amp;gt;(TMessage message);
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Notice that by implementing the interface above you are forced to implement the method Handle(T message) were T is the type of message you have specified your interest in. This method is what will be called when a matching Event type is published. &lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : IHandle&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// Handle the message here.&lt;/span&gt;
        }
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;You may be wondering about IHandle&amp;lt;T&amp;gt; implementing IHandle. IHandle is a &lt;a href="http://stackoverflow.com/questions/1023068/what-is-the-purpose-of-a-marker-interface"&gt;Marker Interface&lt;/a&gt; used internally to assist with reflecting over various IHandle Implementations, you do not need to work with this interface directly.&lt;/i&gt;&lt;br /&gt; 
&lt;h3&gt;Subscribing To Many Events&lt;/h3&gt;It is not uncommon for a single entity to want to listen for multiple event types. Because of our use of generics this is as simple as adding a second IHandle&amp;lt;T&amp;gt; interface to the subscriber. Notice that Handle method is now overloaded with the new Event type.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : IHandle&amp;lt;&lt;span style="color:Blue;"&gt;string&lt;/span&gt;&amp;gt;, IHandle&amp;lt;&lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;
    
        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }
    
        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;string&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// Handle the message here.&lt;/span&gt;
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// Handle the message here.&lt;/span&gt;
        }
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Polymorphic Subscribers&lt;/h3&gt;Caliburn.Micro&amp;#39;s EventAggregator honors polymorphism. When selecting handlers to call, the EventAggregator will fire any handler who&amp;#39;s Event type is assignable from the Event being sent. This results in a lot of flexibility and helps reuse.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : IHandle&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;, IHandle&amp;lt;&lt;span style="color:Blue;"&gt;string&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;
    
        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
            _eventAggregator.Publish(&lt;span style="color:#A31515;"&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;);
        }
    
        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// This will be called&lt;/span&gt;
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;string&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// This also&lt;/span&gt;
        }
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;In the example above, because String is derived from System.Object both handlers will be called when a String message is published.&lt;br /&gt;&lt;br /&gt;
&lt;h3&gt;Querying Handlers&lt;/h3&gt;When a subscriber is passed to the EventAggregator it is broken down into a special object called a Handler and a weak reference is maintained. We provide a mechanism to query the EventAggregator to see if a given Event type has any handlers, this can be useful in specific scenarios were at least one handler is assumed to exist.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : IHandle&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message){
            &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (_eventAggregator.HandlerExistsFor(&lt;span style="color:Blue;"&gt;typeof&lt;/span&gt;(SpecialMessageEvent))){
                _eventAggregator.Publish(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SpecialEventMessage(message));
            }
        }
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Coroutine Aware Subscribers&lt;/h3&gt;If you are using the EventAggregator with Caliburn.Micro as opposed to on it&amp;#39;s own via Nuget, access to &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=IResult%20and%20Coroutines&amp;amp;referringTitle=Documentation"&gt;Coroutine&lt;/a&gt; support within the Event Aggregator becomes available. Coroutines are supported via the IHandleWithCoroutine&amp;lt;T&amp;gt; Interface.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;interface&lt;/span&gt; IHandleWithCoroutine&amp;lt;TMessage&amp;gt; : IHandle {
		IEnumerable&amp;lt;IResult&amp;gt; Handle(TMessage message);
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The code below utilizes Coroutines with the EventAggregator. In this instance Activate will be fired asynchronously, Do work however, will not be called until after Activate has completed.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : Screen, IHandleWithCoroutine&amp;lt;EventWithCoroutine&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; IEnumerable&amp;lt;IResult&amp;gt; Handle(EventWithCoroutine message) {
            &lt;span style="color:Blue;"&gt;yield&lt;/span&gt; &lt;span style="color:Blue;"&gt;return&lt;/span&gt; message.Activate();
            &lt;span style="color:Blue;"&gt;yield&lt;/span&gt; &lt;span style="color:Blue;"&gt;return&lt;/span&gt; message.DoWork();
        }
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; EventWithCoroutine {
        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; IResult Activate() {
            &lt;span style="color:Blue;"&gt;return&lt;/span&gt; &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskResult(Task.Factory.StartNew(() =&amp;gt; {
                    &lt;span style="color:Green;"&gt;// Activate logic&lt;/span&gt;
                }));
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; IResult DoWork() {
            &lt;span style="color:Blue;"&gt;return&lt;/span&gt; &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskResult(Task.Factory.StartNew(() =&amp;gt; {
                &lt;span style="color:Green;"&gt;// Do work logic&lt;/span&gt;
            }));
        }
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Task Aware Subscribers&lt;/h3&gt;Caliburn.Micro also provides support for task based subscribers where the asynchronous functionality of Coroutines is desired but in a more light weight fashion. To utilize this functionality implement the IHandleWithTask&amp;lt;T&amp;gt; Interface, seen below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;interface&lt;/span&gt; IHandleWithTask&amp;lt;TMessage&amp;gt; : IHandle {
        Task Handle(TMessage message);
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Any subscribers that implement the above interface can then handle events in Task based manner.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : Screen, IHandleWithTask&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; Task Handle(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message) {
            &lt;span style="color:Blue;"&gt;return&lt;/span&gt; Task.Factory.StartNew(() =&amp;gt; message);
        }
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Unsubscribing and Leaks&lt;/h3&gt;The problem with standard .Net events is that they are prone to memory leaks. We avoid this situation by maintaining a weak reference to subscribers. If the only thing that references a subscriber is the EventAggregator then it will be allowed to go out of scope and ultimately be garbage collected. However, we still provide an explicit way to unsubscribe to allow for conditional handling as seen below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : Screen, IHandle&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// Handle the message here.&lt;/span&gt;
        }

        &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; OnActivate() {
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
            &lt;span style="color:Blue;"&gt;base&lt;/span&gt;.OnActivate();
        }

        &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; OnDeactivate(&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; close) {
            _eventAggregator.Unsubscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
            &lt;span style="color:Blue;"&gt;base&lt;/span&gt;.OnDeactivate(close);
        }
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;In the code above Screen is used to expose lifecycle events on the ViewModel. More on this can be found on this in the &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Screens%2c%20Conductors%20and%20Composition&amp;amp;referringTitle=Documentation"&gt;Screens, Conductors and Composition&lt;/a&gt; article on this wiki.&lt;/i&gt;&lt;br /&gt; 
&lt;h3&gt;Custom Result Handling&lt;/h3&gt;
In more complex scenarios it may be required to override the default handling of Handlers which have results. In this instance it is possible to swap out the existing implementation in favour of your own. First we create a new handler type.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    IHandleAndReturnString&amp;lt;T&amp;gt; : IHandle {
	    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; Handle&amp;lt;T&amp;gt;(T message);
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Next we create our new result processor. This can be configured in the bootstrapper.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;var&lt;/span&gt; standardResultProcesser = EventAggregator.HandlerResultProcessing;
    EventAggregator.HandlerResultProcessing = (target, result) =&amp;gt;
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; stringResult = result &lt;span style="color:Blue;"&gt;as&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt;;
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (stringResult != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
            MessageBox.Show(stringResult);
        &lt;span style="color:Blue;"&gt;else&lt;/span&gt;
            standardResultProcesser(target, result);
    };
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Now, any time an event is processed returns a string, it will be captured and displayed in a MessageBox. The new handler falls back to the default implementations in cases were the result is not assignable from string. It is extremely important to note however, this feature was not designed for request / response usage, treating it as such will most definitely create bottle necks on publish.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>McDonnellDean</author><pubDate>Mon, 13 May 2013 08:36:07 GMT</pubDate><guid isPermaLink="false">Updated Wiki: The Event Aggregator 20130513083607A</guid></item><item><title>Updated Wiki: The Event Aggregator</title><link>https://caliburnmicro.codeplex.com/wikipage?title=The Event Aggregator&amp;version=8</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;The Event Aggregator&lt;/h1&gt;Caliburn.Micro comes pre-bundled with an Event Aggregator, conveniently called EventAggregator. For those unfamiliar, an Event Aggregator is a service that provides the ability to publish an object from one entity to another in a loosely based fashion. &lt;a href="http://martinfowler.com/eaaDev/EventAggregator.html"&gt;Event Aggregator&lt;/a&gt; is actually a pattern and it&amp;#39;s implementation can vary from framework to framework. For Caliburn.Micro we focused on making our Event Aggregator implementation simple to use without sacrificing features or flexibility.&lt;br /&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;As previously mentioned we provide an implementation of Event Aggregator for you. This implementation implements the IEventAggregator interface, however, you can provide your own implementation if required. Please take a moment to familiarize yourself with the IEventAggregator signature.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;interface&lt;/span&gt; IEventAggregator {
    	Action&amp;lt;Action&amp;gt; PublicationThreadMarshaller { &lt;span style="color:Blue;"&gt;get&lt;/span&gt;; &lt;span style="color:Blue;"&gt;set&lt;/span&gt;; }
    	&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; HandlerExistsFor(Type messageType);
    	&lt;span style="color:Blue;"&gt;void&lt;/span&gt; Subscribe(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; subscriber);
    	&lt;span style="color:Blue;"&gt;void&lt;/span&gt; Unsubscribe(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; subscriber);
    	&lt;span style="color:Blue;"&gt;void&lt;/span&gt; Publish(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message);
    	&lt;span style="color:Blue;"&gt;void&lt;/span&gt; Publish(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message, Action&amp;lt;Action&amp;gt; marshal);
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Creation and Lifecycle&lt;/h3&gt;To use the EventAggregator correctly it must exist as an application level service. This is usually achieved by creating an instance of EventAggregator as a &lt;a href="http://en.wikipedia.org/wiki/Singleton_pattern"&gt;Singleton&lt;/a&gt;. We recommend that you use &lt;a href="http://en.wikipedia.org/wiki/Dependency_Injection"&gt;Dependency Injection&lt;/a&gt; to obtain a reference to the instance although we do not enforce this. The sample below details how to create an instance of EventAggregator, add it to the &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Simple%20IoC%20Container&amp;amp;referringTitle=Documentation"&gt;IoC container&lt;/a&gt; included with Caliburn.Micro  (although you are free to use any container you wish) and request it in a ViewModel.&lt;br /&gt; &lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Green;"&gt;// Creating the EventAggregator as a singleton.&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; Bootstrapper : BootstrapperBase {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; SimpleContainer _container =
            &lt;span style="color:Blue;"&gt;new&lt;/span&gt; SimpleContainer();

         &lt;span style="color:Green;"&gt;// ... Other Bootstrapper Config&lt;/span&gt;

        &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Configure(){
            _container.Singleton&amp;lt;IEventAggregator, EventAggregator&amp;gt;();
        }

        &lt;span style="color:Green;"&gt;// ... Other Bootstrapper Config&lt;/span&gt;
    }

    &lt;span style="color:Green;"&gt;// Acquiring the EventAggregator in a viewModel.&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
        }
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;Note that we are utilizing the &lt;a href="http://caliburnmicro.codeplex.com/wikipage?title=Customizing%20The%20Bootstrapper&amp;amp;referringTitle=Documentation"&gt;Bootstrapper&lt;/a&gt;, and specifically the Configure method, in the code above. There is no requirement to wire up the EventAggregator in a specific location, simply ensure it is created before it is first requested.&lt;/i&gt;&lt;br /&gt; 
&lt;h3&gt;Publishing Events&lt;/h3&gt;Once you have obtained a reference to the EventAggregator instance you are free to begin publishing Events. An Event or message as we call it to distinguish between .Net events, can be any object you like. There is no requirement to build your Events in any specific fashion. As you can see in the sample below the Publish method can accept any entity that derives from System.Object and will happily publish it to any interested subscribers.&lt;br /&gt; &lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;

            _eventAggregator.Publish(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; &lt;span style="color:Blue;"&gt;object&lt;/span&gt;());
            _eventAggregator.Publish(&lt;span style="color:#A31515;"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;);
            _eventAggregator.Publish(22);
        }
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Publishing using a custom thread Marshal&lt;/h3&gt;By convention, the EventAggregator publishes on the UI thread. You can override this in two places, globally and per publish. Consider the following code below which publishes the message supplied on a background thread.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    _eventAggregator.Publish(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; &lt;span style="color:Blue;"&gt;object&lt;/span&gt;(), action =&amp;gt; {
                    Task.Factory.StartNew(action);
                });
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;You can also swap out the default marshaller globally.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    _eventAggregator.PublicationThreadMarshaller = action =&amp;gt; { action(); };
&lt;/pre&gt;&lt;/div&gt; 
&lt;h2&gt;Subscribing To Events&lt;/h2&gt;Any entity can subscribe to any Event by providing itself to the EventAggregator via the Subscribe method. To keep this functionality easy to use we provide a special interface (IHandle&amp;amp;lt;T&amp;amp;gt;) which marks a subscriber as interested in an Event of a given type.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    IHandle&amp;lt;TMessage&amp;gt; : IHandle {
	    &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle&amp;lt;TMessage&amp;gt;(TMessage message);
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Notice that by implementing the interface above you are forced to implement the method Handle(T message) were T is the type of message you specified your interest in. This method is what will be called when a matching Event type is published. &lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : IHandle&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// Handle the message here.&lt;/span&gt;
        }
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;You may be wondering about IHandle&amp;amp;lt;T&amp;amp;gt; implementing IHandle. IHandle is a &lt;a href="http://stackoverflow.com/questions/1023068/what-is-the-purpose-of-a-marker-interface"&gt;Marker Interface&lt;/a&gt; used internally to assist with reflecting over various IHandle Implementations, you do not need to work with this interface directly.&lt;/i&gt;&lt;br /&gt; 
&lt;h3&gt;Subscribing To Many Events&lt;/h3&gt;It is not uncommon for a single entity to want to listen for multiple event types. Because of our use of generics this is as simple as adding a second IHandle&amp;amp;lt;T&amp;amp;gt; interface to the subscriber. Notice that Handle method is now overloaded with the new Event type.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : IHandle&amp;lt;&lt;span style="color:Blue;"&gt;string&lt;/span&gt;&amp;gt;, IHandle&amp;lt;&lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;
    
        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }
    
        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;string&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// Handle the message here.&lt;/span&gt;
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// Handle the message here.&lt;/span&gt;
        }
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Polymorphic Subscribers&lt;/h3&gt;Caliburn.Micro&amp;#39;s EventAggregator honours polymorphic. When selecting handlers to call the EventAggregator will fire any handler who&amp;#39;s Event type is assignable from the Event being sent. This results in a lot of flexibility and helps reuse.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : IHandle&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;, IHandle&amp;lt;&lt;span style="color:Blue;"&gt;string&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;
    
        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
            _eventAggregator.Publish(&lt;span style="color:#A31515;"&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;);
        }
    
        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// This will be called&lt;/span&gt;
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;string&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// This also&lt;/span&gt;
        }
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;In the example above, because String is derived from System.Object both handlers will be called when a String message is published.&lt;br /&gt;&lt;br /&gt;
&lt;h3&gt;Querying Handlers&lt;/h3&gt;When a subscriber is passed to the EventAggregator it is broken down into a special object called a Handler and a weak reference is maintained. We provide a mechanism to query the EventAggregator to see if a given Event type has any handlers, this can be useful in specific scenarios were at least one handler is assumed to exist.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : IHandle&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message){
            &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (_eventAggregator.HandlerExistsFor(&lt;span style="color:Blue;"&gt;typeof&lt;/span&gt;(SpecialMessageEvent))){
                _eventAggregator.Publish(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SpecialEventMessage(message));
            }
        }
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Coroutine Aware Subscribers&lt;/h3&gt;If you are using the EventAggregator with Caliburn.Micro as opposed to on it&amp;#39;s own via Nuget, access to &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=IResult%20and%20Coroutines&amp;amp;referringTitle=Documentation"&gt;Coroutine&lt;/a&gt; support within the Event Aggregator becomes available. Coroutines are supported via the IHandleWithCoroutine&amp;amp;lt;T&amp;amp;gt; Interface.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;interface&lt;/span&gt; IHandleWithCoroutine&amp;lt;TMessage&amp;gt; : IHandle {
		IEnumerable&amp;lt;IResult&amp;gt; Handle(TMessage message);
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The code below utilizes Coroutines with the EventAggregator. In this instance Activate will be fired asynchronously, Do work however, will not be called until after Activate has completed.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : Screen, IHandleWithCoroutine&amp;lt;EventWithCoroutine&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; IEnumerable&amp;lt;IResult&amp;gt; Handle(EventWithCoroutine message) {
            &lt;span style="color:Blue;"&gt;yield&lt;/span&gt; &lt;span style="color:Blue;"&gt;return&lt;/span&gt; message.Activate();
            &lt;span style="color:Blue;"&gt;yield&lt;/span&gt; &lt;span style="color:Blue;"&gt;return&lt;/span&gt; message.DoWork();
        }
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; EventWithCoroutine {
        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; IResult Activate() {
            &lt;span style="color:Blue;"&gt;return&lt;/span&gt; &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskResult(Task.Factory.StartNew(() =&amp;gt; {
                    &lt;span style="color:Green;"&gt;// Activate logic&lt;/span&gt;
                }));
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; IResult DoWork() {
            &lt;span style="color:Blue;"&gt;return&lt;/span&gt; &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskResult(Task.Factory.StartNew(() =&amp;gt; {
                &lt;span style="color:Green;"&gt;// Do work logic&lt;/span&gt;
            }));
        }
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Task Aware Subscribers&lt;/h3&gt;Caliburn.Micro also provides support for task based subscribers where the asynchronous functionality of Coroutines is desired but in a more light weight fashion. To utilize this functionality implement the IHandleWithTask&amp;amp;lt;T&amp;amp;gt; Interface, seen below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;interface&lt;/span&gt; IHandleWithTask&amp;lt;TMessage&amp;gt; : IHandle {
        Task Handle(TMessage message);
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Any subscribers that implement the above interface can then handle events in Task based manner.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : Screen, IHandleWithTask&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; Task Handle(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message) {
            &lt;span style="color:Blue;"&gt;return&lt;/span&gt; Task.Factory.StartNew(() =&amp;gt; message);
        }
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Unsubscribing and Leaks&lt;/h3&gt;The problem with standard .Net events is that they are prone to memory leaks. We avoid this situation by maintaining a weak reference to subscribers. If the only thing that references a subscriber is the EventAggregator then it will be allowed to go out of scope and ultimately be garbage collected. However, we still provide an explicit way to unsubscribe to allow for conditional handling as seen below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; FooViewModel : Screen, IHandle&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; {
        &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator _eventAggregator;

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FooViewModel(IEventAggregator eventAggregator) {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        }

        &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; message) {
            &lt;span style="color:Green;"&gt;// Handle the message here.&lt;/span&gt;
        }

        &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; OnActivate() {
            _eventAggregator.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
            &lt;span style="color:Blue;"&gt;base&lt;/span&gt;.OnActivate();
        }

        &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; OnDeactivate(&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; close) {
            _eventAggregator.Unsubscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
            &lt;span style="color:Blue;"&gt;base&lt;/span&gt;.OnDeactivate(close);
        }
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;In the code above Screen is used to expose lifecycle events on the ViewModel. More on this can be found on this in the &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Screens%2c%20Conductors%20and%20Composition&amp;amp;referringTitle=Documentation"&gt;Screens, Conductors and Composition&lt;/a&gt; article on this wiki.&lt;/i&gt;&lt;br /&gt; 
&lt;h3&gt;Custom Result Handling&lt;/h3&gt;
In more complex scenarios it may be required to override the default handling of Handlers which have results. In this instance it is possible to swap out the existing implementation in favour of your own. First we create a new handler type.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    IHandleAndReturnString&amp;lt;T&amp;gt; : IHandle {
	    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; Handle&amp;lt;T&amp;gt;(T message);
    }
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Next we create our new result processor. This can be configured in the bootstrapper.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;var&lt;/span&gt; standardResultProcesser = EventAggregator.HandlerResultProcessing;
    EventAggregator.HandlerResultProcessing = (target, result) =&amp;gt;
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; stringResult = result &lt;span style="color:Blue;"&gt;as&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt;;
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (stringResult != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
            MessageBox.Show(stringResult);
        &lt;span style="color:Blue;"&gt;else&lt;/span&gt;
            standardResultProcesser(target, result);
    };
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Now, any time an event is processed returns a string, it will be captured and displayed in a MessageBox. The new handler falls back to the default implementations in cases were the result is not assignable from string. It is extremely important to note however, this feature was not designed for request / response usage, treating it as such will most definitely create bottle necks on publish.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>McDonnellDean</author><pubDate>Sun, 12 May 2013 23:09:49 GMT</pubDate><guid isPermaLink="false">Updated Wiki: The Event Aggregator 20130512110949P</guid></item><item><title>Updated Wiki: Documentation</title><link>https://caliburnmicro.codeplex.com/documentation?version=88</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Documentation&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;Getting Started
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Introduction&amp;referringTitle=Documentation"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Obtain%20and%20Build%20the%20Code&amp;referringTitle=Documentation"&gt;Obtain and Build the Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Nuget&amp;referringTitle=Documentation"&gt;Nuget&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Cheat%20Sheet&amp;referringTitle=Documentation"&gt;Cheat Sheet&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Soup to Nuts
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Basic%20Configuration%2c%20Actions%20and%20Conventions&amp;referringTitle=Documentation"&gt;Basic Configuration, Actions and Conventions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Customizing%20The%20Bootstrapper&amp;referringTitle=Documentation"&gt;Customizing The Bootstrapper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&amp;referringTitle=Documentation"&gt;All About Actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Working with Windows Phone 7 &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207&amp;referringTitle=Documentation"&gt;v1.0&lt;/a&gt; &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207%20v1.1&amp;referringTitle=Documentation"&gt;v1.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20WinRT&amp;referringTitle=Documentation"&gt;Working with WinRT&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://compiledexperience.com/blog/posts/share-caliburn"&gt;WinRT Sharing with Caliburn Micro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://compiledexperience.com/blog/posts/settings-caliburn"&gt;WinRT Settings with Caliburn Micro&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=IResult%20and%20Coroutines&amp;referringTitle=Documentation"&gt;IResult and Coroutines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Screens%2c%20Conductors%20and%20Composition&amp;referringTitle=Documentation"&gt;Screens, Conductors and Composition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Conventions&amp;referringTitle=Documentation"&gt;All About Conventions&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=View%2fViewModel%20Naming%20Conventions&amp;referringTitle=Documentation"&gt;View&amp;#47;ViewModel Naming Conventions&lt;/a&gt; (v1.3)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Handling%20Custom%20Conventions&amp;referringTitle=Documentation"&gt;Handling Custom Conventions&lt;/a&gt; (v1.3)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Using%20the%20NameTransformer&amp;referringTitle=Documentation"&gt;Using the NameTransformer - Advanced&lt;/a&gt; (v1.1)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Event%20Aggregator&amp;referringTitle=Documentation"&gt;The Event Aggregator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Simple%20IoC%20Container&amp;referringTitle=Documentation"&gt;The Simple IoC Container&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Window%20Manager&amp;referringTitle=Documentation"&gt;The Window Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Design-Time%20Support&amp;referringTitle=Documentation"&gt;Design-Time Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Async%20%28Task%29%20Support&amp;referringTitle=Documentation"&gt;Async &amp;#40;Task&amp;#41; Support&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;External Tutorial
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mindscapehq.com/blog/index.php/2012/01/12/caliburn-micro-part-1-getting-started/"&gt;Mindscape&amp;#39;s Getting Started Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.markermetro.com/2011/05/technical/mvvm-friendly-visual-state-management-with-windows-phone-7/"&gt;Marker Metro’s Visual State Management with WP7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.terrymarshall.com.au/Blog/tabid/162/tagid/37/Caliburn-Micro.aspx"&gt;Terry Marshall&amp;#39;s WinRT Tutorial Series&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wp.qmatteoq.com/first-steps-with-caliburn-micro-in-windows-phone-8-the-complete-series/"&gt;Matteo Pagani&amp;#39;s WP8 Tutorials&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Recipes
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=LoadCatalog%20Result&amp;referringTitle=Documentation"&gt;LoadCatalog Result&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Testing%20Coroutines&amp;referringTitle=Documentation"&gt;Testing Coroutines&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;i&gt;NOTE: Recipes are not maintained by the Caliburn.Micro project but by their contributors. Please contact the contributor with any issues you may find.&lt;/i&gt;&lt;/blockquote&gt;
&lt;ul&gt;&lt;li&gt;Contests
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=2010%20Caliburn.Micro%20Application%20Contest%20Winners&amp;referringTitle=Documentation"&gt;2010 Caliburn.Micro Application Contest Winners&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;3rd Party Extensions
&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/vcaraulean/Caliburn.Micro.Telerik"&gt;Telerik Integration&lt;/a&gt; (for SL 5.0 and WPF 4.0)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://calmicrodevexpress.codeplex.com/"&gt;DevExpress Integration&lt;/a&gt; (for WPF 4.0)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dchaib/Caliburn.Micro.ReactiveUI"&gt;ReactiveUI Integration&lt;/a&gt; (for SL 5.0, WPF 4.5 and WinRT)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kamranayub/CaliburnBindableAppBar"&gt;Bindable ApplicationBar&lt;/a&gt; (for WP 7.1 and WP 8.0)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tibel/Caliburn.Micro.Extras"&gt;Some Extras&lt;/a&gt; (for all platforms)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;i&gt;NOTE: Please contact us if you want a project to be added to the list.&lt;/i&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>McDonnellDean</author><pubDate>Sun, 12 May 2013 11:57:00 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20130512115700A</guid></item><item><title>Updated Wiki: The Simple IoC Container</title><link>https://caliburnmicro.codeplex.com/wikipage?title=The Simple IoC Container&amp;version=1</link><description>&lt;div class="wikidoc"&gt;&lt;i&gt;To Follow...&lt;/i&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>McDonnellDean</author><pubDate>Sun, 12 May 2013 11:56:25 GMT</pubDate><guid isPermaLink="false">Updated Wiki: The Simple IoC Container 20130512115625A</guid></item><item><title>New Comment on "Cheat Sheet"</title><link>https://caliburnmicro.codeplex.com/wikipage?title=Cheat Sheet&amp;ANCHOR#C27435</link><description>This project is awesome&amp;#33; but Can someone fill up the &amp;#34;Blanks&amp;#34; on the documentation, please&amp;#63;</description><author>fffz</author><pubDate>Thu, 09 May 2013 17:02:16 GMT</pubDate><guid isPermaLink="false">New Comment on "Cheat Sheet" 20130509050216P</guid></item><item><title>Updated Wiki: Working with Windows Phone 7 v1.1</title><link>https://caliburnmicro.codeplex.com/wikipage?title=Working with Windows Phone 7 v1.1&amp;version=12</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Working with Windows Phone 7 &lt;i&gt;v1.1&lt;/i&gt;&lt;/h1&gt;
In version 1.0 we had pretty good support for building apps for WP7, but in v1.1 we’ve taken things up a notch. Let’s look at the same HelloWP7 sample that we did previously, but see how it’s been updated to take advantage of our improved tombstoning, launcher/chooser support and strongly typed navigation. You’ll also notice that the code is cleaner overall.&lt;br /&gt;
&lt;h3&gt;Bootstrapper&lt;/h3&gt;
Here’s the cleaned up boostrapper in v1.1.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; HelloWP7Bootstrapper : PhoneBootstrapper {  
    PhoneContainer container;  
  
    &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Configure() {  
        container = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; PhoneContainer(RootFrame);

        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (!Execute.InDesignMode)
            container.RegisterPhoneServices();

        container.PerRequest&amp;lt;MainPageViewModel&amp;gt;();  
        container.PerRequest&amp;lt;PivotPageViewModel&amp;gt;();  
        container.PerRequest&amp;lt;TabViewModel&amp;gt;();  
  
        AddCustomConventions();  
    }  
  
    &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; AddCustomConventions() {  
        &lt;span style="color:Green;"&gt;//ellided  &lt;/span&gt;
    }  
  
    &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;object&lt;/span&gt; GetInstance(Type service, &lt;span style="color:Blue;"&gt;string&lt;/span&gt; key) {  
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; container.GetInstance(service, key);  
    }  
  
    &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; IEnumerable&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; GetAllInstances(Type service) {  
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; container.GetAllInstances(service);  
    }  
  
    &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; BuildUp(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; instance) {  
        container.BuildUp(instance);  
    }  
}  
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;There are two things to notice here. First, we’ve removed all the manual Caliburn.Micro service configuration and pushed it into the SimpleContainer. That gives you one line of code to configure the framework if you are using the OOTB container. Speaking of which, we now provide the SimpleContainer officially in the Caliburn.Micro.Extensions assembly. That helps you get started faster. You can always plug your own in, of coarse. In addition to the simplified configuration, notice that the ViewModels for pages are no longer registered using a string key. For v1.1 our ViewModelLocator has been re-implemented to pull VMs from the container by Type rather than key. It now follows the exact same naming strategies as the ViewLocator (but in reverse) and even derives possible interface names so that it resolves VMs from the container correctly. This both improves the consistency of ViewModel location as well as makes the configuration simpler.&lt;br /&gt;&lt;br /&gt;The boostrapper is added to your App.xaml as always:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Application&lt;/span&gt; &lt;span style="color:Red;"&gt;x:Class&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Caliburn.Micro.HelloWP7.App&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;  
             &lt;span style="color:Red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;  
             &lt;span style="color:Red;"&gt;xmlns:x&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;  
             &lt;span style="color:Red;"&gt;xmlns:local&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;clr-namespace:Caliburn.Micro.HelloWP7&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Application.Resources&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;local&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HelloWP7Bootstrapper&lt;/span&gt; &lt;span style="color:Red;"&gt;x:Key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;bootstrapper&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;  
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Application.Resources&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Application&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Important Note About App.xaml.cs&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;If you create your WP7 application using a standard Visual Studio template, the generated App.xaml.cs file will have a lot of code in it. The purpose of this code is to set up the root frame for the application and make sure everything gets initialized properly. Of course, that&amp;#39;s what the bootstrapper&amp;#39;s job is too (and in fact it does a few things better than the out-of-the-box code in addition to configuring CM). So, you don&amp;#39;t need both. When using CM&amp;#39;s PhoneBootstrapper, be sure to clear out all the code from the App.xaml.cs file except for the call to InitializeComponent in the constructor.&lt;/i&gt;&lt;br /&gt;
&lt;h3&gt;INavigationService&lt;/h3&gt;
Let’s review what CM’s INavigationService  does for you. First, remember that WP7 enforces a View-First approach to UI at the platform level. Like it or not, the platform is going to create pages at will and the Frame control is going to conduct your application thusly. You don’t get to control that and there are no extensibility points, unlike the Silverlight version of the navigation framework. Rather than fight this, I’m going to recommend embracing the View-First approach for Pages in WP7, but maintaining a Model-First composition strategy for the sub-components of those pages and a Model-First approach to coding against the navigation system. In order to bridge this gap, I’ve enabled the INavigationService to hook into the native navigation frame’s functionality and augment it with the following behaviors:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;When Navigating To a Page&lt;/i&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Use the new ViewModelLocator to conventionally determine the Type of the VM that should be attached to the page being navigated to. Pull that VM by Type out of the container.&lt;/li&gt;
&lt;li&gt;If a VM is found, use the ViewModelBinder to connect the Page to the located ViewModel.&lt;/li&gt;
&lt;li&gt;Examine the Page’s QueryString. Look for properties on the VM that match the QueryString parameters and inject them, performing the necessary type coercion.&lt;/li&gt;
&lt;li&gt;If the ViewModel implements the IActivate interface, call its Activate method.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;i&gt;When Navigating Away From a Page&lt;/i&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Detect whether the associated ViewModel implements the IGuardClose interface.&lt;/li&gt;
&lt;li&gt;If IGuardClose is implemented and the app is not being tombstoned or closed, invoke the CanClose method and use its result to optionally cancel page navigation.1&lt;/li&gt;
&lt;li&gt;If the ViewModel can close and implements the IDeactivate interface, call it’s Deactivate method. Always pass “false” to indicate that the VM should deactivate, but not necessarily close. This is because the phone may be deactivating, but not actually tombstoning or closing. There’s no way to know.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;The behavior of the navigation service allows the correct VM to be hooked up to the page, allows that VM to be notified that it is being navigated to (IActivate), allows it to prevent navigation away from the current page (IGuardClose) and allows it to clean up after itself on navigation away, tombstoning or normal “closing” of the application (IDeactivate). All these interfaces (and a couple more) are implemented by the Screen class. If you prefer not to inherit from Screen, you can implement any of the interfaces individually of coarse. They provide a nice View-Model-Centric, testable and predictable way of responding to navigation without needing to wire up a ton of event handlers or write important application flow logic in the page’s code-behind.&lt;br /&gt;&lt;br /&gt;These hooks into phone navigation enable a really smooth way of interacting with the phone’s navigation lifecycle. But now that we have an improved ViewModelLocator that matches exactly the ViewLocator and works on types, we can take things further. In v1.1 we’ve introduced support for strongly-typed navigation. Here’s what the new MainPageViewModel from the sample looks like using this new feature:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; MainPageViewModel {  
    &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; INavigationService navigationService;  
  
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; MainPageViewModel(INavigationService navigationService) {  
        &lt;span style="color:Blue;"&gt;this&lt;/span&gt;.navigationService = navigationService;  
    }  
  
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; GotoPageTwo() {  
        navigationService.UriFor&amp;lt;PivotPageViewModel&amp;gt;()  
            .WithParam(x =&amp;gt; x.NumberOfTabs, 5)  
            .Navigate();  
    }  
}  
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This allows you to specify a ViewModel to navigate to along with the query string parameters. Since this all happens using generics and lambdas, you can never miss-type a page Uri or mess up your query strings….and refactoring will work beautifully.&lt;br /&gt;&lt;br /&gt;For the sake of completeness, here’s the page that will be bound to MainPageViewModel:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;phone&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;PhoneApplicationPage&lt;/span&gt; &lt;span style="color:Red;"&gt;x:Class&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Caliburn.Micro.HelloWP7.MainPage&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;  
                            &lt;span style="color:Red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;  
                            &lt;span style="color:Red;"&gt;xmlns:x&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;  
                            &lt;span style="color:Red;"&gt;xmlns:phone&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;  
                            &lt;span style="color:Red;"&gt;xmlns:shell&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;  
                            &lt;span style="color:Red;"&gt;xmlns:cal&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;  
                            &lt;span style="color:Red;"&gt;SupportedOrientations&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Portrait&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;  
                            &lt;span style="color:Red;"&gt;Orientation&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Portrait&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;  
                            &lt;span style="color:Red;"&gt;shell:SystemTray.IsVisible&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;True&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt; &lt;span style="color:Red;"&gt;Background&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Transparent&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;RowDefinition&lt;/span&gt; &lt;span style="color:Red;"&gt;Height&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Auto&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;  
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;RowDefinition&lt;/span&gt; &lt;span style="color:Red;"&gt;Height&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;*&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;  
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:Red;"&gt;Grid.Row&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;0&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;  
                    &lt;span style="color:Red;"&gt;Margin&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;24,24,0,12&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;WP7 Caliburn.Micro&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;  
                       &lt;span style="color:Red;"&gt;Style&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:Blue;"&gt;{StaticResource PhoneTextNormalStyle}&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;  
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Main Page&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;  
                       &lt;span style="color:Red;"&gt;Margin&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:Blue;"&gt;-3,-8,0,0&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;  
                       &lt;span style="color:Red;"&gt;Style&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:Blue;"&gt;{StaticResource PhoneTextTitle1Style}&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;  
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
  
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt; &lt;span style="color:Red;"&gt;Grid.Row&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:Blue;"&gt;1&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Button&lt;/span&gt; &lt;span style="color:Red;"&gt;x:Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:Blue;"&gt;GotoPageTwo&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;  
                    &lt;span style="color:Red;"&gt;Content&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Goto Page Two&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;  
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
  
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;phone&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;PhoneApplicationPage.ApplicationBar&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;shell&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ApplicationBar&lt;/span&gt; &lt;span style="color:Red;"&gt;IsVisible&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:Blue;"&gt;True&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;shell&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ApplicationBar.Buttons&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cal&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;AppBarButton&lt;/span&gt; &lt;span style="color:Red;"&gt;IconUri&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ApplicationIcon.png&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;  
                                  &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Page Two&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;  
                                  &lt;span style="color:Red;"&gt;Message&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:Blue;"&gt;GotoPageTwo&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;#39;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;  
            &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;shell&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ApplicationBar.Buttons&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;shell&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ApplicationBar&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;phone&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;PhoneApplicationPage.ApplicationBar&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;phone&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;PhoneApplicationPage&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;  
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;There’s really nothing new here in v1.1. But I just wanted to remind you that Caliburn.Micro supports Actions on the AppBar  as long as you use CM’s AppBarButton and AppBarMenuItem :)&lt;br /&gt;
&lt;h3&gt;IPhoneService&lt;/h3&gt;
The IPhoneService wraps the phone’s frame and provides access to important information and events. We had this service in v1.0 but we’ve expanded it in v1.1 to expose a better event model. Those familiar with WP7 know that the phone has a series of events that fire in different circumstances: Launching, Activated, Deactivated and Closing. Unfortunately, these events obscure whether the phone is actually resurrecting from a tombstoned state or simply continuing execution. The current SDK does not make it easy for the developer to actually determine this, so Caliburn.Micro does the heavy lifting for you and provides the following event model:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Launching - Occurs when a fresh instance of the application is launching.&lt;/li&gt;
&lt;li&gt;Activated - Occurs when a previously paused/tombstoned app is resumed/resurrected.&lt;/li&gt;
&lt;li&gt;Deactivated - Occurs when the application is being paused or tombstoned.&lt;/li&gt;
&lt;li&gt;Closing - Occurs when the application is closing.&lt;/li&gt;
&lt;li&gt;Continuing -  Occurs when the app is continuing from a temporarily paused state.&lt;/li&gt;
&lt;li&gt;Continued - Occurs after the app has continued from a temporarily paused state.&lt;/li&gt;
&lt;li&gt;Resurrecting - Occurs when the app is &amp;quot;resurrecting&amp;quot; from a tombstoned state.&lt;/li&gt;
&lt;li&gt;Resurrected - Occurs after the app has &amp;quot;resurrected&amp;quot; from a tombstoned state.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;Using these new events, you can more intelligently make decisions about whether or not you need to restore data. In the forthcoming Mango release, the platform will provide us information on whether the app is continuing or resurrecting. However, developers working with Caliburn.Micro can have that information now and when Mango arrives, we’ll update our implementation to use the new bits. Your code won’t have to change.&lt;br /&gt;
&lt;h3&gt;Tombstoning&lt;/h3&gt;
As you might imagine, our new tombstoning mechanism takes advantage of the new events so that it can more reliably and accurately save/restore important data. Let’s have a look at the PivotPageViewModel to see how it interacts with the tombstoning mechanism.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; PivotPageViewModel : Conductor&amp;lt;IScreen&amp;gt;.Collection.OneActive {  
    &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; Func&amp;lt;TabViewModel&amp;gt; createTab;  
  
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; PivotPageViewModel(Func&amp;lt;TabViewModel&amp;gt; createTab) {  
        &lt;span style="color:Blue;"&gt;this&lt;/span&gt;.createTab = createTab;  
    }  
  
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;int&lt;/span&gt; NumberOfTabs { &lt;span style="color:Blue;"&gt;get&lt;/span&gt;; &lt;span style="color:Blue;"&gt;set&lt;/span&gt;; }  
  
    &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; OnInitialize() {  
        Enumerable.Range(1, NumberOfTabs).Apply(x =&amp;gt; {  
            &lt;span style="color:Blue;"&gt;var&lt;/span&gt; tab = createTab();  
            tab.DisplayName = &lt;span style="color:#A31515;"&gt;&amp;quot;Item &amp;quot;&lt;/span&gt; + x;  
            Items.Add(tab);  
        });  
  
        ActivateItem(Items[0]);  
    }  
}  
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The PivotPageViewModel will receive the number of pivot items to create through it’s NumberOfTabs property, which is pushed in from the query string, as mentioned above. It will then add these items to the conductor and activate the first one. If you’re familiar with the Pivot and CM’s previous sample, you’ll notice that our PivotFix is gone. Pivot has a horrible bug that will crash your application if you try to set the SelectedItem or SelectedIndex to an item 3 or greater from either end of the pivot collection, while the Pivot itself is not visible. This makes it really hard to restore this control from a tombstoned state because you have to set the value at the exact right time. Previously we used a PivotFix hack to work around the control’s bug, but the new tombstoning mechanism is powerful and extensible enough to just make it work. You’ll notice that there are no attributes describing tombstoning behavior. They’ve been removed in favor of a poco model inspired by Fluent NHibhernate. If you would rather have the attributes, you can actually build them on top of the new system. The new system is also more reliable than previously and has a lot more options for storage. Let’s see the class that describes the tombstoning behavior for PivotPageViewModel:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; PivotPageModelStorage : StorageHandler&amp;lt;PivotPageViewModel&amp;gt; {  
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Configure() {  
        &lt;span style="color:Blue;"&gt;this&lt;/span&gt;.ActiveItemIndex()  
            .InPhoneState()  
            .RestoreAfterViewLoad();  
    }  
}  
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;All you  have to do to make a class participate in tombstoning is to inherit from StorageHandler&amp;lt;T&amp;gt;. The PhoneContainer will auto-register anything of this type in the assembly. Just override the Configure method and declare the tombstoning instructions. I’ve created some extension methods for common scenarios. Here’s what the above declaration states:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Persist the Conductor’s ActiveItem’s index&lt;/li&gt;
&lt;li&gt;Store the index in PhoneState&lt;/li&gt;
&lt;li&gt;Restore the value after the associated view has been loaded.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;Let’s look at the storage handler for the TabViewModel to see some more options:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; TabViewModelStorage : StorageHandler&amp;lt;TabViewModel&amp;gt; {  
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Configure() {  
        Id(x =&amp;gt; x.DisplayName);  
  
        Property(x =&amp;gt; x.Text)  
            .InPhoneState()  
            .RestoreAfterActivation();  
    }  
}  
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Here we are specifying an Id because we actually need to persist multiple instances of the same VM. When we restore, we’ll need to know how to map the properties back. We’re also storing the data in PhoneState, but this time we’re not waiting for the view to load, but just waiting for the TabViewModel to be activated by its owning Conductor.&lt;br /&gt;&lt;br /&gt;Out of the box, we also support storing data in AppSettings. For example, if you wanted to same tab to be selected &lt;b&gt;across application restarts&lt;/b&gt; not just when tombstoned, you could define the PivotPageModelStorage like this:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; PivotPageModelStorage : StorageHandler&amp;lt;PivotPageViewModel&amp;gt; {  
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Configure() {  
        &lt;span style="color:Blue;"&gt;this&lt;/span&gt;.ActiveItemIndex()  
            .InAppSettings()  
            .RestoreAfterViewLoad();  
    }  
}  
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Pretty easy? All this works by collaborating with the IoC container and keying off of the new event model exposed by the IPhoneService. It’s pretty powerful and extensible. You can add your own storage mechanism or define your own restore timing. You can even implement IStorageHandler directly to write completely custom code on a class by class basis. You could easily add a version that inspected classes for custom attributes and built up the configuration, if you like the attribute model better. You can also store whole instances, not just their properties, and have them rehydrated properly and available for ctor injection.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note About Restore Timing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;If you want the data to be restored as soon as the object is created, leave off the timing specifier, ie. RestoreAfterViewLoad. The default is to restore the data immediately.&lt;/i&gt;&lt;br /&gt;
&lt;h3&gt;Launchers and Choosers&lt;/h3&gt;
Launchers and Choosers are painful to work with if you want to do MVVM. In v1.0 we provided a solution to this. I wasn’t happy with its implementation…it was unpredictable in certain scenarios. Once we established the new phone events, better IoC integration and new tombstoning mechanism, I realized I could build a better launcher/chooser system. Let’s take a look at the updated version of TabViewModel in order to see how it works:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; TabViewModel : Screen, IHandle&amp;lt;TaskCompleted&amp;lt;PhoneNumberResult&amp;gt;&amp;gt; {  
    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; text;  
    &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IEventAggregator events;  
  
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; TabViewModel(IEventAggregator events) {  
        &lt;span style="color:Blue;"&gt;this&lt;/span&gt;.events = events;  
    }  
  
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt; Text {  
        &lt;span style="color:Blue;"&gt;get&lt;/span&gt; { &lt;span style="color:Blue;"&gt;return&lt;/span&gt; text; }  
        &lt;span style="color:Blue;"&gt;set&lt;/span&gt; {  
            text = value;  
            NotifyOfPropertyChange(() =&amp;gt; Text);  
        }  
    }  
  
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Choose() {  
        events.RequestTask&amp;lt;PhoneNumberChooserTask&amp;gt;();  
    }  
  
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Handle(TaskCompleted&amp;lt;PhoneNumberResult&amp;gt; message) {  
        MessageBox.Show(&lt;span style="color:#A31515;"&gt;&amp;quot;The result was &amp;quot;&lt;/span&gt; + message.Result.TaskResult, DisplayName, MessageBoxButton.OK);  
    }  
  
    &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; OnActivate() {  
        events.Subscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);  
        &lt;span style="color:Blue;"&gt;base&lt;/span&gt;.OnActivate();  
    }  
  
    &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; OnDeactivate(&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; close) {  
        events.Unsubscribe(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);  
        &lt;span style="color:Blue;"&gt;base&lt;/span&gt;.OnDeactivate(close);  
    }  
}  
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The most significant architectural change I made was to re-implement the launcher/chooser mechanism to work on top of the IEventAggregator. Take a look at the Choose method. The RequestTask method is just an extension method of the IEventAggregator that publishes a special event that the framework is subscribed to. The framework then starts the task. When it’s completed, the framework publishes an event TaskCompleted&amp;lt;T&amp;gt; where T is the result the the chooser returns. You can register for this in the same VM that published the chooser event or in an entirely different one if you like. In the case of our sample, we have 5 TabViewModels that can launch the same chooser. That’s probably not normal, but you can handle this situation in three ways. In our case, the VMs are in a Conductor, and only one of them can be active at a time, so we just Subscribe/Unsubscribe based on the Screen lifecycle so that only the active VM will receive the result. This is a version of the Latch pattern. The second way to handle this is through the event state. When you call the RequestTask method you can pass a state object which you can use for identification purposes later. Yes, this will be present even if the chooser causes a tombstone event. The final way is to have a single object that registers for the completed event, decoupling the launching from the completion. Thus multiple VM could launch the same chooser, but only one class would handle the result.&lt;br /&gt;
&lt;h3&gt;IWindowManager&lt;/h3&gt;
The IWindowManager was actually in v1.0, as a last minute addition. It’s a really easy way to show native-looking, custom message boxes or modal dialogs. You can also use it to show popups. There is a whole topic devoted to this in the docs.&lt;br /&gt; &lt;br /&gt;
&lt;h4&gt;Referenced Samples&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;Caliburn.Micro.HelloWP7&lt;/li&gt;&lt;/ul&gt;

&lt;h4&gt;Footnotes&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;Even though the IGuardClose interface was designed to handle async scenarios, you must use it synchronously in WP7. This is due to a flaw in the design of Silverlight Navigation Framework which doesn’t account for async shutdown scenarios.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tibel</author><pubDate>Fri, 26 Apr 2013 14:04:14 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Working with Windows Phone 7 v1.1 20130426020414P</guid></item><item><title>New Comment on "Design-Time Support"</title><link>https://caliburnmicro.codeplex.com/wikipage?title=Design-Time Support&amp;ANCHOR#C27282</link><description>very useful&amp;#65281;</description><author>tianhonghui</author><pubDate>Tue, 23 Apr 2013 15:28:31 GMT</pubDate><guid isPermaLink="false">New Comment on "Design-Time Support" 20130423032831P</guid></item><item><title>Updated Wiki: Documentation</title><link>https://caliburnmicro.codeplex.com/documentation?version=87</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Documentation&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;Getting Started
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Introduction&amp;referringTitle=Documentation"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Obtain%20and%20Build%20the%20Code&amp;referringTitle=Documentation"&gt;Obtain and Build the Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Nuget&amp;referringTitle=Documentation"&gt;Nuget&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Cheat%20Sheet&amp;referringTitle=Documentation"&gt;Cheat Sheet&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Soup to Nuts
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Basic%20Configuration%2c%20Actions%20and%20Conventions&amp;referringTitle=Documentation"&gt;Basic Configuration, Actions and Conventions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Customizing%20The%20Bootstrapper&amp;referringTitle=Documentation"&gt;Customizing The Bootstrapper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&amp;referringTitle=Documentation"&gt;All About Actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Working with Windows Phone 7 &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207&amp;referringTitle=Documentation"&gt;v1.0&lt;/a&gt; &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207%20v1.1&amp;referringTitle=Documentation"&gt;v1.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20WinRT&amp;referringTitle=Documentation"&gt;Working with WinRT&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://compiledexperience.com/blog/posts/share-caliburn"&gt;WinRT Sharing with Caliburn Micro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://compiledexperience.com/blog/posts/settings-caliburn"&gt;WinRT Settings with Caliburn Micro&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=IResult%20and%20Coroutines&amp;referringTitle=Documentation"&gt;IResult and Coroutines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Screens%2c%20Conductors%20and%20Composition&amp;referringTitle=Documentation"&gt;Screens, Conductors and Composition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Conventions&amp;referringTitle=Documentation"&gt;All About Conventions&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=View%2fViewModel%20Naming%20Conventions&amp;referringTitle=Documentation"&gt;View&amp;#47;ViewModel Naming Conventions&lt;/a&gt; (v1.3)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Handling%20Custom%20Conventions&amp;referringTitle=Documentation"&gt;Handling Custom Conventions&lt;/a&gt; (v1.3)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Using%20the%20NameTransformer&amp;referringTitle=Documentation"&gt;Using the NameTransformer - Advanced&lt;/a&gt; (v1.1)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Event%20Aggregator&amp;referringTitle=Documentation"&gt;The Event Aggregator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Window%20Manager&amp;referringTitle=Documentation"&gt;The Window Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Design-Time%20Support&amp;referringTitle=Documentation"&gt;Design-Time Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Async%20%28Task%29%20Support&amp;referringTitle=Documentation"&gt;Async &amp;#40;Task&amp;#41; Support&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;External Tutorial
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mindscapehq.com/blog/index.php/2012/01/12/caliburn-micro-part-1-getting-started/"&gt;Mindscape&amp;#39;s Getting Started Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.markermetro.com/2011/05/technical/mvvm-friendly-visual-state-management-with-windows-phone-7/"&gt;Marker Metro’s Visual State Management with WP7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.terrymarshall.com.au/Blog/tabid/162/tagid/37/Caliburn-Micro.aspx"&gt;Terry Marshall&amp;#39;s WinRT Tutorial Series&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wp.qmatteoq.com/first-steps-with-caliburn-micro-in-windows-phone-8-the-complete-series/"&gt;Matteo Pagani&amp;#39;s WP8 Tutorials&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Recipes
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=LoadCatalog%20Result&amp;referringTitle=Documentation"&gt;LoadCatalog Result&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Testing%20Coroutines&amp;referringTitle=Documentation"&gt;Testing Coroutines&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;i&gt;NOTE: Recipes are not maintained by the Caliburn.Micro project but by their contributors. Please contact the contributor with any issues you may find.&lt;/i&gt;&lt;/blockquote&gt;
&lt;ul&gt;&lt;li&gt;Contests
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=2010%20Caliburn.Micro%20Application%20Contest%20Winners&amp;referringTitle=Documentation"&gt;2010 Caliburn.Micro Application Contest Winners&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;3rd Party Extensions
&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/vcaraulean/Caliburn.Micro.Telerik"&gt;Telerik Integration&lt;/a&gt; (for SL 5.0 and WPF 4.0)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://calmicrodevexpress.codeplex.com/"&gt;DevExpress Integration&lt;/a&gt; (for WPF 4.0)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dchaib/Caliburn.Micro.ReactiveUI"&gt;ReactiveUI Integration&lt;/a&gt; (for SL 5.0, WPF 4.5 and WinRT)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kamranayub/CaliburnBindableAppBar"&gt;Bindable ApplicationBar&lt;/a&gt; (for WP 7.1 and WP 8.0)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tibel/Caliburn.Micro.Extras"&gt;Some Extras&lt;/a&gt; (for all platforms)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;i&gt;NOTE: Please contact us if you want a project to be added to the list.&lt;/i&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>EisenbergEffect</author><pubDate>Tue, 23 Apr 2013 14:20:01 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20130423022001P</guid></item><item><title>Updated Wiki: Documentation</title><link>https://caliburnmicro.codeplex.com/documentation?version=86</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Documentation&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;Getting Started
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Introduction&amp;referringTitle=Documentation"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Obtain%20and%20Build%20the%20Code&amp;referringTitle=Documentation"&gt;Obtain and Build the Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Nuget&amp;referringTitle=Documentation"&gt;Nuget&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Cheat%20Sheet&amp;referringTitle=Documentation"&gt;Cheat Sheet&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Soup to Nuts
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Basic%20Configuration%2c%20Actions%20and%20Conventions&amp;referringTitle=Documentation"&gt;Basic Configuration, Actions and Conventions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Customizing%20The%20Bootstrapper&amp;referringTitle=Documentation"&gt;Customizing The Bootstrapper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&amp;referringTitle=Documentation"&gt;All About Actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Working with Windows Phone 7 &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207&amp;referringTitle=Documentation"&gt;v1.0&lt;/a&gt; &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207%20v1.1&amp;referringTitle=Documentation"&gt;v1.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20WinRT&amp;referringTitle=Documentation"&gt;Working with WinRT&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://compiledexperience.com/blog/posts/share-caliburn"&gt;WinRT Sharing with Caliburn Micro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://compiledexperience.com/blog/posts/settings-caliburn"&gt;WinRT Settings with Caliburn Micro&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=IResult%20and%20Coroutines&amp;referringTitle=Documentation"&gt;IResult and Coroutines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Screens%2c%20Conductors%20and%20Composition&amp;referringTitle=Documentation"&gt;Screens, Conductors and Composition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Conventions&amp;referringTitle=Documentation"&gt;All About Conventions&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=View%2fViewModel%20Naming%20Conventions&amp;referringTitle=Documentation"&gt;View&amp;#47;ViewModel Naming Conventions&lt;/a&gt; (v1.3)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Handling%20Custom%20Conventions&amp;referringTitle=Documentation"&gt;Handling Custom Conventions&lt;/a&gt; (v1.3)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Using%20the%20NameTransformer&amp;referringTitle=Documentation"&gt;Using the NameTransformer - Advanced&lt;/a&gt; (v1.1)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Event%20Aggregator&amp;referringTitle=Documentation"&gt;The Event Aggregator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Window%20Manager&amp;referringTitle=Documentation"&gt;The Window Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Design-Time%20Support&amp;referringTitle=Documentation"&gt;Design-Time Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Async%20%28Task%29%20Support&amp;referringTitle=Documentation"&gt;Async &amp;#40;Task&amp;#41; Support&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;External Tutorial
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mindscapehq.com/blog/index.php/2012/01/12/caliburn-micro-part-1-getting-started/"&gt;Mindscape&amp;#39;s Getting Started Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.markermetro.com/2011/05/technical/mvvm-friendly-visual-state-management-with-windows-phone-7/"&gt;Marker Metro’s Visual State Management with WP7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.terrymarshall.com.au/Blog/tabid/162/tagid/37/Caliburn-Micro.aspx"&gt;Terry Marshall&amp;#39;s WinRT Tutorial Series&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wp.qmatteoq.com/tag/caliburn/"&gt;Matteo Pagani&amp;#39;s WP8 Tutorials&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Recipes
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=LoadCatalog%20Result&amp;referringTitle=Documentation"&gt;LoadCatalog Result&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Testing%20Coroutines&amp;referringTitle=Documentation"&gt;Testing Coroutines&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;i&gt;NOTE: Recipes are not maintained by the Caliburn.Micro project but by their contributors. Please contact the contributor with any issues you may find.&lt;/i&gt;&lt;/blockquote&gt;
&lt;ul&gt;&lt;li&gt;Contests
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=2010%20Caliburn.Micro%20Application%20Contest%20Winners&amp;referringTitle=Documentation"&gt;2010 Caliburn.Micro Application Contest Winners&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;3rd Party Extensions
&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/vcaraulean/Caliburn.Micro.Telerik"&gt;Telerik Integration&lt;/a&gt; (for SL 5.0 and WPF 4.0)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://calmicrodevexpress.codeplex.com/"&gt;DevExpress Integration&lt;/a&gt; (for WPF 4.0)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dchaib/Caliburn.Micro.ReactiveUI"&gt;ReactiveUI Integration&lt;/a&gt; (for SL 5.0, WPF 4.5 and WinRT)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kamranayub/CaliburnBindableAppBar"&gt;Bindable ApplicationBar&lt;/a&gt; (for WP 7.1 and WP 8.0)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tibel/Caliburn.Micro.Extras"&gt;Some Extras&lt;/a&gt; (for all platforms)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;i&gt;NOTE: Please contact us if you want a project to be added to the list.&lt;/i&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tibel</author><pubDate>Sat, 13 Apr 2013 19:40:21 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20130413074021P</guid></item><item><title>Updated Wiki: Design-Time Support</title><link>https://caliburnmicro.codeplex.com/wikipage?title=Design-Time Support&amp;version=3</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Design-Time Support&lt;/h1&gt;
Article forthcoming...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enabling Caliburn.Micro inside the Visual Studio designer (or Blend) is quite easy.&lt;br /&gt;&lt;br /&gt;You have to set a Desinger-DataContext and tell CM to enable its magic in your view XAML:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    xmlns:d=&amp;quot;http://schemas.microsoft.com/expression/blend/2008&amp;quot;
    xmlns:mc=&amp;quot;http://schemas.openxmlformats.org/markup-compatibility/2006&amp;quot;
    xmlns:vm=&amp;quot;clr-namespace:CaliburnDesignTimeData.ViewModels&amp;quot;
    xmlns:cal=&amp;quot;clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro&amp;quot;
    mc:Ignorable=&amp;quot;d&amp;quot; 
    d:DataContext=&amp;quot;{d:DesignInstance Type=vm:MainPageViewModel, IsDesignTimeCreatable=True}&amp;quot;
    cal:Bind.AtDesignTime=&amp;quot;True&amp;quot;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;For this to work, the ViewModel must have a default constructor. If this isn&amp;#39;t suitable, you can also use a ViewModelLocator for your design-time ViewModel creation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;NOTE&lt;/i&gt;: It seems that VS2010 has an issue in the &lt;b&gt;WP7 designer&lt;/b&gt; and an exception in CM ConventionManager is thrown. You can workaround this by overriding ApplyValidation in your bootstrapper:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
ConventionManager.ApplyValidation = (binding, viewModelType, property) =&amp;gt; {
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (&lt;span style="color:Blue;"&gt;typeof&lt;/span&gt;(INotifyDataErrorInfo).IsAssignableFrom(viewModelType)) {
            binding.ValidatesOnNotifyDataErrors = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
            binding.ValidatesOnExceptions = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
        }
    };
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tibel</author><pubDate>Tue, 09 Apr 2013 17:35:50 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Design-Time Support 20130409053550P</guid></item><item><title>Updated Wiki: Documentation</title><link>https://caliburnmicro.codeplex.com/documentation?version=85</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Documentation&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;Getting Started
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Introduction&amp;referringTitle=Documentation"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Obtain%20and%20Build%20the%20Code&amp;referringTitle=Documentation"&gt;Obtain and Build the Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Nuget&amp;referringTitle=Documentation"&gt;Nuget&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Cheat%20Sheet&amp;referringTitle=Documentation"&gt;Cheat Sheet&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Soup to Nuts
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Basic%20Configuration%2c%20Actions%20and%20Conventions&amp;referringTitle=Documentation"&gt;Basic Configuration, Actions and Conventions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Customizing%20The%20Bootstrapper&amp;referringTitle=Documentation"&gt;Customizing The Bootstrapper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&amp;referringTitle=Documentation"&gt;All About Actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Working with Windows Phone 7 &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207&amp;referringTitle=Documentation"&gt;v1.0&lt;/a&gt; &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207%20v1.1&amp;referringTitle=Documentation"&gt;v1.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20WinRT&amp;referringTitle=Documentation"&gt;Working with WinRT&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://compiledexperience.com/blog/posts/share-caliburn"&gt;WinRT Sharing with Caliburn Micro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://compiledexperience.com/blog/posts/settings-caliburn"&gt;WinRT Settings with Caliburn Micro&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=IResult%20and%20Coroutines&amp;referringTitle=Documentation"&gt;IResult and Coroutines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Screens%2c%20Conductors%20and%20Composition&amp;referringTitle=Documentation"&gt;Screens, Conductors and Composition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Conventions&amp;referringTitle=Documentation"&gt;All About Conventions&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=View%2fViewModel%20Naming%20Conventions&amp;referringTitle=Documentation"&gt;View&amp;#47;ViewModel Naming Conventions&lt;/a&gt; (v1.3)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Handling%20Custom%20Conventions&amp;referringTitle=Documentation"&gt;Handling Custom Conventions&lt;/a&gt; (v1.3)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Using%20the%20NameTransformer&amp;referringTitle=Documentation"&gt;Using the NameTransformer - Advanced&lt;/a&gt; (v1.1)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Event%20Aggregator&amp;referringTitle=Documentation"&gt;The Event Aggregator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Window%20Manager&amp;referringTitle=Documentation"&gt;The Window Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Design-Time%20Support&amp;referringTitle=Documentation"&gt;Design-Time Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Async%20%28Task%29%20Support&amp;referringTitle=Documentation"&gt;Async &amp;#40;Task&amp;#41; Support&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;External Tutorial
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mindscapehq.com/blog/index.php/2012/01/12/caliburn-micro-part-1-getting-started/"&gt;Mindscape&amp;#39;s Getting Started Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.markermetro.com/2011/05/technical/mvvm-friendly-visual-state-management-with-windows-phone-7/"&gt;Marker Metro’s Visual State Management with WP7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.terrymarshall.com.au/Blog/tabid/162/tagid/37/Caliburn-Micro.aspx"&gt;Terry Marshall&amp;#39;s WinRT Tutorial Series&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wp.qmatteoq.com/tag/caliburn/"&gt;Matteo Pagani&amp;#39;s WP8 Tutorials&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Recipes
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=LoadCatalog%20Result&amp;referringTitle=Documentation"&gt;LoadCatalog Result&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Testing%20Coroutines&amp;referringTitle=Documentation"&gt;Testing Coroutines&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;i&gt;NOTE: Recipes are not maintained by the Caliburn.Micro project but by their contributors. Please contact the contributor with any issues you may find.&lt;/i&gt;&lt;/blockquote&gt;
&lt;ul&gt;&lt;li&gt;Contests
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=2010%20Caliburn.Micro%20Application%20Contest%20Winners&amp;referringTitle=Documentation"&gt;2010 Caliburn.Micro Application Contest Winners&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;3rd Party Extensions
&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/vcaraulean/Caliburn.Micro.Telerik"&gt;Telerik Integration&lt;/a&gt; (for SL 5.0 and WPF 4.0)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://calmicrodevexpress.codeplex.com/"&gt;DevExpress Integration&lt;/a&gt; (for WPF 4.0)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dchaib/Caliburn.Micro.ReactiveUI"&gt;ReactiveUI Integration&lt;/a&gt; (for SL 5.0, WPF 4.5 and WinRT)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mikoskinen/Caliburn.Micro.WP71.Recipes.ExternalModules"&gt;Loading assemblies on-demand&lt;/a&gt; (for WP 7.1)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kamranayub/CaliburnBindableAppBar"&gt;Bindable ApplicationBar&lt;/a&gt; (for WP 7.1 and WP 8.0)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;i&gt;NOTE: Please contact us if you want a project to be added to the list.&lt;/i&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tibel</author><pubDate>Sun, 07 Apr 2013 20:14:12 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20130407081412P</guid></item><item><title>Updated Wiki: Documentation</title><link>https://caliburnmicro.codeplex.com/documentation?version=84</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Documentation&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;Getting Started
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Introduction&amp;referringTitle=Documentation"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Obtain%20and%20Build%20the%20Code&amp;referringTitle=Documentation"&gt;Obtain and Build the Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Nuget&amp;referringTitle=Documentation"&gt;Nuget&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Cheat%20Sheet&amp;referringTitle=Documentation"&gt;Cheat Sheet&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Soup to Nuts
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Basic%20Configuration%2c%20Actions%20and%20Conventions&amp;referringTitle=Documentation"&gt;Basic Configuration, Actions and Conventions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Customizing%20The%20Bootstrapper&amp;referringTitle=Documentation"&gt;Customizing The Bootstrapper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&amp;referringTitle=Documentation"&gt;All About Actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Working with Windows Phone 7 &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207&amp;referringTitle=Documentation"&gt;v1.0&lt;/a&gt; &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207%20v1.1&amp;referringTitle=Documentation"&gt;v1.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20WinRT&amp;referringTitle=Documentation"&gt;Working with WinRT&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://compiledexperience.com/blog/posts/share-caliburn"&gt;WinRT Sharing with Caliburn Micro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://compiledexperience.com/blog/posts/settings-caliburn"&gt;WinRT Settings with Caliburn Micro&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=IResult%20and%20Coroutines&amp;referringTitle=Documentation"&gt;IResult and Coroutines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Screens%2c%20Conductors%20and%20Composition&amp;referringTitle=Documentation"&gt;Screens, Conductors and Composition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Conventions&amp;referringTitle=Documentation"&gt;All About Conventions&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=View%2fViewModel%20Naming%20Conventions&amp;referringTitle=Documentation"&gt;View&amp;#47;ViewModel Naming Conventions&lt;/a&gt; (v1.3)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Handling%20Custom%20Conventions&amp;referringTitle=Documentation"&gt;Handling Custom Conventions&lt;/a&gt; (v1.3)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Using%20the%20NameTransformer&amp;referringTitle=Documentation"&gt;Using the NameTransformer - Advanced&lt;/a&gt; (v1.1)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Event%20Aggregator&amp;referringTitle=Documentation"&gt;The Event Aggregator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Window%20Manager&amp;referringTitle=Documentation"&gt;The Window Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Design-Time%20Support&amp;referringTitle=Documentation"&gt;Design-Time Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Async%20%28Task%29%20Support&amp;referringTitle=Documentation"&gt;Async &amp;#40;Task&amp;#41; Support&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;External Tutorial
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mindscapehq.com/blog/index.php/2012/01/12/caliburn-micro-part-1-getting-started/"&gt;Mindscape&amp;#39;s Getting Started Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.markermetro.com/2011/05/technical/mvvm-friendly-visual-state-management-with-windows-phone-7/"&gt;Marker Metro’s Visual State Management with WP7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.terrymarshall.com.au/Blog/tabid/162/tagid/37/Caliburn-Micro.aspx"&gt;Terry Marshall&amp;#39;s WinRT Tutorial Series&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wp.qmatteoq.com/tag/caliburn/"&gt;Matteo Pagani&amp;#39;s WP8 Tutorials&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Recipes
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=LoadCatalog%20Result&amp;referringTitle=Documentation"&gt;LoadCatalog Result&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Testing%20Coroutines&amp;referringTitle=Documentation"&gt;Testing Coroutines&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;i&gt;NOTE: Recipes are not maintained by the Caliburn.Micro project but by their contributors. Please contact the contributor with any issues you may find.&lt;/i&gt;&lt;/blockquote&gt;
&lt;ul&gt;&lt;li&gt;Contests
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=2010%20Caliburn.Micro%20Application%20Contest%20Winners&amp;referringTitle=Documentation"&gt;2010 Caliburn.Micro Application Contest Winners&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;3rd Party Extensions
&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/vcaraulean/Caliburn.Micro.Telerik"&gt;Telerik Integration&lt;/a&gt; (for SL 5.0 and WPF 4.0)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://calmicrodevexpress.codeplex.com/"&gt;DevExpress Integration&lt;/a&gt; (for WPF 4.0)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dchaib/Caliburn.Micro.ReactiveUI"&gt;ReactiveUI Integration&lt;/a&gt; (for SL 5.0, WPF 4.5 and WinRT)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mikoskinen/Caliburn.Micro.WP71.Recipes.ExternalModules"&gt;Loading assemblies on-demand&lt;/a&gt; (for WP 7.1)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kamranayub/CaliburnBindableAppBar"&gt;Caliburn Bindable AppBar&lt;/a&gt; (for WP 7.1 and WP 8.0)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;i&gt;NOTE: Please contact us if you want a project to be added to the list.&lt;/i&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tibel</author><pubDate>Sun, 07 Apr 2013 20:07:29 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20130407080729P</guid></item><item><title>Updated Wiki: Async (Task) Support</title><link>https://caliburnmicro.codeplex.com/wikipage?title=Async (Task) Support&amp;version=1</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Async (Task) Support&lt;/h1&gt;
Article forthcoming...&lt;br /&gt;&lt;br /&gt;&lt;i&gt;NOTE: Task&amp;#39;s are not supported on SL4 and WP71.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tibel</author><pubDate>Sat, 06 Apr 2013 11:50:39 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Async (Task) Support 20130406115039A</guid></item><item><title>Updated Wiki: Design-Time Support</title><link>https://caliburnmicro.codeplex.com/wikipage?title=Design-Time Support&amp;version=2</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Design-Time Support&lt;/h1&gt;
Article forthcoming...&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tibel</author><pubDate>Sat, 06 Apr 2013 11:48:47 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Design-Time Support 20130406114847A</guid></item><item><title>Updated Wiki: Design-Time Support</title><link>https://caliburnmicro.codeplex.com/wikipage?title=Design-Time Support&amp;version=1</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Design-Time Support&lt;/h1&gt;
Article forthcoming...&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tibel</author><pubDate>Sat, 06 Apr 2013 11:48:20 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Design-Time Support 20130406114820A</guid></item><item><title>Updated Wiki: Documentation</title><link>https://caliburnmicro.codeplex.com/documentation?version=83</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Documentation&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;Getting Started
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Introduction&amp;referringTitle=Documentation"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Obtain%20and%20Build%20the%20Code&amp;referringTitle=Documentation"&gt;Obtain and Build the Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Nuget&amp;referringTitle=Documentation"&gt;Nuget&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Cheat%20Sheet&amp;referringTitle=Documentation"&gt;Cheat Sheet&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Soup to Nuts
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Basic%20Configuration%2c%20Actions%20and%20Conventions&amp;referringTitle=Documentation"&gt;Basic Configuration, Actions and Conventions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Customizing%20The%20Bootstrapper&amp;referringTitle=Documentation"&gt;Customizing The Bootstrapper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&amp;referringTitle=Documentation"&gt;All About Actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Working with Windows Phone 7 &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207&amp;referringTitle=Documentation"&gt;v1.0&lt;/a&gt; &lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207%20v1.1&amp;referringTitle=Documentation"&gt;v1.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20WinRT&amp;referringTitle=Documentation"&gt;Working with WinRT&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://compiledexperience.com/blog/posts/share-caliburn"&gt;WinRT Sharing with Caliburn Micro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://compiledexperience.com/blog/posts/settings-caliburn"&gt;WinRT Settings with Caliburn Micro&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=IResult%20and%20Coroutines&amp;referringTitle=Documentation"&gt;IResult and Coroutines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Screens%2c%20Conductors%20and%20Composition&amp;referringTitle=Documentation"&gt;Screens, Conductors and Composition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Conventions&amp;referringTitle=Documentation"&gt;All About Conventions&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=View%2fViewModel%20Naming%20Conventions&amp;referringTitle=Documentation"&gt;View&amp;#47;ViewModel Naming Conventions&lt;/a&gt; (v1.3)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Handling%20Custom%20Conventions&amp;referringTitle=Documentation"&gt;Handling Custom Conventions&lt;/a&gt; (v1.3)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Using%20the%20NameTransformer&amp;referringTitle=Documentation"&gt;Using the NameTransformer - Advanced&lt;/a&gt; (v1.1)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Event%20Aggregator&amp;referringTitle=Documentation"&gt;The Event Aggregator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=The%20Window%20Manager&amp;referringTitle=Documentation"&gt;The Window Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Design-Time%20Support&amp;referringTitle=Documentation"&gt;Design-Time Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Async%20%28Task%29%20Support&amp;referringTitle=Documentation"&gt;Async &amp;#40;Task&amp;#41; Support&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;External Tutorial
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mindscapehq.com/blog/index.php/2012/01/12/caliburn-micro-part-1-getting-started/"&gt;Mindscape&amp;#39;s Getting Started Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.markermetro.com/2011/05/technical/mvvm-friendly-visual-state-management-with-windows-phone-7/"&gt;Marker Metro’s Visual State Management with WP7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.terrymarshall.com.au/Blog/tabid/162/tagid/37/Caliburn-Micro.aspx"&gt;Terry Marshall&amp;#39;s WinRT Tutorial Series&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wp.qmatteoq.com/tag/caliburn/"&gt;Matteo Pagani&amp;#39;s WP8 Tutorials&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Recipes
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=LoadCatalog%20Result&amp;referringTitle=Documentation"&gt;LoadCatalog Result&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=Testing%20Coroutines&amp;referringTitle=Documentation"&gt;Testing Coroutines&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;i&gt;NOTE: Recipes are not maintained by the Caliburn.Micro project but by their contributors. Please contact the contributor with any issues you may find.&lt;/i&gt;&lt;/blockquote&gt;
&lt;ul&gt;&lt;li&gt;Contests
&lt;ul&gt;&lt;li&gt;&lt;a href="https://caliburnmicro.codeplex.com/wikipage?title=2010%20Caliburn.Micro%20Application%20Contest%20Winners&amp;referringTitle=Documentation"&gt;2010 Caliburn.Micro Application Contest Winners&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;3rd Party Extensions
&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/vcaraulean/Caliburn.Micro.Telerik"&gt;Telerik Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://calmicrodevexpress.codeplex.com/"&gt;DevExpress Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mikoskinen/Caliburn-Micro-WinRT-Callisto-Helpers"&gt;Callisto Helpers&lt;/a&gt; (for WinRT)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kmees/CMContrib"&gt;CMContrib&lt;/a&gt; Extensions&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mikoskinen/Caliburn.Micro.WP71.Recipes.ExternalModules"&gt;Loading assemblies on-demand&lt;/a&gt; (for WP7)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kamranayub/CaliburnBindableAppBar"&gt;Caliburn Bindable AppBar&lt;/a&gt; (for WP7 and WP8)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;i&gt;NOTE: Please contact us if you want a project to be added to the list.&lt;/i&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tibel</author><pubDate>Sat, 06 Apr 2013 11:47:15 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20130406114715A</guid></item></channel></rss>