<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>Magellan</title><link>http://magellan.codeplex.com/project/feeds/rss</link><description>Magellan is a lightweight MVC framework that makes it easy to build WPF navigation applications. The design is drawn deeply from the ASP.NET MVC framework, and it should feel familiar to anyone who has worked with ASP.NET MVC.</description><item><title>Updated Wiki: Documentation</title><link>http://magellan.codeplex.com/documentation?version=1</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;&lt;a href="http://code.google.com/p/magellan-framework/wiki/GettingStarted" class="externalLink"&gt;See the Google Code Magellan wiki&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>stovellp</author><pubDate>Tue, 01 Feb 2011 14:21:22 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20110201022122P</guid></item><item><title>Updated Wiki: Home</title><link>http://magellan.codeplex.com/wikipage?version=22</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;&lt;a href="http://code.google.com/p/magellan-framework" class="externalLink"&gt;Magellan has moved to Google Code. Go there now.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>stovellp</author><pubDate>Tue, 01 Feb 2011 14:17:20 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110201021720P</guid></item><item><title>New Post: Default Transitions</title><link>http://magellan.codeplex.com/Thread/View.aspx?ThreadId=234330</link><description>&lt;div style="line-height: normal;"&gt;
&lt;p&gt;In the discussion of transitions it points out that you have to define a transition for each mapping.&amp;nbsp; Not really sure why you'd ever want to do that in most applications.&amp;nbsp; In general you'd want one transition that impacts everybody and, perhaps,
 override the default for specific cases.&amp;nbsp; To this end Magellan needs to expose the ability to set a default transition that applies to navigation except when specifically overridden either for a specific mapping (such as to an error page) or programmatically
 via the API.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Someone posted this in the feedback for the article and you mentioned that you'd try to post a simple implementation but I haven't seen anything since then.&lt;/p&gt;
&lt;/div&gt;</description><author>CoolDadTx</author><pubDate>Thu, 11 Nov 2010 16:02:16 GMT</pubDate><guid isPermaLink="false">New Post: Default Transitions 20101111040216P</guid></item><item><title>New Post: Better Error Handling</title><link>http://magellan.codeplex.com/Thread/View.aspx?ThreadId=234329</link><description>&lt;div style="line-height: normal;"&gt;
&lt;p&gt;Currently you can handle some errors during navigation by writing an action or result filter.&amp;nbsp; But this only covers some of the cases.&amp;nbsp; Ideally Magellan should allow us to handle any navigation error in a central location.&amp;nbsp; For example it
 doesn't make a lot of sense to create an action filter that we then have to apply to each controller just to get consistent behavior.&amp;nbsp; We should be able to specify that when a navigation error occurs do something irrelevant of the controller.&amp;nbsp; This
 would become the default behavior (that controllers could override with filters).&lt;/p&gt;
&lt;p&gt;Even more critical, some errors can't be dealt with using filters.&amp;nbsp; Specifically if you enter a URL that doesn't match a controller then Magellan throws an exception.&amp;nbsp; In order to handle this case we'd have to wrap all calls to Navigate in try-catch
 blocks.&amp;nbsp; Since we generally want the same behavior it would be better if we could hook into either events off the navigator (or perhaps derive our own type and override some methods) to handle navigation errors.&amp;nbsp; This would allow us, for example,
 to redirect to an error page or a &amp;quot;file not found&amp;quot; page when an error occurs.&lt;/p&gt;
&lt;/div&gt;</description><author>CoolDadTx</author><pubDate>Thu, 11 Nov 2010 15:59:30 GMT</pubDate><guid isPermaLink="false">New Post: Better Error Handling 20101111035930P</guid></item><item><title>New Post: External Navigation Support</title><link>http://magellan.codeplex.com/Thread/View.aspx?ThreadId=234326</link><description>&lt;div style="line-height: normal;"&gt;
&lt;p&gt;Magellan seems pretty cool but it really needs support for going to URLs outside the application.&amp;nbsp; I'm thinking either web sites or even custom URLs (definable by creating a new URI parser and registering it with .NET).&amp;nbsp; Right now if you try to
 navigate to an external site then you'll get an exception.&amp;nbsp; While you could just skip Magellan for these particular cases it causes the code to break down pretty quickly.&amp;nbsp; Firstly you have to special case anywhere where you'd normally want to navigate
 to first check to see if it is an external URL.&amp;nbsp; The second, even more annoying, problem is that Back/Forward won't work outside Magellan-managed pages.&amp;nbsp; I've tried to create a route catalog to handle external sites but it seems that the catalog
 has to be aware of all routes rather than the navigator simply asking the catalog if it can handle the URL.&lt;/p&gt;
&lt;p&gt;Ideally what would need to happen is that Magellan allows for navigation to external URLs.&amp;nbsp; When switching to an external URL Magellan would need to hook into the WPF NavigationService to allow the Back/Forward commands to continue to work correctly.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</description><author>CoolDadTx</author><pubDate>Thu, 11 Nov 2010 15:55:29 GMT</pubDate><guid isPermaLink="false">New Post: External Navigation Support 20101111035529P</guid></item><item><title>New Post: What about Page lifetime?</title><link>http://magellan.codeplex.com/Thread/View.aspx?ThreadId=230994</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;I was feeling like during execution with&amp;nbsp;Magellan 2.0, it was recording strong references to unused pages as opposite to default WPF Navigation behavior. Someone could confirm it?&lt;/p&gt;
&lt;p&gt;Garbage collector could incur in high memory volume missed to collect.&lt;/p&gt;&lt;/div&gt;</description><author>heeroyui1777</author><pubDate>Fri, 15 Oct 2010 04:20:17 GMT</pubDate><guid isPermaLink="false">New Post: What about Page lifetime? 20101015042017A</guid></item><item><title>Updated Wiki: Home</title><link>http://magellan.codeplex.com/wikipage?version=21</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Magellan is moving to Google Code&lt;/h1&gt;
&lt;ol&gt;&lt;li&gt;Magellan 1.1 (stable) for VS 2008 is documented and available on this CodePlex site&lt;/li&gt;
&lt;li&gt;Magellan 2.0 (unstable) for VS 2010/.NET 4.0 is undocumented, but source code is available from &lt;a href="http://code.google.com/p/magellan-framework" class="externalLink"&gt;Google Code&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;

&lt;hr /&gt;

&lt;h3&gt;What is it?&lt;/h3&gt;Magellan is a lightweight MVC framework that makes it easy to build WPF navigation applications. It is inspired by the ASP.NET MVC framework, and it should feel familiar to anyone who has worked with ASP.NET MVC.&lt;br /&gt;&lt;br /&gt;The main features are:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Model-View-Controller&lt;/b&gt; framework&lt;/li&gt;
&lt;li&gt;Blend &lt;b&gt;behaviors&lt;/b&gt; and &lt;b&gt;Commands&lt;/b&gt; to make navigation easy&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Transitions&lt;/b&gt; between pages&lt;/li&gt;
&lt;li&gt;Action filters for &lt;b&gt;cross-cutting concerns&lt;/b&gt; such as authorization and redirection&lt;/li&gt;
&lt;li&gt;Integration with &lt;b&gt;&lt;a href="http://compositewpf.codeplex.com" class="externalLink"&gt;Composite WPF&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;
Applications built using Magellan still make use of common patterns such as MVP and MVVM; Magellan just provides navigation support. &lt;br /&gt;&lt;br /&gt;
&lt;h3&gt;Getting Started&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=introducing-magellan&amp;referringTitle=Home"&gt;Introducing Magellan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-quickstart&amp;referringTitle=Home"&gt;Getting Started &amp;#40;Manually&amp;#41;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Documentation&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-commands&amp;referringTitle=Home"&gt;Commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-behaviors&amp;referringTitle=Home"&gt;Behaviors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-navigator&amp;referringTitle=Home"&gt;The Navigator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-controllers&amp;referringTitle=Home"&gt;Controllers and Controller Factories&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-action-filters&amp;referringTitle=Home"&gt;Action Filters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-action-results&amp;referringTitle=Home"&gt;Action Results&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-view-engines&amp;referringTitle=Home"&gt;View Engines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-transitions&amp;referringTitle=Home"&gt;Transitions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-shared-layouts&amp;referringTitle=Home"&gt;Shared Layouts&amp;#47;Master Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-forms&amp;referringTitle=Home"&gt;Forms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-exceptions&amp;referringTitle=Home"&gt;Exceptions&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Integration&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-ioc&amp;referringTitle=Home"&gt;Using Magellan with an IOC container&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-composite-wpf&amp;referringTitle=Home"&gt;Using Magellan with Composite WPF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-mvvm-toolkit&amp;referringTitle=Home"&gt;Using Magellan with Microsoft MVVM Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-mvvm-light-toolkit&amp;referringTitle=Home"&gt;Using Magellan with MVVM Light Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-windows-forms&amp;referringTitle=Home"&gt;Using Magellan with Windows Forms&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Advanced Features&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-async-controllers&amp;referringTitle=Home"&gt;Asynchronous controller support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-diagnostics&amp;referringTitle=Home"&gt;Diagnostics and Tracing&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>stovellp</author><pubDate>Sun, 22 Aug 2010 16:51:11 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100822045111P</guid></item><item><title>Updated Wiki: Home</title><link>http://magellan.codeplex.com/wikipage?version=20</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Magellan is moving to Google Code&lt;/h1&gt;
&lt;ol&gt;&lt;li&gt;Magellan 1.1 (stable) for VS 2008 is documented and available on this CodePlex site&lt;/li&gt;
&lt;li&gt;Magellan 2.0 (unstable) for VS 2010/.NET 4.0 is undocumented, but source code is available from &lt;a href="http://Google Code" class="externalLink"&gt;http://code.google.com/p/magellan-framework&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;

&lt;hr /&gt;

&lt;h3&gt;What is it?&lt;/h3&gt;Magellan is a lightweight MVC framework that makes it easy to build WPF navigation applications. It is inspired by the ASP.NET MVC framework, and it should feel familiar to anyone who has worked with ASP.NET MVC.&lt;br /&gt;&lt;br /&gt;The main features are:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Model-View-Controller&lt;/b&gt; framework&lt;/li&gt;
&lt;li&gt;Blend &lt;b&gt;behaviors&lt;/b&gt; and &lt;b&gt;Commands&lt;/b&gt; to make navigation easy&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Transitions&lt;/b&gt; between pages&lt;/li&gt;
&lt;li&gt;Action filters for &lt;b&gt;cross-cutting concerns&lt;/b&gt; such as authorization and redirection&lt;/li&gt;
&lt;li&gt;Integration with &lt;b&gt;&lt;a href="http://compositewpf.codeplex.com" class="externalLink"&gt;Composite WPF&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;
Applications built using Magellan still make use of common patterns such as MVP and MVVM; Magellan just provides navigation support. &lt;br /&gt;&lt;br /&gt;
&lt;h3&gt;Getting Started&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=introducing-magellan&amp;referringTitle=Home"&gt;Introducing Magellan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-quickstart&amp;referringTitle=Home"&gt;Getting Started &amp;#40;Manually&amp;#41;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Documentation&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-commands&amp;referringTitle=Home"&gt;Commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-behaviors&amp;referringTitle=Home"&gt;Behaviors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-navigator&amp;referringTitle=Home"&gt;The Navigator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-controllers&amp;referringTitle=Home"&gt;Controllers and Controller Factories&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-action-filters&amp;referringTitle=Home"&gt;Action Filters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-action-results&amp;referringTitle=Home"&gt;Action Results&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-view-engines&amp;referringTitle=Home"&gt;View Engines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-transitions&amp;referringTitle=Home"&gt;Transitions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-shared-layouts&amp;referringTitle=Home"&gt;Shared Layouts&amp;#47;Master Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-forms&amp;referringTitle=Home"&gt;Forms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-exceptions&amp;referringTitle=Home"&gt;Exceptions&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Integration&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-ioc&amp;referringTitle=Home"&gt;Using Magellan with an IOC container&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-composite-wpf&amp;referringTitle=Home"&gt;Using Magellan with Composite WPF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-mvvm-toolkit&amp;referringTitle=Home"&gt;Using Magellan with Microsoft MVVM Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-mvvm-light-toolkit&amp;referringTitle=Home"&gt;Using Magellan with MVVM Light Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-windows-forms&amp;referringTitle=Home"&gt;Using Magellan with Windows Forms&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Advanced Features&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-async-controllers&amp;referringTitle=Home"&gt;Asynchronous controller support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-diagnostics&amp;referringTitle=Home"&gt;Diagnostics and Tracing&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>stovellp</author><pubDate>Sun, 22 Aug 2010 14:52:37 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100822025237P</guid></item><item><title>Updated Wiki: Home</title><link>http://magellan.codeplex.com/wikipage?version=19</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Magellan is moving to Google Code&lt;/h1&gt;
&lt;ol&gt;&lt;li&gt;Magellan 1.1 (stable) for VS 2008 is documented and available on this CodePlex site&lt;/li&gt;
&lt;li&gt;Magellan 2.0 (unstable) for VS 2010/.NET 4.0 is undocumented, but source code is available from &lt;a href="http://Google Code" class="externalLink"&gt;http://code.google.com/p/magellan-framework&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;br /&gt;---&lt;br /&gt;
&lt;h3&gt;What is it?&lt;/h3&gt;Magellan is a lightweight MVC framework that makes it easy to build WPF navigation applications. It is inspired by the ASP.NET MVC framework, and it should feel familiar to anyone who has worked with ASP.NET MVC.&lt;br /&gt;&lt;br /&gt;The main features are:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Model-View-Controller&lt;/b&gt; framework&lt;/li&gt;
&lt;li&gt;Blend &lt;b&gt;behaviors&lt;/b&gt; and &lt;b&gt;Commands&lt;/b&gt; to make navigation easy&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Transitions&lt;/b&gt; between pages&lt;/li&gt;
&lt;li&gt;Action filters for &lt;b&gt;cross-cutting concerns&lt;/b&gt; such as authorization and redirection&lt;/li&gt;
&lt;li&gt;Integration with &lt;b&gt;&lt;a href="http://compositewpf.codeplex.com" class="externalLink"&gt;Composite WPF&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;
Applications built using Magellan still make use of common patterns such as MVP and MVVM; Magellan just provides navigation support. &lt;br /&gt;&lt;br /&gt;
&lt;h3&gt;Getting Started&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=introducing-magellan&amp;referringTitle=Home"&gt;Introducing Magellan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-quickstart&amp;referringTitle=Home"&gt;Getting Started &amp;#40;Manually&amp;#41;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Documentation&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-commands&amp;referringTitle=Home"&gt;Commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-behaviors&amp;referringTitle=Home"&gt;Behaviors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-navigator&amp;referringTitle=Home"&gt;The Navigator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-controllers&amp;referringTitle=Home"&gt;Controllers and Controller Factories&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-action-filters&amp;referringTitle=Home"&gt;Action Filters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-action-results&amp;referringTitle=Home"&gt;Action Results&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-view-engines&amp;referringTitle=Home"&gt;View Engines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-transitions&amp;referringTitle=Home"&gt;Transitions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-shared-layouts&amp;referringTitle=Home"&gt;Shared Layouts&amp;#47;Master Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-forms&amp;referringTitle=Home"&gt;Forms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-exceptions&amp;referringTitle=Home"&gt;Exceptions&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Integration&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-ioc&amp;referringTitle=Home"&gt;Using Magellan with an IOC container&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-composite-wpf&amp;referringTitle=Home"&gt;Using Magellan with Composite WPF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-mvvm-toolkit&amp;referringTitle=Home"&gt;Using Magellan with Microsoft MVVM Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-mvvm-light-toolkit&amp;referringTitle=Home"&gt;Using Magellan with MVVM Light Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-windows-forms&amp;referringTitle=Home"&gt;Using Magellan with Windows Forms&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Advanced Features&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-async-controllers&amp;referringTitle=Home"&gt;Asynchronous controller support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-diagnostics&amp;referringTitle=Home"&gt;Diagnostics and Tracing&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>stovellp</author><pubDate>Sun, 22 Aug 2010 14:52:17 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100822025217P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://magellan.codeplex.com/documentation?version=3</link><description>&lt;div class="wikidoc"&gt;&lt;h3&gt;Getting Started&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=introducing-magellan&amp;referringTitle=Documentation"&gt;Introducing Magellan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-quickstart&amp;referringTitle=Documentation"&gt;Getting Started &amp;#40;Manually&amp;#41;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Documentation&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-commands&amp;referringTitle=Documentation"&gt;Commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-behaviors&amp;referringTitle=Documentation"&gt;Behaviors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-navigator&amp;referringTitle=Documentation"&gt;The Navigator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-controllers&amp;referringTitle=Documentation"&gt;Controllers and Controller Factories&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-action-filters&amp;referringTitle=Documentation"&gt;Action Filters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-action-results&amp;referringTitle=Documentation"&gt;Action Results&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-view-engines&amp;referringTitle=Documentation"&gt;View Engines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-transitions&amp;referringTitle=Documentation"&gt;Transitions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-shared-layouts&amp;referringTitle=Documentation"&gt;Shared Layouts&amp;#47;Master Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-forms&amp;referringTitle=Documentation"&gt;Forms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-exceptions&amp;referringTitle=Documentation"&gt;Exceptions&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Integration&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-ioc&amp;referringTitle=Documentation"&gt;Using Magellan with an IOC container&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-composite-wpf&amp;referringTitle=Documentation"&gt;Using Magellan with Composite WPF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-mvvm-toolkit&amp;referringTitle=Documentation"&gt;Using Magellan with Microsoft MVVM Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-mvvm-light-toolkit&amp;referringTitle=Documentation"&gt;Using Magellan with MVVM Light Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-windows-forms&amp;referringTitle=Documentation"&gt;Using Magellan with Windows Forms&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Advanced Features&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-async-controllers&amp;referringTitle=Documentation"&gt;Asynchronous controller support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-diagnostics&amp;referringTitle=Documentation"&gt;Diagnostics and Tracing&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>stovellp</author><pubDate>Sun, 22 Aug 2010 14:43:59 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20100822024359P</guid></item><item><title>Updated Wiki: Home</title><link>http://magellan.codeplex.com/wikipage?version=18</link><description>&lt;div class="wikidoc"&gt;&lt;h3&gt;What is it?&lt;/h3&gt;Magellan is a lightweight MVC framework that makes it easy to build WPF navigation applications. It is inspired by the ASP.NET MVC framework, and it should feel familiar to anyone who has worked with ASP.NET MVC.&lt;br /&gt;&lt;br /&gt;The main features are:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Model-View-Controller&lt;/b&gt; framework&lt;/li&gt;
&lt;li&gt;Blend &lt;b&gt;behaviors&lt;/b&gt; and &lt;b&gt;Commands&lt;/b&gt; to make navigation easy&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Transitions&lt;/b&gt; between pages&lt;/li&gt;
&lt;li&gt;Action filters for &lt;b&gt;cross-cutting concerns&lt;/b&gt; such as authorization and redirection&lt;/li&gt;
&lt;li&gt;Integration with &lt;b&gt;&lt;a href="http://compositewpf.codeplex.com" class="externalLink"&gt;Composite WPF&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;
Applications built using Magellan still make use of common patterns such as MVP and MVVM; Magellan just provides navigation support. &lt;br /&gt;&lt;br /&gt;
&lt;h3&gt;Getting Started&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=introducing-magellan&amp;referringTitle=Home"&gt;Introducing Magellan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-quickstart&amp;referringTitle=Home"&gt;Getting Started &amp;#40;Manually&amp;#41;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Documentation&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-commands&amp;referringTitle=Home"&gt;Commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-behaviors&amp;referringTitle=Home"&gt;Behaviors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-navigator&amp;referringTitle=Home"&gt;The Navigator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-controllers&amp;referringTitle=Home"&gt;Controllers and Controller Factories&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-action-filters&amp;referringTitle=Home"&gt;Action Filters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-action-results&amp;referringTitle=Home"&gt;Action Results&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-view-engines&amp;referringTitle=Home"&gt;View Engines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-transitions&amp;referringTitle=Home"&gt;Transitions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-shared-layouts&amp;referringTitle=Home"&gt;Shared Layouts&amp;#47;Master Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-forms&amp;referringTitle=Home"&gt;Forms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-exceptions&amp;referringTitle=Home"&gt;Exceptions&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Integration&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-ioc&amp;referringTitle=Home"&gt;Using Magellan with an IOC container&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-composite-wpf&amp;referringTitle=Home"&gt;Using Magellan with Composite WPF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-mvvm-toolkit&amp;referringTitle=Home"&gt;Using Magellan with Microsoft MVVM Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-mvvm-light-toolkit&amp;referringTitle=Home"&gt;Using Magellan with MVVM Light Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-windows-forms&amp;referringTitle=Home"&gt;Using Magellan with Windows Forms&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Advanced Features&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-async-controllers&amp;referringTitle=Home"&gt;Asynchronous controller support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://magellan.codeplex.com/wikipage?title=magellan-diagnostics&amp;referringTitle=Home"&gt;Diagnostics and Tracing&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>stovellp</author><pubDate>Sun, 22 Aug 2010 14:43:51 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100822024351P</guid></item><item><title>Updated Wiki: magellan-diagnostics</title><link>http://magellan.codeplex.com/wikipage?title=magellan-diagnostics&amp;version=1</link><description>&lt;div class="wikidoc"&gt;Magellan makes use of TraceSources internally for providing diagnostic information. By default nothing is traced, but you can configure the trace sources to see details.&lt;br /&gt;&lt;br /&gt;Configuring the trace sources can be done through the application configuration file:&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;xml&lt;/span&gt; &lt;span style="color:Red;"&gt;version&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;1.0&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;encoding&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;utf-8&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;configuration&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;system.diagnostics&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;sources&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;source&lt;/span&gt; &lt;span style="color:Red;"&gt;name&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;Magellan&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;switchValue&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;Verbose&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;listeners&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;clear&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;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&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;Console&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;type&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;System.Diagnostics.ConsoleTraceListener&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;listeners&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;source&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;sources&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;system.diagnostics&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;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Or through code, for example, in the App.xaml code behind:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
Magellan.Diagnostics.TraceSources.MagellanSource.Switch.Level = SourceLevels.Verbose;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Here is an example of what is logged at the Information level:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
Magellan Information: 0 : The Navigator &lt;span style="color:Blue;"&gt;is&lt;/span&gt; executing the request &lt;span style="color:#A31515;"&gt;&amp;#39;Controller=Home; Action=Home; RequestID=6ce8e373-f2d9-48d0-b1c2-9438094feeaf&amp;#39;&lt;/span&gt;.
Magellan Information: 0 : Controller &lt;span style="color:#A31515;"&gt;&amp;#39;iPhone.Applications.Home.Controllers.HomeController&amp;#39;&lt;/span&gt; &lt;span style="color:Blue;"&gt;is&lt;/span&gt; executing request &lt;span style="color:#A31515;"&gt;&amp;#39;Controller=Home; Action=Home; RequestID=6ce8e373-f2d9-48d0-b1c2-9438094feeaf&amp;#39;&lt;/span&gt;.
Magellan Information: 0 : The PageViewEngine &lt;span style="color:Blue;"&gt;is&lt;/span&gt; rendering the page &lt;span style="color:#A31515;"&gt;&amp;#39;iPhone.Applications.Home.Views.HomeView&amp;#39;&lt;/span&gt;.
Magellan Information: 0 : Request completed: &lt;span style="color:#A31515;"&gt;&amp;#39;Controller=Home; Action=Home; RequestID=6ce8e373-f2d9-48d0-b1c2-9438094feeaf&amp;#39;&lt;/span&gt;.
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Here is what is logged at the Verbose level:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
Magellan Information: 0 : The Navigator &lt;span style="color:Blue;"&gt;is&lt;/span&gt; executing the request &lt;span style="color:#A31515;"&gt;&amp;#39;Controller=Home; Action=Home; RequestID=2704ddc6-0dca-412f-88fc-b08a008ee586&amp;#39;&lt;/span&gt;.
Magellan Verbose: 0 : Resolving controller &lt;span style="color:#A31515;"&gt;&amp;#39;Home&amp;#39;&lt;/span&gt; &lt;span style="color:Blue;"&gt;for&lt;/span&gt; request &lt;span style="color:#A31515;"&gt;&amp;#39;Controller=Home; Action=Home; RequestID=2704ddc6-0dca-412f-88fc-b08a008ee586&amp;#39;&lt;/span&gt;
Magellan Information: 0 : Controller &lt;span style="color:#A31515;"&gt;&amp;#39;iPhone.Applications.Home.Controllers.HomeController&amp;#39;&lt;/span&gt; &lt;span style="color:Blue;"&gt;is&lt;/span&gt; executing request &lt;span style="color:#A31515;"&gt;&amp;#39;Controller=Home; Action=Home; RequestID=2704ddc6-0dca-412f-88fc-b08a008ee586&amp;#39;&lt;/span&gt;.
Magellan Verbose: 0 : DefaultActionInvoker found the action &lt;span style="color:#A31515;"&gt;&amp;#39;Home&amp;#39;&lt;/span&gt; &lt;span style="color:Blue;"&gt;as&lt;/span&gt; method &lt;span style="color:#A31515;"&gt;&amp;#39;Magellan.Framework.ActionResult Home()&amp;#39;&lt;/span&gt;
Magellan Verbose: 0 : DefaultActionInvoker found the following action filters &lt;span style="color:Blue;"&gt;for&lt;/span&gt; action &lt;span style="color:#A31515;"&gt;&amp;#39;Home&amp;#39;&lt;/span&gt;: &lt;span style="color:#A31515;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;.
Magellan Verbose: 0 : DefaultActionInvoker found the following result filters &lt;span style="color:Blue;"&gt;for&lt;/span&gt; action &lt;span style="color:#A31515;"&gt;&amp;#39;Home&amp;#39;&lt;/span&gt;: &lt;span style="color:#A31515;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;.
Magellan Verbose: 0 : The ViewEngineCollection &lt;span style="color:Blue;"&gt;is&lt;/span&gt; consulting the view engine &lt;span style="color:#A31515;"&gt;&amp;#39;Magellan.Framework.PageViewEngine&amp;#39;&lt;/span&gt; &lt;span style="color:Blue;"&gt;for&lt;/span&gt; the view &lt;span style="color:#A31515;"&gt;&amp;#39;Home&amp;#39;&lt;/span&gt;.
Magellan Information: 0 : The PageViewEngine &lt;span style="color:Blue;"&gt;is&lt;/span&gt; rendering the page &lt;span style="color:#A31515;"&gt;&amp;#39;iPhone.Applications.Home.Views.HomeView&amp;#39;&lt;/span&gt;.
Magellan Verbose: 0 : The PageViewEngine has navigated to the page &lt;span style="color:#A31515;"&gt;&amp;#39;iPhone.Applications.Home.Views.HomeView&amp;#39;&lt;/span&gt;.
Magellan Verbose: 0 : The PageViewEngine &lt;span style="color:Blue;"&gt;is&lt;/span&gt; clearing the navigation history.
Magellan Information: 0 : Request completed: &lt;span style="color:#A31515;"&gt;&amp;#39;Controller=Home; Action=Home; RequestID=2704ddc6-0dca-412f-88fc-b08a008ee586&amp;#39;&lt;/span&gt;.
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The Warning and Error levels are rarely used - warning is used when Magellan decides on a course of action that is potentially incorrect, and errors are usually logged before an exception is thrown.&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>stovellp</author><pubDate>Sun, 22 Aug 2010 14:43:22 GMT</pubDate><guid isPermaLink="false">Updated Wiki: magellan-diagnostics 20100822024322P</guid></item><item><title>Updated Wiki: magellan-async-controllers</title><link>http://magellan.codeplex.com/wikipage?title=magellan-async-controllers&amp;version=2</link><description>&lt;div class="wikidoc"&gt;Magellan 1.1 brings support for asynchronous controllers. First we&amp;#39;ll look at what it enables, then I will show some ways to configure it.&lt;br /&gt;&lt;br /&gt;The controller action below makes a WCF call to load a list of customers, which are used as the model for the view. This service call could take some time to evaluate:&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; CustomerController : Controller
{
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; ActionResult List()
    {
        Model = CustomerService.GetCustomers();
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; Page(&lt;span style="color:#A31515;"&gt;&amp;quot;CustomerList&amp;quot;&lt;/span&gt;);
    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;With asynchronous controllers enabled, Magellan will invoke the List action on a background thread. Since page navigation has to take place on the UI thread, the page rendering will be automatically dispatched to the UI thread, but this happens after the controller action has been executed. The result is that the UI remains snappy and responsive.&lt;br /&gt;
&lt;h1&gt;Enabling Asynchronous Controllers&lt;/h1&gt;
There are three simple options for enabling asynchronous controllers. The first option is to inherit from AsyncController instead of Controller:&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; CustomerController : AsyncController
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The second option is to assign the AsyncActionInvoker when the controller is constructed (this is actually what both AsyncControllerFactory and AsyncController do):&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; CustomerController : Controller
{
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; CustomerController() 
    { 
        ActionInvoker = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; AsyncActionInvoker();
    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The preferred approach is to rely on controller factories to set the action invoker. Instead of using CoontrollerFactory, you can use AsyncControllerFactory:&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; controllerFactory = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; AsyncControllerFactory();
controllerFactory.Register(&lt;span style="color:#A31515;"&gt;&amp;quot;Home&amp;quot;&lt;/span&gt;, () =&amp;gt; &lt;span style="color:Blue;"&gt;new&lt;/span&gt; HomeController());
controllerFactory.Register(&lt;span style="color:#A31515;"&gt;&amp;quot;Customer&amp;quot;&lt;/span&gt;, () =&amp;gt; &lt;span style="color:Blue;"&gt;new&lt;/span&gt; CustomerController());
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;If you are using a custom controller factory, you just need to replace the ActionInvoker - for example:&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; ControllerFactoryResult CreateController(NavigationRequest request, &lt;span style="color:Blue;"&gt;string&lt;/span&gt; controllerName)
{
    &lt;span style="color:Blue;"&gt;var&lt;/span&gt; controller = &lt;span style="color:Green;"&gt;// Create controller&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (controller &lt;span style="color:Blue;"&gt;is&lt;/span&gt; ControllerBase)
    {
        ((ControllerBase) controller).ActionInvoker = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; AsyncActionInvoker();
    }
    &lt;span style="color:Blue;"&gt;return&lt;/span&gt; &lt;span style="color:Blue;"&gt;new&lt;/span&gt; ControllerFactoryResult(controller);
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Reporting Progress&lt;/h1&gt;
Now that navigation is occurring on a background thread, it&amp;#39;s nice to show a progress indicator while navigation is happening. For this, Magellan now provides an INavigationProgressListener interface that you can implement.&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; INavigationProgressListener
{
    &lt;span style="color:Blue;"&gt;void&lt;/span&gt; UpdateProgress(NavigationRequest request, NavigationStage navigationStage);
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;For example, the code behind for the Window is going to show a progress bar:&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;partial&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; MainWindow : Window, INavigationProgressListener
{
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; MainWindow()
    {
        InitializeComponent();
        NavigationProgress.Listeners.Add(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        Loaded += (x, y) =&amp;gt; Navigator.For(Frame).NavigateWithTransition(&lt;span style="color:#A31515;"&gt;&amp;quot;Home&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;Home&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;ZoomIn&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; UpdateProgress(NavigationRequest request, NavigationStage navigationStage)
    {
        Dispatcher.Invoke(
            &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Action(&lt;span style="color:Blue;"&gt;delegate&lt;/span&gt;
            {
                &lt;span style="color:Blue;"&gt;switch&lt;/span&gt; (navigationStage)
                {
                    &lt;span style="color:Blue;"&gt;case&lt;/span&gt; NavigationStage.BeginRequest:
                        ProgressBar.Visibility = Visibility.Visible;
                        &lt;span style="color:Blue;"&gt;break&lt;/span&gt;;
                    &lt;span style="color:Blue;"&gt;case&lt;/span&gt; NavigationStage.Complete:
                        ProgressBar.Visibility = Visibility.Collapsed;
                        &lt;span style="color:Blue;"&gt;break&lt;/span&gt;;
                }
            }));
    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The iPhone sample application uses a spinning circle to indicate navigation progress:&lt;br /&gt;&lt;br /&gt;The NavigationStage enum provides an indication as to where the request is up to. The table below explains each state:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
Step  Stage                 Description
1     BeginRequest          This occurs at the start of the navigation request before the controller has been resolved.
2     ResolvingController   This indicates that the controller is about to be resolved by name from the current controller factory.
3     ResolvingAction       This indicates that the controller has been resolved, and the action is now about to be resolved.
4     PreActionFilters      This indicates that the action has been resolved, and pre-action filters are about to be invoked.
5     ExecutingAction       This indicates that pre-action filters have been invoked, and the action is about to to executed. This event does not always occur (pre-action filters can cancel the navigation request, for example).
6     PostActionFilters     This indicates that the action has been invoked, and post-action filters are about to to executed. This event does not always occur (pre-action filters can cancel the navigation request, for example).
7     PreResultFilters      This indicates that the action has been executed and all action filters have been invoked. The result is now about to be evaluated. This event does not always occur (action filters can cancel the navigation request, for example).
8     ExecutingResult       This indicates that the pre-result filters have been executed, and the result is about to be executed (this is typically when views are rendered). This event does not always occur (action filters or pre-action filters can cancel the navigation request, for example).
9     PostResultFilters     This indicates that the result has been executed (and views have been rendered) and the post-result filters are about to be executed.
10    Complete              This indicates that the navigation request has been completed (whether successfully or failed), any views have been rendered and any resources from the navigation request have been cleared up.
&lt;/pre&gt;&lt;br /&gt;
&lt;h1&gt;Summary&lt;/h1&gt;
The benefit of this approach is that controller code is the same whether we are using single threads or background threads, which also allows unit tests to remain singly threaded while at runtime the application is multi-threaded. Enabling this feature is quite easy, and so long as your controllers don&amp;#39;t depend on the UI thread it should Just Work.&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>stovellp</author><pubDate>Sun, 22 Aug 2010 14:42:10 GMT</pubDate><guid isPermaLink="false">Updated Wiki: magellan-async-controllers 20100822024210P</guid></item><item><title>Updated Wiki: magellan-async-controllers</title><link>http://magellan.codeplex.com/wikipage?title=magellan-async-controllers&amp;version=1</link><description>&lt;div class="wikidoc"&gt;Magellan 1.1 brings support for asynchronous controllers. First we&amp;#39;ll look at what it enables, then I will show some ways to configure it.&lt;br /&gt;&lt;br /&gt;The controller action below makes a WCF call to load a list of customers, which are used as the model for the view. This service call could take some time to evaluate:&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; CustomerController : Controller
{
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; ActionResult List()
    {
        Model = CustomerService.GetCustomers();
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; Page(&lt;span style="color:#A31515;"&gt;&amp;quot;CustomerList&amp;quot;&lt;/span&gt;);
    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;With asynchronous controllers enabled, Magellan will invoke the List action on a background thread. Since page navigation has to take place on the UI thread, the page rendering will be automatically dispatched to the UI thread, but this happens after the controller action has been executed. The result is that the UI remains snappy and responsive.&lt;br /&gt;
&lt;h1&gt;Enabling Asynchronous Controllers&lt;/h1&gt;
There are three simple options for enabling asynchronous controllers. The first option is to inherit from AsyncController instead of Controller:&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; CustomerController : AsyncController
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The second option is to assign the AsyncActionInvoker when the controller is constructed (this is actually what both AsyncControllerFactory and AsyncController do):&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; CustomerController : Controller
{
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; CustomerController() 
    { 
        ActionInvoker = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; AsyncActionInvoker();
    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The preferred approach is to rely on controller factories to set the action invoker. Instead of using CoontrollerFactory, you can use AsyncControllerFactory:&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; controllerFactory = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; AsyncControllerFactory();
controllerFactory.Register(&lt;span style="color:#A31515;"&gt;&amp;quot;Home&amp;quot;&lt;/span&gt;, () =&amp;gt; &lt;span style="color:Blue;"&gt;new&lt;/span&gt; HomeController());
controllerFactory.Register(&lt;span style="color:#A31515;"&gt;&amp;quot;Customer&amp;quot;&lt;/span&gt;, () =&amp;gt; &lt;span style="color:Blue;"&gt;new&lt;/span&gt; CustomerController());
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;If you are using a custom controller factory, you just need to replace the ActionInvoker - for example:&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; ControllerFactoryResult CreateController(NavigationRequest request, &lt;span style="color:Blue;"&gt;string&lt;/span&gt; controllerName)
{
    &lt;span style="color:Blue;"&gt;var&lt;/span&gt; controller = &lt;span style="color:Green;"&gt;// Create controller&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (controller &lt;span style="color:Blue;"&gt;is&lt;/span&gt; ControllerBase)
    {
        ((ControllerBase) controller).ActionInvoker = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; AsyncActionInvoker();
    }
    &lt;span style="color:Blue;"&gt;return&lt;/span&gt; &lt;span style="color:Blue;"&gt;new&lt;/span&gt; ControllerFactoryResult(controller);
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Reporting Progress&lt;/h1&gt;
Now that navigation is occurring on a background thread, it&amp;#39;s nice to show a progress indicator while navigation is happening. For this, Magellan now provides an INavigationProgressListener interface that you can implement.&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; INavigationProgressListener
{
    &lt;span style="color:Blue;"&gt;void&lt;/span&gt; UpdateProgress(NavigationRequest request, NavigationStage navigationStage);
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;For example, the code behind for the Window is going to show a progress bar:&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;partial&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; MainWindow : Window, INavigationProgressListener
{
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; MainWindow()
    {
        InitializeComponent();
        NavigationProgress.Listeners.Add(&lt;span style="color:Blue;"&gt;this&lt;/span&gt;);
        Loaded += (x, y) =&amp;gt; Navigator.For(Frame).NavigateWithTransition(&lt;span style="color:#A31515;"&gt;&amp;quot;Home&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;Home&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;ZoomIn&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; UpdateProgress(NavigationRequest request, NavigationStage navigationStage)
    {
        Dispatcher.Invoke(
            &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Action(&lt;span style="color:Blue;"&gt;delegate&lt;/span&gt;
            {
                &lt;span style="color:Blue;"&gt;switch&lt;/span&gt; (navigationStage)
                {
                    &lt;span style="color:Blue;"&gt;case&lt;/span&gt; NavigationStage.BeginRequest:
                        ProgressBar.Visibility = Visibility.Visible;
                        &lt;span style="color:Blue;"&gt;break&lt;/span&gt;;
                    &lt;span style="color:Blue;"&gt;case&lt;/span&gt; NavigationStage.Complete:
                        ProgressBar.Visibility = Visibility.Collapsed;
                        &lt;span style="color:Blue;"&gt;break&lt;/span&gt;;
                }
            }));
    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The iPhone sample application uses a spinning circle to indicate navigation progress:&lt;br /&gt;&lt;br /&gt;The NavigationStage enum provides an indication as to where the request is up to. The table below explains each state:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
Step  Stage                 Description
1	  BeginRequest          This occurs at the start of the navigation request before the controller has been resolved.
2	  ResolvingController   This indicates that the controller &lt;span style="color:Blue;"&gt;is&lt;/span&gt; about to be resolved &lt;span style="color:Blue;"&gt;by&lt;/span&gt; name &lt;span style="color:Blue;"&gt;from&lt;/span&gt; the current controller factory.
3	  ResolvingAction       This indicates that the controller has been resolved, and the action &lt;span style="color:Blue;"&gt;is&lt;/span&gt; now about to be resolved.
4	  PreActionFilters      This indicates that the action has been resolved, and pre-action filters are about to be invoked.
5	  ExecutingAction       This indicates that pre-action filters have been invoked, and the action &lt;span style="color:Blue;"&gt;is&lt;/span&gt; about to to executed. This &lt;span style="color:Blue;"&gt;event&lt;/span&gt; does not always occur (pre-action filters can cancel the navigation request, &lt;span style="color:Blue;"&gt;for&lt;/span&gt; example).
6	  PostActionFilters     This indicates that the action has been invoked, and post-action filters are about to to executed. This &lt;span style="color:Blue;"&gt;event&lt;/span&gt; does not always occur (pre-action filters can cancel the navigation request, &lt;span style="color:Blue;"&gt;for&lt;/span&gt; example).
7	  PreResultFilters      This indicates that the action has been executed and all action filters have been invoked. The result &lt;span style="color:Blue;"&gt;is&lt;/span&gt; now about to be evaluated. This &lt;span style="color:Blue;"&gt;event&lt;/span&gt; does not always occur (action filters can cancel the navigation request, &lt;span style="color:Blue;"&gt;for&lt;/span&gt; example).
8	  ExecutingResult       This indicates that the pre-result filters have been executed, and the result &lt;span style="color:Blue;"&gt;is&lt;/span&gt; about to be executed (&lt;span style="color:Blue;"&gt;this&lt;/span&gt; &lt;span style="color:Blue;"&gt;is&lt;/span&gt; typically when views are rendered). This &lt;span style="color:Blue;"&gt;event&lt;/span&gt; does not always occur (action filters or pre-action filters can cancel the navigation request, &lt;span style="color:Blue;"&gt;for&lt;/span&gt; example).
9	  PostResultFilters     This indicates that the result has been executed (and views have been rendered) and the post-result filters are about to be executed.
10	  Complete              This indicates that the navigation request has been completed (whether successfully or failed), any views have been rendered and any resources &lt;span style="color:Blue;"&gt;from&lt;/span&gt; the navigation request have been cleared up.
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Summary&lt;/h1&gt;
The benefit of this approach is that controller code is the same whether we are using single threads or background threads, which also allows unit tests to remain singly threaded while at runtime the application is multi-threaded. Enabling this feature is quite easy, and so long as your controllers don&amp;#39;t depend on the UI thread it should Just Work.&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>stovellp</author><pubDate>Sun, 22 Aug 2010 14:41:02 GMT</pubDate><guid isPermaLink="false">Updated Wiki: magellan-async-controllers 20100822024102P</guid></item><item><title>Updated Wiki: magellan-windows-forms</title><link>http://magellan.codeplex.com/wikipage?title=magellan-windows-forms&amp;version=1</link><description>&lt;div class="wikidoc"&gt;Magellan does not natively support Windows Forms, but adding support is as easy as writing your own View Engine.&lt;br /&gt;&lt;br /&gt;As described in the documentation on View Engines, there are two classes we need to write. The first is an object that implements IViewEngine, which is responsible for finding the view. The second is an object inheriting from ViewEngineResult, which contains logic for rendering the form (i.e., calling Form.Show()).&lt;br /&gt;&lt;br /&gt;There are also a couple of design considerations:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Magellan controllers like to create View Models, and it&amp;#39;s the ViewEngineResult&amp;#39;s job to make them available for binding on the view.&lt;/li&gt;
&lt;li&gt;Windows Forms applications typically use naming conventions like frmCustomerDetails, CustomerDetailsForm or CustomerDetailsWindow. Our engine should support these.&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Binding Models to Forms&lt;/h1&gt;To support the model, we&amp;#39;re going to create an interface that allows the model to be given to the form. The form can then figure out how to display the model (either using a Windows Forms BindingContext, or manual code).&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; IBindableForm
{
    &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Bind(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; model);
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Our form implementation could look 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;partial&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; MainForm : Form, IBindableForm
{
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; MainForm()
    {
        InitializeComponent();
    }

    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Bind(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; model)
    {
        Text = model.ToString();
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;The Controller&lt;/h1&gt;
Here is what our Controller might look like:&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; HomeController : Controller
{
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; ActionResult Launch()
    {
        Model = &lt;span style="color:#A31515;"&gt;&amp;quot;Hello world!&amp;quot;&lt;/span&gt;;
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; Window(&lt;span style="color:#A31515;"&gt;&amp;quot;Main&amp;quot;&lt;/span&gt;);
    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Notice that there is no reference to Windows Forms here. The Window() return value merely indicates that we want to show a Window - it doesn&amp;#39;t indicate what kind of Window should be shown. This should make it easier to convert to WPF in the future.&lt;br /&gt;
&lt;h1&gt;The View Engine&lt;/h1&gt;
The view engine is also pretty short. Since we want to reuse the naming conventions and reflection code that the other view engines use, we can derive from ReflectionBasedViewEngine:&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; FormsViewEngine : ReflectionBasedViewEngine
{
    &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IViewActivator _viewActivator;

    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; FormsViewEngine(IViewActivator viewActivator)
    {
        _viewActivator = viewActivator;
    }

    &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;string&lt;/span&gt;&amp;gt; GetAlternativeNames(&lt;span style="color:Blue;"&gt;string&lt;/span&gt; viewName)
    {
        yield &lt;span style="color:Blue;"&gt;return&lt;/span&gt; viewName;
        yield &lt;span style="color:Blue;"&gt;return&lt;/span&gt; viewName + &lt;span style="color:#A31515;"&gt;&amp;quot;Form&amp;quot;&lt;/span&gt;;
        yield &lt;span style="color:Blue;"&gt;return&lt;/span&gt; viewName + &lt;span style="color:#A31515;"&gt;&amp;quot;Window&amp;quot;&lt;/span&gt;;
        yield &lt;span style="color:Blue;"&gt;return&lt;/span&gt; viewName + &lt;span style="color:#A31515;"&gt;&amp;quot;Dialog&amp;quot;&lt;/span&gt;;
        yield &lt;span style="color:Blue;"&gt;return&lt;/span&gt; &lt;span style="color:#A31515;"&gt;&amp;quot;frm&amp;quot;&lt;/span&gt; + viewName;
    }

    &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;bool&lt;/span&gt; ShouldHandle(ControllerContext controllerContext, ParameterValueDictionary viewParameters, &lt;span style="color:Blue;"&gt;string&lt;/span&gt; viewName)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewType = viewParameters.GetOrDefault&amp;lt;&lt;span style="color:Blue;"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color:#A31515;"&gt;&amp;quot;ViewType&amp;quot;&lt;/span&gt;);
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; viewType == &lt;span style="color:#A31515;"&gt;&amp;quot;Window&amp;quot;&lt;/span&gt; || viewType == &lt;span style="color:#A31515;"&gt;&amp;quot;Dialog&amp;quot;&lt;/span&gt;;
    }

    &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; IEnumerable&amp;lt;Type&amp;gt; FilterCandidateTypes(ControllerContext controllerContext, ParameterValueDictionary viewParameters, &lt;span style="color:Blue;"&gt;string&lt;/span&gt; viewName, IEnumerable&amp;lt;Type&amp;gt; candidates)
    {
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; candidates.Where(x =&amp;gt; &lt;span style="color:Blue;"&gt;typeof&lt;/span&gt; (Form).IsAssignableFrom(x));
    }

    &lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;override&lt;/span&gt; ViewEngineResult CreateViewResult(ControllerContext controllerContext, ParameterValueDictionary viewParameters, Type type)
    {
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; &lt;span style="color:Blue;"&gt;new&lt;/span&gt; WindowsFormViewEngineResult(type, _viewActivator, viewParameters);
    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Notice how we override GetAlternativeNames to support our conventions. We also override FilterCandidateTypes to restrict the view to objects derived from the Windows Forms Form class.&lt;br /&gt;
&lt;h1&gt;The View Engine Result&lt;/h1&gt;
The View Engine above has taken charge of finding the view. When a view is found, it creates a WindowsFormViewEngineResult. The view engine result has the job of instantiating and rendering the view:&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; WindowsFormViewEngineResult : ViewEngineResult
{
    &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; Type _formType;
    &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; IViewActivator _viewActivator;
    &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; ParameterValueDictionary _viewParameters;

    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; WindowsFormViewEngineResult(Type formType, IViewActivator viewActivator, ParameterValueDictionary viewParameters) : &lt;span style="color:Blue;"&gt;base&lt;/span&gt;(&lt;span style="color:Blue;"&gt;true&lt;/span&gt;, &lt;span style="color:Blue;"&gt;new&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] {})
    {
        _formType = formType;
        _viewActivator = viewActivator;
        _viewParameters = viewParameters;
    }

    &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; Render()
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; form = (Form)_viewActivator.Instantiate(_formType);
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; bindableForm = form &lt;span style="color:Blue;"&gt;as&lt;/span&gt; IBindableForm;
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (bindableForm != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        {
            &lt;span style="color:Blue;"&gt;var&lt;/span&gt; model = _viewParameters.GetOrDefault&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;(&lt;span style="color:#A31515;"&gt;&amp;quot;Model&amp;quot;&lt;/span&gt;);
            bindableForm.Bind(model);
        }

        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; isDialog = _viewParameters.GetOrDefault&amp;lt;&lt;span style="color:Blue;"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color:#A31515;"&gt;&amp;quot;ViewType&amp;quot;&lt;/span&gt;) == &lt;span style="color:#A31515;"&gt;&amp;quot;Dialog&amp;quot;&lt;/span&gt;;
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (isDialog) form.ShowDialog();
        &lt;span style="color:Blue;"&gt;else&lt;/span&gt; form.Show();
    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;We make use of two critical view parameters - the ViewType, which indicates whether to show it as a Window or a Dialog, and the Model, which is populated from the Model property that was set on the controller.&lt;br /&gt;
&lt;h1&gt;Wiring It Up&lt;/h1&gt;
To support our view engine, we just have to add it to the list of registered view engines:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
ViewEngines.Engines.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; FormsViewEngine(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; DefaultViewActivator()));
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The DefaultViewActivator implements the IViewActivator interface, which is used for actually constructing the form (it&amp;#39;s passed to the view engine result). If you want, you can use an IOC container instead.&lt;br /&gt;
&lt;h1&gt;Summary&lt;/h1&gt;Hopefully this illustrates how easy it is to write a View Engine. The biggest benefit to the Magellan approach is that our controllers are consistent whether we are using WPF or Windows Forms. There&amp;#39;s also the added benefit that if we upgrade a view to WPF, our controllers don&amp;#39;t change. Likewise if we change our naming conventions for the forms, we don&amp;#39;t need to change the controllers. Finally, our controllers and models remain testable, which is always important.&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>stovellp</author><pubDate>Sun, 22 Aug 2010 14:38:01 GMT</pubDate><guid isPermaLink="false">Updated Wiki: magellan-windows-forms 20100822023801P</guid></item><item><title>Updated Wiki: magellan-mvvm-light-toolkit</title><link>http://magellan.codeplex.com/wikipage?title=magellan-mvvm-light-toolkit&amp;version=2</link><description>&lt;div class="wikidoc"&gt;The MVVM Light Toolkit is an MVVM framework by WPF MVP Laurent Bugnion, the author of Silverlight 2 Unleashed. It works well alongside Magellan and makes it easy to put behaviors behind views. The integration model with Magellan is quite similar to using the Microsoft MVVM toolkit.&lt;br /&gt;&lt;br /&gt;One difference is that the MVVM Light Toolkit typically uses resources to refer to the ViewModel, limiting the amount of code behind that is required. Since Magellan controllers typically create the model, this does need to change.&lt;br /&gt;&lt;br /&gt;As with using the Microsoft MVVM toolkit, we use the controller to create the ViewModel:&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; HomeController : Controller
{
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; ActionResult Main()
    {
        Model = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; MainViewModel();
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; Page();
    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;MVVM Light views typically use a locator for creating the view model - this is a problem because our controller above will be creating the VM, and Magellan is taking care of assigning it.&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;Window&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;MvvmLight1.MvvmView1&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:mc&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.openxmlformats.org/markup-compatibility/2006&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; 
    &lt;span style="color:Red;"&gt;xmlns:d&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/expression/blend/2008&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
    &lt;span style="color:Red;"&gt;mc:Ignorable&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;d&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
    &lt;span style="color:Red;"&gt;DataContext&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;{Binding Main, Source={StaticResource Locator}}&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;/pre&gt;&lt;/div&gt;&lt;br /&gt;To keep Blend support, change the XAML to use d:DataContext instead of DataContext.&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;Window&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;MvvmLight1.MvvmView1&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:ViewModel&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:MvvmLight1.ViewModel&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; 
    &lt;span style="color:Red;"&gt;xmlns:mc&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.openxmlformats.org/markup-compatibility/2006&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; 
    &lt;span style="color:Red;"&gt;xmlns:d&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/expression/blend/2008&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
    &lt;span style="color:Red;"&gt;mc:Ignorable&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;d&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
    &lt;span style="color:Red;"&gt;d:DataContext&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;{x:Type ViewModel:MainViewModel}&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;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>stovellp</author><pubDate>Sun, 22 Aug 2010 14:35:59 GMT</pubDate><guid isPermaLink="false">Updated Wiki: magellan-mvvm-light-toolkit 20100822023559P</guid></item><item><title>Updated Wiki: magellan-mvvm-light-toolkit</title><link>http://magellan.codeplex.com/wikipage?title=magellan-mvvm-light-toolkit&amp;version=1</link><description>&lt;div class="wikidoc"&gt;The MVVM Light Toolkit is an MVVM framework by WPF MVP Laurent Bugnion, the author of Silverlight 2 Unleashed. It works well alongside Magellan and makes it easy to put behaviors behind views. The integration model with Magellan is quite similar to using the Microsoft MVVM toolkit.&lt;br /&gt;&lt;br /&gt;One difference is that the MVVM Light Toolkit typically uses resources to refer to the ViewModel, limiting the amount of code behind that is required. Since Magellan controllers typically create the model, this does need to change.&lt;br /&gt;&lt;br /&gt;As with using the Microsoft MVVM toolkit, we use the controller to create the ViewModel:&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; HomeController : Controller
{
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; ActionResult Main()
    {
        Model = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; MainViewModel();
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; Page();
    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;MVVM Light views typically use a locator for creating the view model - this is a problem because our controller above will be creating the VM, and Magellan is taking care of assigning it.&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;Window&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;MvvmLight1.MvvmView1&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:mc&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.openxmlformats.org/markup-compatibility/2006&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; 
    &lt;span style="color:Red;"&gt;xmlns:d&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/expression/blend/2008&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
    &lt;span style="color:Red;"&gt;mc:Ignorable&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;d&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
    &lt;span style="color:Red;"&gt;DataContext&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;{Binding Main, Source={StaticResource Locator}}&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;/pre&gt;&lt;/div&gt;&lt;br /&gt;To keep Blend support, change the XAML to use d:DataContext instead of DataContext.&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;Window&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;MvvmLight1.MvvmView1&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:ViewModel&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:MvvmLight1.ViewModel&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; 
    &lt;span style="color:Red;"&gt;xmlns:mc&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.openxmlformats.org/markup-compatibility/2006&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; 
    &lt;span style="color:Red;"&gt;xmlns:d&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/expression/blend/2008&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
    &lt;span style="color:Red;"&gt;mc:Ignorable&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;d&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
    &lt;span style="color:Red;"&gt;d:DataContext&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;{x:Type ViewModel:MainViewModel}&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;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>stovellp</author><pubDate>Sun, 22 Aug 2010 14:35:54 GMT</pubDate><guid isPermaLink="false">Updated Wiki: magellan-mvvm-light-toolkit 20100822023554P</guid></item><item><title>Updated Wiki: magellan-mvvm-toolkit</title><link>http://magellan.codeplex.com/wikipage?title=magellan-mvvm-toolkit&amp;version=1</link><description>&lt;div class="wikidoc"&gt;Magellan&amp;#39;s MVC framework is designed to handle navigation between views. However, the views themselves, and how they are implemented, is outside of Magellan&amp;#39;s concern. Views can be simple XAML pages, or they can be driven by an MVVM or MVP pattern, or any other way you might like.&lt;br /&gt;&lt;br /&gt;Microsoft provide a Visual Studio project template known as the MVVM Toolkit, which makes it easy to get started using the MVVM pattern.&lt;br /&gt;&lt;br /&gt;To use Magellan with the MVVM toolkit, you can set up a new MVVM project using the MVVM project template. Then configure it the same way as described in the Magellan quickstart.&lt;br /&gt;&lt;br /&gt;By default with the MVVM toolkit, you typically create the ViewModel and View and assign them yourself, as shown in the project template:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
Views.MainView view = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Views.MainView();
view.DataContext = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; ViewModels.MainViewModel();
view.Show();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Instead, with Magellan, you can assign the controller&amp;#39;s Model property to you ViewModel:&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; HomeController : Controller
{
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; ActionResult Main()
    {
        Model = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; MainViewModel();
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; Page();
    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The view engines will create the page or Window, and set the DataContext to the Model for you. It will then navigate to the page or show the Window.&lt;br /&gt;&lt;br /&gt;Your ViewModels can make use of commands, event managers, data binding, and all the other common MVVM patterns. MVVM would typically handle:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Local interaction with the view&lt;/li&gt;
&lt;li&gt;Validation&lt;/li&gt;
&lt;li&gt;Control state, such as whether a button should be enabled based on data&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;While Magellan would be used for:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Navigating to another page or window&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;A good way to think about this is to think in terms of the web. On the web, JavaScript is typically the &amp;quot;view model&amp;quot; - it handles the logic for a particular page. The server processes requests for many pages and navigation between pages - that&amp;#39;s the job of Magellan.&lt;br /&gt;&lt;br /&gt;There is also a NavigateCommand that can be used in ViewModels, instead of the need to use a DelegateCommand/RelayCommand for common navigation events.&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>stovellp</author><pubDate>Sun, 22 Aug 2010 14:34:52 GMT</pubDate><guid isPermaLink="false">Updated Wiki: magellan-mvvm-toolkit 20100822023452P</guid></item><item><title>Updated Wiki: magellan-composite-wpf</title><link>http://magellan.codeplex.com/wikipage?title=magellan-composite-wpf&amp;version=2</link><description>&lt;div class="wikidoc"&gt;Magellan was designed to work with Composite WPF from day one. Composite WPF provides support for multiple modules, loosely coupled pub/sub eventing, and regions for sub-dividing zones in the UI. However, Composite WPF does not enforce any particular UI pattern - MVVM, MVP and MVC could all work.&lt;br /&gt;&lt;br /&gt;Magellan and Composite WPF can work well together to create a composite navigation-oriented application using the MVC pattern. Here are some examples:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Composite WPF modules could contain views and controllers&lt;/li&gt;
&lt;li&gt;Composite WPF events could be used for navigation - i.e., a Navigate event that could be raised by different modules and services&lt;/li&gt;
&lt;li&gt;Instead of pages, Magellan view results could return UserControls that are added to regions&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Region Support&lt;/h1&gt;For region support, Magellan.Composite.dll contains some extensions that can be used. A controller may look 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; ShellController : CompositeController 
{
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; ActionResult Explorer()
    {
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; CompositeView(&lt;span style="color:#A31515;"&gt;&amp;quot;Explorer&amp;quot;&lt;/span&gt;).InRegion(&lt;span style="color:#A31515;"&gt;&amp;quot;LeftRegion&amp;quot;&lt;/span&gt;);
    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;On application startup, the view can be navigated to via:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
Navigator.Primary.Navigate(&lt;span style="color:#A31515;"&gt;&amp;quot;Shell&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;Explorer&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Lastly, an additional Region View Engine needs to be registered. As discussed in the IOC topic, you can also use a custom view activator to control how views are instantiated, if you want to use IOC. In this case we&amp;#39;ll use the Microsoft common ServiceLocator:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; PageViewEngine(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ServiceLocatorViewActivator()));
ViewEngines.Engines.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; WindowViewEngine(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ServiceLocatorViewActivator()));
ViewEngines.Engines.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; CompositeViewEngine(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ServiceLocatorViewActivator()));
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;When the InRegion extension method is used, and the view class derives from UIElement, the region view engine will use the service locator to resolve the default RegionManager, and then add the view to the region.&lt;br /&gt;
&lt;h1&gt;Controller Factory&lt;/h1&gt;
There is also a new controller factory that can be used with the Common Service Locator. It will automatically back onto ServiceLocator.Current to resolve controllers, so you just have to register them in the container:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
ControllerBuilder.Current.SetControllerFactory(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ServiceLocatorControllerFactory());
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>stovellp</author><pubDate>Sun, 22 Aug 2010 14:33:43 GMT</pubDate><guid isPermaLink="false">Updated Wiki: magellan-composite-wpf 20100822023343P</guid></item><item><title>Updated Wiki: magellan-composite-wpf</title><link>http://magellan.codeplex.com/wikipage?title=magellan-composite-wpf&amp;version=1</link><description>&lt;div class="wikidoc"&gt;Magellan was designed to work with Composite WPF from day one. Composite WPF provides support for multiple modules, loosely coupled pub/sub eventing, and regions for sub-dividing zones in the UI. However, Composite WPF does not enforce any particular UI pattern - MVVM, MVP and MVC could all work.&lt;br /&gt;&lt;br /&gt;Magellan and Composite WPF can work well together to create a composite navigation-oriented application using the MVC pattern. Here are some examples:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Composite WPF modules could contain views and controllers&lt;/li&gt;
&lt;li&gt;Composite WPF events could be used for navigation - i.e., a Navigate event that could be raised by different modules and services&lt;/li&gt;
&lt;li&gt;Instead of pages, Magellan view results could return UserControls that are added to regions&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Region Support&lt;/h1&gt;For region support, Magellan.Composite.dll contains some extensions that can be used. A controller may look 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; ShellController : CompositeController 
{
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; ActionResult Explorer()
    {
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; CompositeView(&lt;span style="color:#A31515;"&gt;&amp;quot;Explorer&amp;quot;&lt;/span&gt;).InRegion(&lt;span style="color:#A31515;"&gt;&amp;quot;LeftRegion&amp;quot;&lt;/span&gt;);
    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;On application startup, the view can be navigated to via:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
Navigator.Primary.Navigate(&lt;span style="color:#A31515;"&gt;&amp;quot;Shell&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;Explorer&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Lastly, an additional Region View Engine needs to be registered. As discussed in the IOC topic, you can also use a custom view activator to control how views are instantiated, if you want to use IOC. In this case we&amp;#39;ll use the Microsoft common ServiceLocator:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; PageViewEngine(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ServiceLocatorViewActivator()));
ViewEngines.Engines.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; WindowViewEngine(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ServiceLocatorViewActivator()));
ViewEngines.Engines.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; CompositeViewEngine(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ServiceLocatorViewActivator()));
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;When the InRegion extension method is used, and the view class derives from UIElement, the region view engine will use the service locator to resolve the default RegionManager, and then add the view to the region.&lt;br /&gt;
&lt;h1&gt;Controller Factory&lt;/h1&gt;
There is also a new controller factory that can be used with the Common Service Locator. It will automatically back onto ServiceLocator.Current to resolve controllers, so you just have to register them in the container:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
ControllerBuilder.Current.SetControllerFactory(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ServiceLocatorControllerFactory());
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>stovellp</author><pubDate>Sun, 22 Aug 2010 14:33:37 GMT</pubDate><guid isPermaLink="false">Updated Wiki: magellan-composite-wpf 20100822023337P</guid></item></channel></rss>
