<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.southworks.net/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Damian Schenkelman's Blog</title>
	
	<link>http://blogs.southworks.net/dschenkelman</link>
	<description />
	<pubDate>Wed, 27 Jan 2010 14:46:52 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.southworks.net/dschenkelman" /><feedburner:info uri="dschenkelman" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Creating a multi-shell application in Prism-v2</title>
		<link>http://feeds.southworks.net/~r/dschenkelman/~3/uD9SLkf31K8/</link>
		<comments>http://blogs.southworks.net/dschenkelman/2010/01/26/creating-a-multi-shell-application-in-prism-v2/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 14:55:00 +0000</pubDate>
		<dc:creator>Damian Schenkelman</dc:creator>
		
		<category><![CDATA[Composite Application Guidance for WPF &amp; SL]]></category>

		<category><![CDATA[Patterns &amp; Practices]]></category>

		<category><![CDATA[Prism-v2]]></category>

		<category><![CDATA[Prism-v2.1]]></category>

		<category><![CDATA[WPF]]></category>

		<category><![CDATA[Windows Presentation Foundation]]></category>

		<category><![CDATA[p&amp;p]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/dschenkelman/?p=158</guid>
		<description><![CDATA[This thread from the Prism forum presents the following question (this is not an actual quote but a summary): Are there any examples with multiple Shell windows, as the Prism documentation mentions?
First I re-read this article from the Prism documentation so I could get in the same page as the user. I&#8217;m not going to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://compositewpf.codeplex.com/Thread/View.aspx?ThreadId=25938">This thread</a> from the <a href="http://compositewpf.codeplex.com/Thread/List.aspx">Prism forum</a> presents the following question (this is not an actual quote but a summary): <em>Are there any examples with multiple Shell windows, as the Prism documentation mentions?</em></p>
<p>First I re-read <a href="http://msdn.microsoft.com/en-us/library/dd490829.aspx">this article</a> from the Prism documentation so I could get in the same page as the user. I&#8217;m not going to quote it here, but the <strong>&#8220;Implementing a Shell&#8221;</strong> section is the one where it is explained. Once I read that, the popular Popup Region from the <a href="http://msdn.microsoft.com/en-us/library/dd458919.aspx">Prism-v2 RI</a> was out of the table so with <a href="http://blogs.southworks.net/ejadib/">Ezequiel Jadib</a> we decided to create a small spike to see what changes needed to be done.</p>
<h3>Creating Multiple Shells</h3>
<p>As in a regular Prism application, using the <strong>CreateShell</strong> method to create the new Shell seemed like a good approach. However, as the <strong>RegionManager</strong> is set to the <strong>DependencyObject</strong> returned by this method, this had to be done manually for any other Shell window.</p>
<pre><span style="color: blue">protected override </span>DependencyObject CreateShell()
      {
          <span style="color: #2b91af">Shell1 </span>shell = <span style="color: blue">new </span><span style="color: #2b91af">Shell1</span>();
          <span style="color: #2b91af">Shell2 </span>shell2 = <span style="color: blue">new </span><span style="color: #2b91af">Shell2</span>();
          shell.Show();
          shell2.Show();
          shell.Activate();

          <span style="color: #2b91af">RegionManager</span>.SetRegionManager(shell2, <span style="color: blue">this</span>.Container.Resolve&lt;<span style="color: #2b91af">IRegionManager</span>&gt;());
          <span style="color: #2b91af">RegionManager</span>.UpdateRegions();

          <span style="color: blue">return </span>shell;
      }</pre>
<h3>When to close the application?</h3>
<p>Another thing to determine is when to close the application. This is not something <em>&#8220;Prism specific&#8221;</em> as <a href="http://msdn.microsoft.com/en-us/library/system.windows.application.shutdownmode.aspx">WPF provides this option for any application</a>. Since there are multiple Shell Windows, choosing the <a href="http://msdn.microsoft.com/en-us/library/system.windows.shutdownmode.aspx">ShutdownMode</a>=&#8221;OnLastWindowClose&#8221; seemed like the best approach.</p>
<pre><span style="color: blue">&lt;</span><span style="color: #a31515">Application </span><span style="color: red">x:Class</span><span style="color: blue">=</span>&#8220;<span style="color: blue">HelloWorld.App</span>&#8221;
    <span style="color: red">xmlns</span><span style="color: blue">=</span>&#8220;<span style="color: blue">http://schemas.microsoft.com/winfx/2006/xaml/presentation</span>&#8221;
    <span style="color: red">xmlns:x</span><span style="color: blue">=</span>&#8220;<span style="color: blue">http://schemas.microsoft.com/winfx/2006/xaml</span>&#8221; <span style="color: red">ShutdownMode</span><span style="color: blue">=</span>&#8220;<span style="color: blue">OnLastWindowClose</span>&#8220;<span style="color: blue">&gt;
</span></pre>
<h3>Sample Application</h3>
<p>I created a small sample application which publishes an event in one of the Shell views and subscribes to it in the other. You can download it from <a href="http://cid-09f63fc7ac065e5e.skydrive.live.com/self.aspx/p%5E0p%20Samples/TwoShells.zip">here</a>. The code is provided &#8220;AS IS&#8221; with no warranties and confers no rights.</p>
<p><a href="http://blogs.southworks.net/dschenkelman/files/2010/01/image.png"><img src="http://blogs.southworks.net/dschenkelman/files/2010/01/image-thumb.png" border="0" alt="image" width="494" height="249" /></a></p>
<p><a rev="vote-for" href="http://dotnetshoutout.com/Creating-a-multi-shell-application-in-Prism-v2"><img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.southworks.net%2Fdschenkelman%2F2010%2F01%2F26%2Fcreating-a-multi-shell-application-in-prism-v2%2F"></a></p>
<img src="http://feeds.feedburner.com/~r/dschenkelman/~4/uD9SLkf31K8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/dschenkelman/2010/01/26/creating-a-multi-shell-application-in-prism-v2/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/dschenkelman/2010/01/26/creating-a-multi-shell-application-in-prism-v2/</feedburner:origLink></item>
		<item>
		<title>Prism-v2: Register views with names using View Discovery</title>
		<link>http://feeds.southworks.net/~r/dschenkelman/~3/p7iH-KB-IV4/</link>
		<comments>http://blogs.southworks.net/dschenkelman/2010/01/04/prism-v2-register-views-with-names-using-view-discovery/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 17:45:00 +0000</pubDate>
		<dc:creator>Damian Schenkelman</dc:creator>
		
		<category><![CDATA[Composite Application Guidance for WPF &amp; SL]]></category>

		<category><![CDATA[Patterns &amp; Practices]]></category>

		<category><![CDATA[Prism-v2]]></category>

		<category><![CDATA[Prism-v2.1]]></category>

		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[WPF]]></category>

		<category><![CDATA[Windows Presentation Foundation]]></category>

		<category><![CDATA[p&amp;p]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/dschenkelman/?p=155</guid>
		<description><![CDATA[The holidays are over, happy new year everyone and I hope it is a good one for all of you. It&#8217;s time for the first post of the year, which continuing last year&#8217;s trend will deal with Prism.
A couple of weeks ago this question in the Prism forum got Fer and I thinking how to [...]]]></description>
			<content:encoded><![CDATA[<p>The holidays are over, happy new year everyone and I hope it is a good one for all of you. It&#8217;s time for the first post of the year, which continuing last year&#8217;s trend will deal with <a href="http://msdn.microsoft.com/en-us/library/dd458809.aspx">Prism</a>.</p>
<p>A couple of weeks ago this question in the Prism forum got <a href="http://blogs.southworks.net/fantivero/">Fer</a> and I thinking how to set the name of views in a region <a href="http://msdn.microsoft.com/en-us/library/dd458809.aspx">using View Discovery</a>. As Prism does not support this out of the box (which is kind of weird), we had a talk with <a href="http://blogs.southworks.net/ejadib/">Ezequiel </a>and <a href="http://blogs.southworks.net/jdominguez/">Julian</a> and decided to use Prism&#8217;s extensibility to get this done (this means not changing the Prism source code at all <img src='http://blogs.southworks.net/dschenkelman/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ).</p>
<p>A couple of changes needed to be performed to achieve this functionality:</p>
<ol>
<li>Create a new <strong>RegionViewRegistry</strong>. Its API would allow passing the name of the view as the parameter when registering it with a region:</li>
<pre><span style="color: blue">public interface </span><span style="color: #2b91af">IRegionViewWithNamesRegistry </span>: <span style="color: #2b91af">IRegionViewRegistry
  </span>{
      <span style="color: blue">void </span>RegisterViewWithRegion(<span style="color: blue">string </span>regionName, <span style="color: #2b91af">Type </span>viewType, <span style="color: blue">string </span>viewName);
      <span style="color: blue">void </span>RegisterViewWithRegion(<span style="color: blue">string </span>regionName, <span style="color: #2b91af">Func</span>&lt;<span style="color: blue">object</span>&gt; getContentDelegate, <span style="color: blue">string </span>viewName);
  }</pre>
<p><a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a></p>
<li>Extend the <strong>AutoPopulateRegionBehavior</strong> to register the view using its name. To get this done we inherited from the <strong>RegionBehavior</strong> base class.</li>
</ol>
<p>Finally to check that everything worked correctly we created a small sample using the <a href="http://msdn.microsoft.com/en-us/library/dd458934.aspx">ViewDiscovery-UIComposition QS</a> for Silverlight (the new registry and behavior must be registered in the bootstrapper).</p>
<p>You can download the code from <a href="http://cid-09f63fc7ac065e5e.skydrive.live.com/self.aspx/p%5E0p%20Samples/ViewRegistryWithNames.zip">here</a> (use the <strong>ViewDiscoveryComposition.sln</strong>). The code is provided &#8220;AS IS&#8221; with no warranties and confers no rights.</p>
<p><a rev="vote-for" href="http://dotnetshoutout.com/Prism-v2-Register-views-with-names-using-View-Discovery"><img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.southworks.net%2Fdschenkelman%2F2010%2F01%2F04%2Fprism-v2-register-views-with-names-using-view-discovery%2F"></a></p>
<img src="http://feeds.feedburner.com/~r/dschenkelman/~4/p7iH-KB-IV4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/dschenkelman/2010/01/04/prism-v2-register-views-with-names-using-view-discovery/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/dschenkelman/2010/01/04/prism-v2-register-views-with-names-using-view-discovery/</feedburner:origLink></item>
		<item>
		<title>Memory Leak removing View with child regions in Prism-v2</title>
		<link>http://feeds.southworks.net/~r/dschenkelman/~3/NEsjSWq74sQ/</link>
		<comments>http://blogs.southworks.net/dschenkelman/2009/12/23/memory-leak-removing-view-with-child-regions-in-prism-v2/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 19:33:00 +0000</pubDate>
		<dc:creator>Damian Schenkelman</dc:creator>
		
		<category><![CDATA[Composite Application Guidance for WPF &amp; SL]]></category>

		<category><![CDATA[Patterns &amp; Practices]]></category>

		<category><![CDATA[Prism-v2]]></category>

		<category><![CDATA[Prism-v2.1]]></category>

		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[WPF]]></category>

		<category><![CDATA[Windows Presentation Foundation]]></category>

		<category><![CDATA[p&amp;p]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/dschenkelman/?p=153</guid>
		<description><![CDATA[About a week ago in the Prism forum we got a question about an issue in the scenario displayed below.

The Issue
When the MainView was removed from the MainRegion, the RightOne and RightTwo regions were not removed from the RegionManager and the views were still being referenced by the region. We were able to reproduce this [...]]]></description>
			<content:encoded><![CDATA[<p>About a week ago in the <a href="http://compositewpf.codeplex.com/Thread/List.aspx" target="_blank">Prism forum</a> we got a <a href="http://compositewpf.codeplex.com/Thread/View.aspx?ThreadId=77847" target="_blank">question</a> about an issue in the scenario displayed below.</p>
<p><a href="http://blogs.southworks.net/dschenkelman/files/2010/01/regions.png"><img class="alignnone size-full wp-image-159" src="http://blogs.southworks.net/dschenkelman/files/2010/01/regions.png" alt="" width="499" height="343" /></a></p>
<h2>The Issue</h2>
<p>When the <strong>MainView</strong> was removed from the <strong>MainRegion,</strong> the <strong>RightOne</strong> and <strong>RightTwo</strong> regions were not removed from the <strong>RegionManager</strong> and the views were still being referenced by the region. We were able to reproduce this issue &#8220;successfully&#8221; both using scoped regions and without them so we started thinking on a possible fix for this.</p>
<h2>The Fix</h2>
<p>After trying different things out, we took <a href="http://blogs.southworks.net/jdominguez/" target="_blank">Julian&#8217;s</a> suggestions and created a <strong>RegionBehavior</strong> that would be in charge of this. You can find the complete code for this class below:</p>
<pre><span style="color: blue">public class </span><span style="color: #2b91af">ClearChildViewsRegionBehavior </span>: <span style="color: #2b91af">RegionBehavior
   </span>{
       <span style="color: blue">public const string </span>BehaviorKey = <span style="color: #a31515">&#8220;ClearChildViews&#8221;</span>;

       <span style="color: blue">protected override void </span>OnAttach()
       {
           <span style="color: blue">this</span>.Region.PropertyChanged +=
               <span style="color: blue">new </span>System.ComponentModel.<span style="color: #2b91af">PropertyChangedEventHandler</span>(Region_PropertyChanged);
       }

       <span style="color: blue">void </span>Region_PropertyChanged(<span style="color: blue">object </span>sender, System.ComponentModel.<span style="color: #2b91af">PropertyChangedEventArgs </span>e)
       {
           <span style="color: blue">if </span>(e.PropertyName == <span style="color: #a31515">&#8220;RegionManager&#8221;</span>)
           {
               <span style="color: blue">if </span>(<span style="color: blue">this</span>.Region.RegionManager == <span style="color: blue">null</span>)
               {
                   <span style="color: blue">foreach </span>(<span style="color: blue">object </span>view <span style="color: blue">in this</span>.Region.Views)
                   {
                       <span style="color: #2b91af">DependencyObject </span>dependencyObject = view <span style="color: blue">as </span><span style="color: #2b91af">DependencyObject</span>;
                       <span style="color: blue">if </span>(dependencyObject != <span style="color: blue">null</span>)
                       {
                           dependencyObject.ClearValue(<span style="color: #2b91af">RegionManager</span>.RegionManagerProperty);
                       }
                   }
               }
           }
       }
   }</pre>
<p>When the <strong>RegionManager</strong> property of a <strong>Region</strong> changes to null, the behavior removes the view&#8217;s <strong>RegionManager</strong> attached property of all views in the region. Adding this behavior by overriding the bootstrapper&#8217;s <strong>ConfigureDefaultRegionBehaviors</strong> will enable this behavior for all regions:</p>
<pre><span style="color: blue">protected override </span><span style="color: #2b91af">IRegionBehaviorFactory </span>ConfigureDefaultRegionBehaviors()
        {
            <span style="color: blue">var </span>regionBehaviorTypesDictionary = <span style="color: blue">base</span>.ConfigureDefaultRegionBehaviors();
            regionBehaviorTypesDictionary.AddIfMissing
                (<span style="color: #2b91af">ClearChildViewsRegionBehavior</span>.BehaviorKey, <span style="color: blue">typeof</span>(<span style="color: #2b91af">ClearChildViewsRegionBehavior</span>));
            <span style="color: blue">return </span>regionBehaviorTypesDictionary;
        }</pre>
<h2>The Outcome</h2>
<p>I have created a sample application showing how the fix works. You can download it from <a href="http://cid-09f63fc7ac065e5e.skydrive.live.com/self.aspx/p%5E0p%20Samples/RemovingViewWithTwoSubregionsLevels.zip" target="_blank">here</a>. The code is provided &#8220;AS IS&#8221; with no warranties and confers no rights. I hope you can find this behavior useful if you have a similar kind of situation in your application.</p>
<p>As I probably won&#8217;t blog anymore until after the holidays, have a merry Christmas and a happy new year <img src='http://blogs.southworks.net/dschenkelman/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><a rev="vote-for" href="http://dotnetshoutout.com/Memory-Leak-removing-View-with-child-regions-in-Prism-v2"><img src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.southworks.net%2Fdschenkelman%2F2009%2F12%2F23%2Fmemory-leak-removing-view-with-child-regions-in-prism-v2%2F" alt="Shout it" /></a></p>
<img src="http://feeds.feedburner.com/~r/dschenkelman/~4/NEsjSWq74sQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/dschenkelman/2009/12/23/memory-leak-removing-view-with-child-regions-in-prism-v2/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/dschenkelman/2009/12/23/memory-leak-removing-view-with-child-regions-in-prism-v2/</feedburner:origLink></item>
		<item>
		<title>Will Silverlight 4 ICommand support simplify using commands in Prism?</title>
		<link>http://feeds.southworks.net/~r/dschenkelman/~3/xQ8iITGbCM8/</link>
		<comments>http://blogs.southworks.net/dschenkelman/2009/12/07/will-silverlight-4-icommand-support-simplify-using-commands-in-prism/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 14:48:00 +0000</pubDate>
		<dc:creator>Damian Schenkelman</dc:creator>
		
		<category><![CDATA[Composite Application Guidance for WPF &amp; SL]]></category>

		<category><![CDATA[Patterns &amp; Practices]]></category>

		<category><![CDATA[Prism-v2]]></category>

		<category><![CDATA[Prism-v2.1]]></category>

		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[Silverlight 4 Beta]]></category>

		<category><![CDATA[p&amp;p]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/dschenkelman/?p=152</guid>
		<description><![CDATA[As I thought this is a question that could interest many people, instead of answering this question directly in the Prism codeplex forum I decided to create a short blog post and answer it here.
The answer is &#8220;kind of&#8221;. Silverlight 4 Beta, so far, only supports binding commands to controls that inherit from ButtonBase (Button [...]]]></description>
			<content:encoded><![CDATA[<p>As I thought this is a question that could interest many people, instead of answering <a href="http://compositewpf.codeplex.com/Thread/View.aspx?ThreadId=75604" target="_blank">this question</a> directly in the <a href="http://compositewpf.codeplex.com/Thread/List.aspx" target="_blank">Prism codeplex forum</a> I decided to create a short blog post and answer it here.</p>
<div>The answer is &#8220;kind of&#8221;. <a href="http://silverlight.net/getstarted/silverlight-4-beta/" target="_blank">Silverlight 4 Beta</a>, so far, only supports binding commands to <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.buttonbase.command%28VS.96%29.aspx" target="_blank">controls that inherit from ButtonBase</a> (Button and HyperlinkButton), as you can read in <a href="http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+timheuer+%28Method+~+of+~+failed+by+Tim+Heuer%29#commands" target="_blank">Tim&#8217;s</a> and <a href="http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2009/11/18/silverlight-4-rough-notes-commanding.aspx" target="_blank">Mike&#8217;s</a> posts.</div>
<div>Therefore, if you are using Prism, these are the things that you will not need any more, and those that you will:</div>
<h4>No longer necessary</h4>
<div><strong>ButtonBaseCommandBehavior</strong> and <strong>Click</strong> classes from the CompositePresentationSilverlight assembly. As these are used to hook the command and the click event through XAML, you can bypass this by using the new command support.</div>
<pre><span style="color: blue">&lt;</span><span style="color: #a31515">Button </span><span style="color: red">Content</span><span style="color: blue">=</span>&#8220;<span style="color: blue">Save</span>&#8221; <span style="color: red">Command</span><span style="color: blue">=</span>&#8220;<span style="color: blue">{<span style="color: #a31515">Binding</span> <span style="color: red">Path</span>=SaveOrderCommand}</span>&#8220;<span style="color: blue">/&gt;</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<h4>Still necessary</h4>
<p>As there is not an actual implementation of the <strong>ICommand</strong> interface, the <a href="http://msdn.microsoft.com/en-us/library/dd458928.aspx" target="_blank">DelegateCommand and CompositeCommand</a> are still useful. Also, as controls other than Buttons do not have the possibility to bind their events to commands in the ViewModel, <a href="http://blogs.southworks.net/jdominguez/2008/08/icommand-for-silverlight-with-attached-behaviors/" target="_blank">using attached behaviors</a> is a good approach. You can use <a href="http://blogs.southworks.net/dschenkelman/2009/08/13/c-code-snippet-to-create-commands-with-attached-behaviors-using-prism/" target="_blank">this code snippet</a> to simplify the work.</p>
<h4>Wrapping up</h4>
<p>I hope this helps clarify this topic a bit, and if you have any doubts <a href="http://compositewpf.codeplex.com/Thread/List.aspx" target="_blank">drop by the Codeplex forum</a> and ask away (if you are shy you can always leave me a comment).</p>
<p>In case you want a working sample, I have made a couple of changes to the Commanding Quickstart to use the Command property instead of Prism&#8217;s attached behavior. You can find it <a href="http://cid-09f63fc7ac065e5e.skydrive.live.com/self.aspx/p%5E0p%20Samples/SL4%20Commands.zip" target="_blank">here</a>. The code is provided &#8220;AS IS&#8221; with no warranties and confers no rights.</p>
<p><a rev="vote-for" href="http://dotnetshoutout.com/Will-Silverlight-4-ICommand-support-simplify-using-commands-in-Prism"><img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.southworks.net%2Fdschenkelman%2F2009%2F12%2F07%2Fwill-silverlight-4-icommand-support-simplify-using-commands-in-prism%2F"></a></p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblogs.southworks.net%2fdschenkelman%2f2009%2f12%2f07%2fwill-silverlight-4-icommand-support-simplify-using-commands-in-prism%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblogs.southworks.net%2fdschenkelman%2f2009%2f12%2f07%2fwill-silverlight-4-icommand-support-simplify-using-commands-in-prism%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<img src="http://feeds.feedburner.com/~r/dschenkelman/~4/xQ8iITGbCM8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/dschenkelman/2009/12/07/will-silverlight-4-icommand-support-simplify-using-commands-in-prism/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/dschenkelman/2009/12/07/will-silverlight-4-icommand-support-simplify-using-commands-in-prism/</feedburner:origLink></item>
		<item>
		<title>Prism 2 (Composite Application Guidance for WPF &amp; Silverlight) migrated to Silverlight 4 Beta</title>
		<link>http://feeds.southworks.net/~r/dschenkelman/~3/_oZXMXu_ckA/</link>
		<comments>http://blogs.southworks.net/dschenkelman/2009/11/20/prism-2-composite-application-guidance-for-wpf-silverlightmigrated-to-silverlight-4-beta/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 21:26:37 +0000</pubDate>
		<dc:creator>Damian Schenkelman</dc:creator>
		
		<category><![CDATA[Composite Application Guidance for WPF &amp; SL]]></category>

		<category><![CDATA[Patterns &amp; Practices]]></category>

		<category><![CDATA[Prism-v2]]></category>

		<category><![CDATA[Prism-v2.1]]></category>

		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[Silverlight 4]]></category>

		<category><![CDATA[Silverlight 4 Beta]]></category>

		<category><![CDATA[Visual Studio 2010]]></category>

		<category><![CDATA[Visual Studio 2010 Beta 2]]></category>

		<category><![CDATA[WPF]]></category>

		<category><![CDATA[Windows Presentation Foundation]]></category>

		<category><![CDATA[p&amp;p]]></category>

		<category><![CDATA[Siverlight]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/dschenkelman/?p=151</guid>
		<description><![CDATA[Most of you know that a Silverlight 4 Beta was released last Wednesday, after Scott Gu&#8217;s PDC keynote. If you are a Prism user, and if you are reading this there&#8217;s a high chance you are, you are probably wondering how this relates to p&#38;p future plans. Well, Blaine has given us a brief idea [...]]]></description>
			<content:encoded><![CDATA[<p>Most of you know that a <a href="http://silverlight.net/getstarted/silverlight-4-beta/" target="_blank">Silverlight 4 Beta</a> was released last Wednesday, after <a href="http://weblogs.asp.net/scottgu/" target="_blank">Scott Gu&#8217;s</a> PDC <a href="http://microsoftpdc.com/Sessions/KEY02" target="_blank">keynote</a>. If you are a Prism user, and if you are reading this there&#8217;s a high chance you are, you are probably wondering how this relates to p&amp;p future plans. Well, <a href="https://blogs.msdn.com/blaine/" target="_blank">Blaine</a> has given us a brief idea of Prism&#8217;s future in <a href="http://compositewpf.codeplex.com/Thread/View.aspx?ThreadId=75604" target="_blank">this forum thread</a>, so you might want to check it out.</p>
<p>On a related but different subject <a href="http://blogs.southworks.net/fantivero/" target="_blank">Fernando</a> and I migrated the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=387c7a59-b217-4318-ad1b-cbc2ea453f40&amp;displaylang=en" target="_blank">latest Prism release</a> to Silverlight 4 Beta version &amp; Net 4.0. A few minor changes needed to be done in the code (explained <a href="http://blogs.southworks.net/dschenkelman/2009/11/09/prism-2-composite-application-guidance-for-wpf-silverlight-migrated-to-visual-studio-2010-beta-2/" target="_blank">here</a>), and some other in the <strong>.csproj</strong> files due to an issue we came up using the Silverlight migration wizard.</p>
<h2>Migration Issues</h2>
<p>After going through the migration wizard, you will notice that all Silverlight projects are not loaded. This is because they are still looking for the 3.0 installation directory instead of 4.0 as you can see in the picture below.</p>
<p><a href="http://blogs.southworks.net/dschenkelman/files/2009/11/image2.png"><img src="http://blogs.southworks.net/dschenkelman/files/2009/11/image-thumb2.png" border="0" alt="image" width="736" height="160" /></a></p>
<p>To fix this issue you need to edit your .csproj file and redirect it to the Silverlight 4 directory. The line that is related to this issue is the following:</p>
<pre><span style="color: blue">&lt;</span><span style="color: #a31515">Import </span><span style="color: red">Project</span><span style="color: blue">=</span>&#8220;<span style="color: blue">$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)
\Microsoft.Silverlight.CSharp.targets</span>&#8221; <span style="color: blue">/&gt;</span></pre>
<p>Here you have two options:</p>
<ol>
<li>Replace &#8220;$(SilverlightVersion)&#8221; for &#8220;v4.0&#8243;.</li>
<li>Modify any existing declarations of &#8220;<strong>SilverlightVersion</strong>&#8220; in your file and update them to 4.0. Take into account that some of them might be using the <strong>&#8220;FrameworkVersion&#8221;</strong>. The code below shows this situation:
<pre><span style="color: blue">&lt;</span><span style="color: #a31515">TargetFrameworkVersion</span><span style="color: blue">&gt;</span>v3.5<span style="color: blue">&lt;/</span><span style="color: #a31515">TargetFrameworkVersion</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">SilverlightVersion</span><span style="color: blue">&gt;</span>$(TargetFrameworkVersion)<span style="color: blue">&lt;/</span><span style="color: #a31515">SilverlightVersion</span><span style="color: blue">&gt;</span></pre>
</li>
</ol>
<h2>Prism Migrated Download</h2>
<p>If you want to save some time, you can download the CAL, Quickstarts and RI from <a href="http://cid-09f63fc7ac065e5e.skydrive.live.com/self.aspx/p%5E0p%20Samples/Prism2.1SL4.zip">here</a>. The code is provided &#8220;AS IS&#8221; with no warranties and confers no rights and is shipped under the &#8220;works on our machine&#8221; license.</p>
<p>Have fun coding in Silverlight 4!!!</p>
<p><a rev="vote-for" href="http://dotnetshoutout.com/Prism-2-Composite-Application-Guidance-for-WPF-Silverlight-migrated-to-Silverlight-4-Beta"><img src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.southworks.net%2Fdschenkelman%2F2009%2F11%2F20%2Fprism-2-composite-application-guidance-for-wpf-silverlightmigrated-to-silverlight-4-beta%2F" alt="Shout it" /></a></p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblogs.southworks.net%2fdschenkelman%2f2009%2f11%2f20%2fprism-2-composite-application-guidance-for-wpf-silverlightmigrated-to-silverlight-4-beta%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblogs.southworks.net%2fdschenkelman%2f2009%2f11%2f20%2fprism-2-composite-application-guidance-for-wpf-silverlightmigrated-to-silverlight-4-beta%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<img src="http://feeds.feedburner.com/~r/dschenkelman/~4/_oZXMXu_ckA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/dschenkelman/2009/11/20/prism-2-composite-application-guidance-for-wpf-silverlightmigrated-to-silverlight-4-beta/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/dschenkelman/2009/11/20/prism-2-composite-application-guidance-for-wpf-silverlightmigrated-to-silverlight-4-beta/</feedburner:origLink></item>
		<item>
		<title>Learning Prism (Composite Application Guidance for WPF &amp; Silverlight) MVVM Fundamentals</title>
		<link>http://feeds.southworks.net/~r/dschenkelman/~3/AkrthO2vwOk/</link>
		<comments>http://blogs.southworks.net/dschenkelman/2009/11/16/learning-prism-composite-application-guidance-for-wpf-silverlight-mvvm-fundamentals/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 12:55:48 +0000</pubDate>
		<dc:creator>Damian Schenkelman</dc:creator>
		
		<category><![CDATA[Composite Application Guidance for WPF &amp; SL]]></category>

		<category><![CDATA[MVVM]]></category>

		<category><![CDATA[Patterns &amp; Practices]]></category>

		<category><![CDATA[Prism-v2]]></category>

		<category><![CDATA[Prism-v2.1]]></category>

		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[Silverlight 3]]></category>

		<category><![CDATA[WPF]]></category>

		<category><![CDATA[Windows Presentation Foundation]]></category>

		<category><![CDATA[p&amp;p]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/dschenkelman/?p=141</guid>
		<description><![CDATA[On a previous post in this series I talked about a possible approach to take when starting to learn Prism as a whole (the Tip numbering is resumed from the previous post). In this post I will get more specific and talk about one of the most used (if not the most used) pattern when [...]]]></description>
			<content:encoded><![CDATA[<p>On a <a href="http://blogs.southworks.net/dschenkelman/2009/10/22/learning-prism-composite-application-guidance-for-wpf-silverlight-how-do-i-start/" target="_blank">previous post</a> in this series I talked about a possible approach to take when starting to learn Prism as a whole (the Tip numbering is resumed from the previous post). In this post I will get more specific and talk about one of the most used (if not the most used) pattern when developing Prism applications (either for WPF &amp; Silverlight): MVVM.</p>
<p>Most people are familiar with this pattern (if you are not great places to read about it are <a href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx" target="_blank">here for WPF</a> and <a href="http://msdn.microsoft.com/en-us/magazine/dd458800.aspx" target="_blank">over here for Silverlight</a>), so I will not go deep into what is the main idea of it. Instead I will try to go over some core concepts that usually lead to different levels of confusion.</p>
<h2>What’s the difference between MVVM and PresentationModel?</h2>
<p>The above question is one asked a lot, as people tend to get confused when they hear all the talk about MVVM and then open some Prism <a href="http://msdn.microsoft.com/en-us/library/dd458858.aspx" target="_blank">Quickstarts</a> or <a href="http://msdn.microsoft.com/en-us/library/dd458919.aspx" target="_blank">RI</a> and find most of them <em>“implement the <strong>PresentationModel</strong> pattern”</em>.</p>
<p>Well, there is not a certain answer (and if there was I probably wouldn’t be the one who came up with it), but as far as Prism development is concerned they are synonyms. There is no difference between them, except for the coined term. As <a href="http://martinfowler.com/" target="_blank">Martin Fowler</a> explains in his <a href="http://martinfowler.com/eaaDev/PresentationModel.html" target="_blank">PresentationModel article</a>: <em>“The essence of a Presentation Model is of a fully self-contained class that represents all the data and behavior of the UI window, but without any of the controls used to render that UI on the screen. A view then simply projects the state of the presentation model onto the glass.”</em>, so if you think about it, the way to “project the state of the PresentationModel (or ViewModel) onto the glass is <strong>WPF/Silverlight</strong> DataBinding in our case (or as <a href="http://blogs.southworks.net/jdominguez/" target="_blank">Julian</a> likes to explain it: <em>“the ViewModel is a bindable Presenter”</em>).</p>
<p>Always remember the main objective, testability and decoupling.</p>
<table border="1" cellspacing="0" cellpadding="2" width="292" align="center">
<tbody>
<tr>
<td width="290" valign="top"><strong>Tip 5:</strong> MVVM and Presentation Model are synonyms.</td>
</tr>
</tbody>
</table>
<h2>How do I do pure MVVM?</h2>
<p>This is another point of confusion as people tend to relate MVVM with <a href="http://msdn.microsoft.com/en-us/library/ms742521.aspx" target="_blank">DataTemplates</a> and no View code behind, so they get the idea that the only way to implement the pattern is that one.</p>
<p>In my opinion there is no pure MVVM, it is a design pattern, so it can have many different implementations which will depend mainly on who implements it and what his requirements are. In this particular topic I would like to “branch you” to <a href="http://blogs.msdn.com/gblock/" target="_blank">Glenn’s</a> post “<a href="http://blogs.msdn.com/gblock/archive/2009/08/03/the-spirit-of-mvvm-viewmodel-it-s-not-a-code-counting-exercise.aspx" target="_blank">The spirit of MVVM (ViewModel), it’s not a code counting exercise.</a>” as I agree with his point of view in this topic, so there is no point in duplicating the information.</p>
<p>Now that you have finished reading Glenn’s post, I hope you understand what I am trying to explain (not necessarily agree). I for once like the “View First” (you “talk” to the view) implementation to relate the View to its <strong>ViewModel</strong> in Prism could be the following (using DI):</p>
<p><span style="color: blue">public class </span><span style="color: #2b91af">MyView</span><br />
{<br />
<span style="color: blue">public </span>MyView(<span style="color: #2b91af">IMyViewModel </span>viewModel)<br />
{<br />
<span style="color: blue">this</span>.DataContext = viewModel;<br />
InitializeComponent();<br />
}<br />
}</p>
<p>In the code above, Unity’s DI provides the decoupling between the View and the ViewModel, so the ViewModel “does not have to know anything about the view” and allows you to test the VM in isolation (of course this is just one of the ways to do it).</p>
<table border="1" cellspacing="0" cellpadding="2" width="457" align="center">
<tbody>
<tr>
<td width="455" valign="top"><strong>Tip 6: </strong>There is no Silver Bullet MVVM implementation. Use the one that you like best.</td>
</tr>
</tbody>
</table>
<h2>How should I manage my View/ViewModel?</h2>
<p>This question addresses both creation/destruction of View and ViewModels as well as its interaction with other components in the application. Often it is not “clear” which component should handle a specific action.</p>
<p>Say that when a button is clicked an event should be published. Where should this be done? Well, without information about the application and its patterns it is hard to say. It could be done in the <strong>ViewModel</strong> or it could be done in a module level controller that manages interaction with other modules, but this depends on how your application is structured.</p>
<p>Instead of expanding on this topic, I would like to branch you (yet again), to these posts from Ward Bell which talk about these common questions and provide some really interesting and thought answers:</p>
<ul>
<li><a href="http://neverindoubtnet.blogspot.com/2009/05/birth-and-death-of-m-v-vm-triads.html">Birth and Death of M-V-VM Triads</a></li>
<li><a href="http://neverindoubtnet.blogspot.com/2009/06/screen-factory.html">Screen Factory</a></li>
</ul>
<h2>Should I always use commands to communicate with the ViewModel?</h2>
<p>Before using a command, I usually stop and think: “Can this be done in another way?, Can I achieve this same functionality with binding?”. Well, sometimes the answer is yes, and that is when I think commands are not necessary. The most common example is binding a command to execute every time and item in a Listbox is selected. This same behavior can be achieved by binding the SelectedItem property of the Listbox to your ViewModel (most of the times), and executing the required action on the setter.</p>
<p>Having thought of the above, what if I do need a command? Well, my first recommendation would be understanding how do Commands with attached Behaviors work, a topic explained by <a href="http://blogs.southworks.net/jdominguez/" target="_blank">Julian</a> in this <a href="http://blogs.southworks.net/jdominguez/2008/08/icommand-for-silverlight-with-attached-behaviors/" target="_blank">great post</a>. After that you can use the <a href="http://blogs.southworks.net/dschenkelman/2009/08/13/c-code-snippet-to-create-commands-with-attached-behaviors-using-prism/" target="_blank">code snippet I created</a> some time ago to help you with the tedious task of creating the classes required for this to work.</p>
<table border="1" cellspacing="0" cellpadding="2" width="400" align="center">
<tbody>
<tr>
<td width="400" valign="top"><strong>Tip 7: </strong>Before using commands, think if there is another option.</td>
</tr>
</tbody>
</table>
<h3>Things to add to your reading list</h3>
<p>To help you comply with Tip 4, you can find below a couple of articles about MVVM and MVVM with Prism that I think might be of use to better understand this topic (the ones mentioned above would be in this list, but there is not need in duplicating them):</p>
<ul>
<li><a href="http://blogs.msdn.com/erwinvandervalk/archive/2009/08/12/how-do-i-do-with-the-model-view-viewmodel-pattern.aspx" target="_blank">Erwin’s MVVM series</a> (with some more posts to go)</li>
<li><a href="http://blogs.msdn.com/dphill/archive/2009/06/15/prism-quick-start-kit-update.aspx" target="_blank">David’s Visual Studio templates</a></li>
</ul>
<p>Hopefully, this post has helped you understand a little more about MVVM and how to use it with Prism. As always, your feedback is appreciated, so if you believe any link should be added or anything of the sort, just drop a comment.</p>
<p><a rev="vote-for" href="http://dotnetshoutout.com/Learning-Prism-Composite-Application-Guidance-for-WPF-Silverlight-MVVM-Fundamentals"><img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.southworks.net%2Fdschenkelman%2F2009%2F11%2F16%2Flearning-prism-composite-application-guidance-for-wpf-silverlight-mvvm-fundamentals%2F"></a></p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblogs.southworks.net%2fdschenkelman%2f2009%2f11%2f16%2flearning-prism-composite-application-guidance-for-wpf-silverlight-mvvm-fundamentals%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblogs.southworks.net%2fdschenkelman%2f2009%2f11%2f16%2flearning-prism-composite-application-guidance-for-wpf-silverlight-mvvm-fundamentals%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<img src="http://feeds.feedburner.com/~r/dschenkelman/~4/AkrthO2vwOk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/dschenkelman/2009/11/16/learning-prism-composite-application-guidance-for-wpf-silverlight-mvvm-fundamentals/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/dschenkelman/2009/11/16/learning-prism-composite-application-guidance-for-wpf-silverlight-mvvm-fundamentals/</feedburner:origLink></item>
		<item>
		<title>Prism 2 (Composite Application Guidance for WPF &amp; Silverlight) migrated to Visual Studio 2010 Beta 2</title>
		<link>http://feeds.southworks.net/~r/dschenkelman/~3/GZd64eJb-3g/</link>
		<comments>http://blogs.southworks.net/dschenkelman/2009/11/09/prism-2-composite-application-guidance-for-wpf-silverlight-migrated-to-visual-studio-2010-beta-2/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 14:55:36 +0000</pubDate>
		<dc:creator>Damian Schenkelman</dc:creator>
		
		<category><![CDATA[Composite Application Guidance for WPF &amp; SL]]></category>

		<category><![CDATA[Patterns &amp; Practices]]></category>

		<category><![CDATA[Prism-v2]]></category>

		<category><![CDATA[Prism-v2.1]]></category>

		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[Silverlight 3]]></category>

		<category><![CDATA[Visual Studio 2010]]></category>

		<category><![CDATA[Visual Studio 2010 Beta 2]]></category>

		<category><![CDATA[WPF]]></category>

		<category><![CDATA[Windows Presentation Foundation]]></category>

		<category><![CDATA[p&amp;p]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/dschenkelman/?p=148</guid>
		<description><![CDATA[As most of you might know, Visual Studio 2010 Beta 2 was released some days ago. Ever since, many people have asked at the Prism codeplex forums if Prism works with this latest version. That&#8217;s why with Fer we decided to migrate Prism latest release for Silverlight 3 to VS 2010 Beta 2. Our conclusion [...]]]></description>
			<content:encoded><![CDATA[<p>As most of you might know, <a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx" target="_blank">Visual Studio 2010 Beta 2</a> was released some days ago. Ever since, many people have asked at the <a href="http://compositewpf.codeplex.com/Thread/List.aspx" target="_blank">Prism codeplex forums</a> if Prism works with this latest version. That&#8217;s why with <a href="http://blogs.southworks.net/fantivero/" target="_blank">Fer</a> we decided to migrate <a href="http://blogs.southworks.net/dschenkelman/2009/11/02/prism-v21-composite-application-guidance-just-released-updated-version-for-silverlight-3/" target="_blank">Prism latest release for Silverlight 3</a> to VS 2010 Beta 2. Our conclusion after our smoke tests is that it does work <img src='http://blogs.southworks.net/dschenkelman/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<h2>Migration Steps</h2>
<ol>
<li>Migrated every solution.<a href="http://blogs.southworks.net/dschenkelman/files/2009/11/image1.png"><img style="margin-left: 0px;margin-right: 0px" src="http://blogs.southworks.net/dschenkelman/files/2009/11/image-thumb1.png" border="0" alt="image" width="244" height="78" align="right" /></a></li>
<li>Ran the tests and smoke tested each application.</li>
<li>Fixed any issues that appeared (mostly related to missing assembly references).</li>
<li>As a little extra, we added the White assembly references required to run the acceptance tests.</li>
</ol>
<h2>Changes Required</h2>
<p>Below you can find a small explanation of the changes required for the migration:</p>
<ol>
<li>The <a href="http://msdn.microsoft.com/en-us/library/dd458919.aspx" target="_blank">Reference Implementation</a> Tests fail (4 tests) when you run them. The fix is explained in <a href="http://compositewpf.codeplex.com/Thread/View.aspx?ThreadId=71635" target="_blank">this thread</a>.</li>
<li>Many projects will throw a missing assembly reference exception related to &#8220;System.Xaml.dll&#8221;. You need to add this assembly as a reference in most test projects.</li>
<li>The <a href="http://msdn.microsoft.com/en-us/library/dd490832.aspx" target="_blank">Multitargeting Quickstart</a> throws an error when running it. To fix it, change the Resources constructor modifier from <em>internal</em> to <em>public</em>.</li>
<li>Some build errors might be thrown because of code analysis issues in Silverlight projects (CA:0055 Analysis of Silverlight assemblies is not supported):
<ul>
<li>Uncheck the &#8220;Enable Code Analysis on build&#8221; check box in the Code Analysis tab.</li>
<li>Make sure code analysis is not one of the compilation symbols in the Build tab.</li>
</ul>
</li>
</ol>
<h2>Download</h2>
<p>The code provides all the fixes performed, and is provided &#8220;AS IS&#8221; with no warranties and confers no rights. It is shipped under the &#8220;works on my machine&#8221; license. You can download it from <a href="http://cid-09f63fc7ac065e5e.skydrive.live.com/self.aspx/p%5E0p%20Samples/Prism%20VS2010%20Beta%202.zip">here</a>.</p>
<p>I hope this saves you the trouble of migrating Prism to VS 2010.</p>
<p><a rev="vote-for" href="http://dotnetshoutout.com/Prism-2-Composite-Application-Guidance-for-WPF-Silverlight-migrated-to-Visual-Studio-2010-Beta-2"><img src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.southworks.net%2Fdschenkelman%2F2009%2F11%2F09%2Fprism-2-composite-application-guidance-for-wpf-silverlight-migrated-to-visual-studio-2010-beta-2%2F" alt="Shout it" /></a></p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblogs.southworks.net%2fdschenkelman%2f2009%2f11%2f09%2fprism-2-composite-application-guidance-for-wpf-silverlight-migrated-to-visual-studio-2010-beta-2%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblogs.southworks.net%2fdschenkelman%2f2009%2f11%2f09%2fprism-2-composite-application-guidance-for-wpf-silverlight-migrated-to-visual-studio-2010-beta-2%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<img src="http://feeds.feedburner.com/~r/dschenkelman/~4/GZd64eJb-3g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/dschenkelman/2009/11/09/prism-2-composite-application-guidance-for-wpf-silverlight-migrated-to-visual-studio-2010-beta-2/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/dschenkelman/2009/11/09/prism-2-composite-application-guidance-for-wpf-silverlight-migrated-to-visual-studio-2010-beta-2/</feedburner:origLink></item>
		<item>
		<title>Why Silverlight 3 Navigation cannot be fully leveraged when loading modules remotely with Prism 2</title>
		<link>http://feeds.southworks.net/~r/dschenkelman/~3/sjMbXGGr0eE/</link>
		<comments>http://blogs.southworks.net/dschenkelman/2009/11/05/why-silverlight-3-navigation-cannot-be-fully-leveraged-when-loading-modules-remotely-with-prism-2/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 09:36:35 +0000</pubDate>
		<dc:creator>Damian Schenkelman</dc:creator>
		
		<category><![CDATA[Composite Application Guidance for WPF &amp; SL]]></category>

		<category><![CDATA[Navigation]]></category>

		<category><![CDATA[Patterns &amp; Practices]]></category>

		<category><![CDATA[Prism-v2]]></category>

		<category><![CDATA[Remote Module Loading]]></category>

		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[Silverlight 3]]></category>

		<category><![CDATA[WPF]]></category>

		<category><![CDATA[Windows Presentation Foundation]]></category>

		<category><![CDATA[p&amp;p]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/dschenkelman/?p=145</guid>
		<description><![CDATA[Now that the Prism team has shipped a new version of the guidance, I thought it would be a good time to blog on this subject, based on some research we did with Ezequiel, Matias and Julian. This article will not focus on how to workaround the limitations of using Silverlight 3 Navigation with Prism [...]]]></description>
			<content:encoded><![CDATA[<p>Now that <a href="http://blogs.southworks.net/dschenkelman/2009/11/02/prism-v21-composite-application-guidance-just-released-updated-version-for-silverlight-3/" target="_blank">the Prism team has shipped a new version of the guidance</a>, I thought it would be a good time to blog on this subject, based on some research we did with <a href="http://blogs.southworks.net/ejadib/" target="_blank">Ezequiel</a>, <a href="http://blogs.southworks.net/matiasb/" target="_blank">Matias</a> and <a href="http://blogs.southworks.net/jdominguez/" target="_blank">Julian</a>. This article will not focus on how to workaround the limitations of using Silverlight 3 Navigation with Prism (as the guys who wrote the posts mentioned below have done a good job on that) instead it will focus on the why of these limitations:</p>
<ul>
<li><a href="http://blogs.southworks.net/mconverti/2009/04/12/how-to-integrate-a-prism-v2-application-with-the-silverlight-3-navigation-framework/">How To: Integrate a Prism v2 application with the Silverlight 3 Navigation Framework </a></li>
<li><a href="http://www.davidpoll.com/?p=92" target="_blank">Silverlight 3 Navigation: Navigating to Pages in dynamically-loaded assemblies</a></li>
</ul>
<table border="1" cellspacing="0" cellpadding="2" width="267" align="center">
<tbody>
<tr>
<td width="265" valign="top"><strong>Warning:</strong> Technical explanation coming below.</td>
</tr>
</tbody>
</table>
<p>The Silverlight team is aware of the limitations mentioned below, so they <span style="text-decoration: underline">might</span> be taken into account for a future version.</p>
<h2>Issue Description</h2>
<p><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.page(VS.95).aspx">Pages</a> with code behind, from remotely loaded modules cannot be navigated to, calling the Frame&#8217;s <a href="http://msdn.microsoft.com/en-us/library/ms602275(VS.95).aspx">Navigate</a> method. This prevents having functional views since they neither have code behind nor a <strong>ViewModel</strong> attached.</p>
<h2>Cause of Issue</h2>
<table border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td width="1086" valign="top"><strong>Note: </strong>To be able to perform the research below, add the following line in the <strong>LoadAssemblyFromStream</strong> method placed in the <strong>XapModuleTypeLoader</strong> class from the CAL:<br />
<span style="font-family: Courier New;font-size: x-small">Deployment.Current.Parts.Add(assemblyPart);</span></td>
</tr>
</tbody>
</table>
<p><strong></strong></p>
<p>The Silverlight 3 Navigation framework goes over every <strong>AssemblyPart </strong>in the <strong>Deployment.Current.Parts</strong> collection if the Page to navigate to has code behind, as shown in the code below (<strong>PageResourceContentLoader</strong> class reflected code in the <strong>System.Windows.Navigation</strong> namespace from the <strong>System.Windows.Controls.Navigation</strong> assembly):</p>
<pre><span style="color: blue">private static </span><span style="color: #2b91af">Type </span>GetTypeFromAnyLoadedAssembly(<span style="color: blue">string </span>typeName)
        {
            <span style="color: #2b91af">Type </span>type = <span style="color: blue">null</span>;
            <span style="color: blue">foreach </span>(<span style="color: #2b91af">AssemblyPart </span>part <span style="color: blue">in </span><span style="color: #2b91af">Deployment</span>.Current.Parts)
            {
                <span style="color: green">/*THE LINE BELOW RETURNS NULL FOR REMOTELY LOADED ASSEMBLIES, BECAUSE THEY ARE NOT IN THE APPLICATION&#8217;S XAP*/
                </span><span style="color: #2b91af">StreamResourceInfo </span>resourceStream = <span style="color: #2b91af">Application</span>.GetResourceStream(<span style="color: blue">new </span><span style="color: #2b91af">Uri</span>(part.Source, <span style="color: #2b91af">UriKind</span>.Relative));
                <span style="color: blue">if </span>(resourceStream != <span style="color: blue">null</span>)
                {
                    <span style="color: #2b91af">Assembly </span>assembly = <span style="color: blue">new </span><span style="color: #2b91af">AssemblyPart</span>().Load(resourceStream.Stream);
                    <span style="color: blue">if </span>(assembly != <span style="color: blue">null</span>)
                    {
                        type = <span style="color: #2b91af">Type</span>.GetType(typeName + <span style="color: #a31515">&#8220;,&#8221; </span>+ assembly, <span style="color: blue">false</span>);
                    }
                }
                <span style="color: blue">if </span>(type != <span style="color: blue">null</span>)
                {
                    <span style="color: blue">return </span>type;
                }
            }
            <span style="color: blue">return </span>type;
        }</pre>
<p>As the above code shows, even if the <strong>AssemblyPart</strong> is in the collection it is not found by the <strong>Application.GetReourceStream</strong> method. From the <a href="http://msdn.microsoft.com/en-us/library/ms596994(VS.95).aspx">method&#8217;s MSDN site</a>, the cause is:</p>
<p><em></em></p>
<p><em>&#8220;The </em><a href="http://msdn.microsoft.com/en-us/library/system.windows.application.getresourcestream(VS.95).aspx"><em>GetResourceStream</em></a><em> method allows you to load an arbitrary resource file from one of the following locations:</em></p>
<ul>
<li><em>Embedded in the application assembly in the application package.</em></li>
<li><em>Embedded in a library assembly that is included in the application package.</em></li>
<li><em>Included in the application package.&#8221;</em></li>
</ul>
<p>So only assemblies in the application&#8217;s original .xap file are found and not for other modules.</p>
<p>I hope the above explanation was useful.</p>
<p><a rev="vote-for" href="http://dotnetshoutout.com/Why-Silverlight-3-Navigation-cannot-be-fully-leveraged-when-loading-modules-remotely-with-Prism-2"><img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.southworks.net%2Fdschenkelman%2F2009%2F11%2F05%2Fwhy-silverlight-3-navigation-cannot-be-fully-leveraged-when-loading-modules-remotely-with-prism-2%2F"></a></p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblogs.southworks.net%2fdschenkelman%2f2009%2f11%2f05%2fwhy-silverlight-3-navigation-cannot-be-fully-leveraged-when-loading-modules-remotely-with-prism-2%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblogs.southworks.net%2fdschenkelman%2f2009%2f11%2f05%2fwhy-silverlight-3-navigation-cannot-be-fully-leveraged-when-loading-modules-remotely-with-prism-2%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<img src="http://feeds.feedburner.com/~r/dschenkelman/~4/sjMbXGGr0eE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/dschenkelman/2009/11/05/why-silverlight-3-navigation-cannot-be-fully-leveraged-when-loading-modules-remotely-with-prism-2/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/dschenkelman/2009/11/05/why-silverlight-3-navigation-cannot-be-fully-leveraged-when-loading-modules-remotely-with-prism-2/</feedburner:origLink></item>
		<item>
		<title>Prism 2.1 (Composite Application Guidance for WPF &amp; Silverlight 3) just released (updated version for Silverlight 3)</title>
		<link>http://feeds.southworks.net/~r/dschenkelman/~3/skoG3F06ldA/</link>
		<comments>http://blogs.southworks.net/dschenkelman/2009/11/02/prism-v21-composite-application-guidance-just-released-updated-version-for-silverlight-3/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 18:30:51 +0000</pubDate>
		<dc:creator>Damian Schenkelman</dc:creator>
		
		<category><![CDATA[Composite Application Guidance for WPF &amp; SL]]></category>

		<category><![CDATA[Patterns &amp; Practices]]></category>

		<category><![CDATA[Prism-v2]]></category>

		<category><![CDATA[Prism-v2.1]]></category>

		<category><![CDATA[Releases]]></category>

		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[Silverlight 3]]></category>

		<category><![CDATA[WPF]]></category>

		<category><![CDATA[Windows Presentation Foundation]]></category>

		<category><![CDATA[p&amp;p]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/dschenkelman/?p=144</guid>
		<description><![CDATA[The patterns &#38; practices team has just released Prism-v2.1, an updated version of the Composite Application Guidance for WPF &#38; Silverlight, which has some breaking changes, mostly related to Silverlight 3 (from the &#8220;New in this release&#8221; article):


All Visual Studio projects (Composite Application Library, reference implementation, and Quickstarts) were migrated to use Silverlight 3.
TabRegionControlAdapter was [...]]]></description>
			<content:encoded><![CDATA[<p>The patterns &amp; practices team has just released Prism-v2.1, an updated version of the <a href="http://msdn.microsoft.com/en-us/library/dd458809.aspx" target="_blank">Composite Application Guidance for WPF &amp; Silverlight</a>, which has <a href="http://msdn.microsoft.com/en-us/library/ee712881.aspx" target="_blank">some breaking changes</a>, mostly related to Silverlight 3 (from the &#8220;New in this release&#8221; article):</p>
<p><a href="http://blogs.southworks.net/dschenkelman/files/2009/11/image.png"><img style="margin-left: 0px;margin-right: 0px" src="http://blogs.southworks.net/dschenkelman/files/2009/11/image-thumb.png" border="0" alt="image" width="192" height="109" align="right" /></a></p>
<ul>
<li><em>All Visual Studio projects (Composite Application Library, reference implementation, and Quickstarts) were migrated to use Silverlight 3.</em></li>
<li><em><strong>TabRegionControlAdapter</strong> was modified to support binding in the <strong>TabItem</strong>&#8217;s control header in Silverlight 3.</em></li>
<li><em><strong>CreateXap.bat</strong> file was modified to search for Silverlight 3 assemblies if the Silverlight 2 reference assemblies cannot be found.</em></li>
<li><em>Implemented the <a id="ctl00_MTCS_main_ctl01" href="http://msdn.microsoft.com/en-us/library/aa970850.aspx">WeakEvent Pattern</a> for the <strong>DelegateCommand</strong>&#8217;s and <strong>CompositeComand</strong>&#8217;s </em>(more on this below)<em>.</em><strong> </strong></li>
</ul>
<p>If you were using Prism 2.0, either for <strong>WPF</strong> or <strong>Silverlight</strong> development, I would recommend you to start using this new version, as there is also an implementation<em> &#8220;of the </em><a href="http://msdn.microsoft.com/en-us/library/aa970850.aspx"><em>WeakEvent Pattern</em></a><em> for the <strong>DelegateCommand</strong>&#8217;s and <strong>CompositeComand</strong>&#8217;s<strong> CanExecuteChanged</strong> event to fix a possible memory leak in the applications using the Composite Application Library commands&#8221;</em>.</p>
<p>You can download the latest version of the guidance from <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=387c7a59-b217-4318-ad1b-cbc2ea453f40" target="_blank">here</a>.</p>
<p>Kudos to the Prism team!!!</p>
<p><a rev="vote-for" href="http://dotnetshoutout.com/Prism-v21-Composite-Application-Guidance-for-WPF-Silverlight-3-just-released-updated-version-for-Silverlight-3"><img src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.southworks.net%2Fdschenkelman%2F2009%2F11%2F02%2Fprism-v21-composite-application-guidance-just-released-updated-version-for-silverlight-3%2F" alt="Shout it" /></a></p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblogs.southworks.net%2fdschenkelman%2f2009%2f11%2f02%2fprism-v21-composite-application-guidance-just-released-updated-version-for-silverlight-3%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblogs.southworks.net%2fdschenkelman%2f2009%2f11%2f02%2fprism-v21-composite-application-guidance-just-released-updated-version-for-silverlight-3%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<img src="http://feeds.feedburner.com/~r/dschenkelman/~4/skoG3F06ldA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/dschenkelman/2009/11/02/prism-v21-composite-application-guidance-just-released-updated-version-for-silverlight-3/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/dschenkelman/2009/11/02/prism-v21-composite-application-guidance-just-released-updated-version-for-silverlight-3/</feedburner:origLink></item>
		<item>
		<title>Learning Prism (Composite Application Guidance for WPF &amp; Silverlight). How do I start?</title>
		<link>http://feeds.southworks.net/~r/dschenkelman/~3/rLPX1PQMWLg/</link>
		<comments>http://blogs.southworks.net/dschenkelman/2009/10/22/learning-prism-composite-application-guidance-for-wpf-silverlight-how-do-i-start/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 14:08:50 +0000</pubDate>
		<dc:creator>Damian Schenkelman</dc:creator>
		
		<category><![CDATA[Composite Application Guidance for WPF &amp; SL]]></category>

		<category><![CDATA[Patterns &amp; Practices]]></category>

		<category><![CDATA[Prism-v2]]></category>

		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[Silverlight 3]]></category>

		<category><![CDATA[WPF]]></category>

		<category><![CDATA[Windows Presentation Foundation]]></category>

		<category><![CDATA[p&amp;p]]></category>

		<category><![CDATA[Eve]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/dschenkelman/?p=140</guid>
		<description><![CDATA[A question we get asked frequently is: &#8220;How do I start learning Prism? Is there a particular order for the Quickstarts? What other web resources do you recommend to start learning?&#8221;. If you are in this situation, or just want to have some more insight on a particular Prism topic, this is the post for [...]]]></description>
			<content:encoded><![CDATA[<p>A question we get asked frequently is: &#8220;How do I start learning Prism? Is there a particular order for the Quickstarts? What other web resources do you recommend to start learning?&#8221;. If you are in this situation, or just want to have some more insight on a particular Prism topic, this is the post for you (I always wanted to say that, just like TV announcements :))</p>
<h2>The basic question: &#8220;How do I start learning Prism?&#8221;</h2>
<p>The first thing you should do to start learning Prism (assuming you know WPF/Silverlight), is begin with the <a href="http://msdn.microsoft.com/en-us/library/dd458809.aspx" target="_blank">documentation</a>.  It is really clear in what it tries to explain, provides great samples and explains a lot of the common doubts when starting to develop applications with Prism. There is not a particular order to learn Prism, so you should tackle it in the way you feel comfortable. Pay special attention to the <a href="http://msdn.microsoft.com/en-us/library/dd458876.aspx" target="_blank">Technical Concepts</a> section, as it really helps understand how things come together.</p>
<table border="2" cellspacing="0" cellpadding="2" width="223" align="center">
<tbody>
<tr>
<td width="221" valign="top"><strong>Tip 1</strong>: Read the <a href="http://msdn.microsoft.com/en-us/library/dd458809.aspx" target="_blank">Prism documentation</a>.</td>
</tr>
</tbody>
</table>
<p>If while reading the documentation you have any doubts, or want to dig deeper into any particular topic you have many different options (and search queries in your favorite search engine). However, there are some things I believe you should take a look at:</p>
<ul>
<li><a href="http://compositewpf.codeplex.com/wikipage?title=Knowledge%20Base&amp;referringTitle=Home" target="_blank">Prism KB</a>. There you will find links on many different topics (you can find a picture of them below), that could be videos, sample applications or blog post which will help you better understand some of Prism concepts.</li>
<li>Watch videos. There are lots of video tutorials going around, but these two collections are particularly good. <a href="http://compositewpf.codeplex.com/wikipage?title=Learn%20Prism&amp;ProjectName=compositewpf" target="_blank">Videos from P&amp;P team</a> &amp; <a href="http://www.sparklingclient.com/prism-silverlight/" target="_blank">10 Things to Know About Silverlight Prism</a>.</li>
</ul>
<table border="2" cellspacing="0" cellpadding="2" width="416" align="center">
<tbody>
<tr>
<td width="414" valign="top"><strong>Tip 2: </strong>Use the <a href="http://compositewpf.codeplex.com/wikipage?title=Knowledge%20Base&amp;referringTitle=Home" target="_blank">Prism KB</a> and watch videos (<a href="http://compositewpf.codeplex.com/wikipage?title=Learn%20Prism&amp;ProjectName=compositewpf" target="_blank">these</a> and <a href="http://www.sparklingclient.com/prism-silverlight/" target="_blank">also these</a> particularly).</td>
</tr>
</tbody>
</table>
<h3><a href="http://blogs.southworks.net/dschenkelman/files/2009/10/image.png"><img src="http://blogs.southworks.net/dschenkelman/files/2009/10/image-thumb.png" border="0" alt="image" width="728" height="387" /></a></h3>
<p><span style="font-family: Calibri;color: #004080"><em>Prism KB site</em></span></p>
<h2>But, what if I have some doubts while learning?</h2>
<p>That is why developer communities were created, and as any other p&amp;p asset Prism has its own <a href="http://compositewpf.codeplex.com/Thread/List.aspx" target="_blank">forum</a> at Codeplex where you can ask questions about any topic (technical concepts, how do I?, etc). The forum has a really active community, and is also monitored by the p&amp;p Client Sustained Engineering Team (which we are part of). So if you have a question that has been bugging you for some time, and have not found the answer anywhere you can always drop by the forum.</p>
<table border="2" cellspacing="0" cellpadding="2" width="400" align="center">
<tbody>
<tr>
<td width="400" valign="top"><strong>Tip 3:</strong> Ask questions in the <a href="http://compositewpf.codeplex.com/Thread/List.aspx" target="_blank">Prism Codeplex forum</a>.</td>
</tr>
</tbody>
</table>
<h2>Last, but definitely not least&#8230;</h2>
<p>There are some frequent Prism bloggers that you should follow, as they have some really interesting posts about how to use Prism and its insides. Below I will provide the list of those I follow (which is probably really short in comparison to the one I should be following), and for some the most interesting/requested post in my opinion:</p>
<ul>
<li><a href="http://blogs.msdn.com/blaine/" target="_blank">Blaine&#8217;s</a>, <a href="http://blogs.msdn.com/bobbrum/">Bob</a>&#8217;s and <a href="http://blogs.msdn.com/dphill/" target="_blank">David&#8217;s</a> blogs, with the latest news about Prism future.</li>
<li><a href="http://blogs.msdn.com/erwinvandervalk/" target="_blank">Erwin&#8217;s</a> blog. He has a really interesting <a href="http://blogs.msdn.com/erwinvandervalk/archive/2009/08/12/how-do-i-do-with-the-model-view-viewmodel-pattern.aspx" target="_blank">series about working with MVVM</a>.</li>
<li><a href="http://neverindoubtnet.blogspot.com/" target="_blank">Ward Bell</a>. He has some really interesting posts, but the ones I choose are: <a href="http://neverindoubtnet.blogspot.com/2009/05/birth-and-death-of-m-v-vm-triads.html">Birth and Death of M-V-VM Triads</a> &amp; <a href="http://neverindoubtnet.blogspot.com/2009/05/prism-event-aggregator-subscription.html">Prism Event Aggregator Subscription Blues</a>.</li>
<li>Southworks blogs: <a href="http://blogs.southworks.net/jdominguez/" target="_blank">Julian</a>, <a href="http://blogs.southworks.net/ejadib/" target="_blank">Ezequiel</a>, <a href="http://blogs.southworks.net/mconverti/" target="_blank">Mariano</a>, <a href="http://blogs.southworks.net/matiasb/" target="_blank">Matias</a>. The post that is a <strong>MUST </strong>is Julian&#8217;s <a title="http://blogs.southworks.net/jdominguez/2008/08/icommand-for-silverlight-with-attached-behaviors/" href="http://blogs.southworks.net/jdominguez/2008/08/icommand-for-silverlight-with-attached-behaviors/">ICommand For Silverlight with Attached Behaviors.</a></li>
<li><a href="http://blogs.msdn.com/gblock/" target="_blank">Glenn&#8217;s</a> post: <a href="http://blogs.msdn.com/gblock/archive/2009/08/03/the-spirit-of-mvvm-viewmodel-it-s-not-a-code-counting-exercise.aspx" target="_blank">The spirit of MVVM (ViewModel), it&#8217;s not a code counting exercise</a>, as this is something we get asked a lot and I share his thoughts on this topic.</li>
</ul>
<p>As an extra, you can also follow the <a href="http://twitter.com/clientdev" target="_blank">clientdev twitter</a>, in which we tweet about the latest news about different .Net Client Development technologies (mostly Silverlight &amp; WPF) and can be really useful when learning about Prism.</p>
<table border="2" cellspacing="0" cellpadding="2" width="400" align="center">
<tbody>
<tr>
<td width="400" valign="top"><strong>Tip 4: </strong>Read tons of articles about Prism.</td>
</tr>
</tbody>
</table>
<p>I hope this article will help your Prism learning process, and please provide any feedback you might have so I can improve this guidance, like comments on the bloggers.</p>
<p><a rev="vote-for" href="http://dotnetshoutout.com/Learning-Prism-Composite-Application-Guidance-for-WPF-Silverlight-How-do-I-start"><img src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.southworks.net%2Fdschenkelman%2F2009%2F10%2F22%2Flearning-prism-composite-application-guidance-for-wpf-silverlight-how-do-i-start%2F" alt="Shout it" /></a></p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblogs.southworks.net%2fdschenkelman%2f2009%2f10%2f22%2flearning-prism-composite-application-guidance-for-wpf-silverlight-how-do-i-start%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblogs.southworks.net%2fdschenkelman%2f2009%2f10%2f22%2flearning-prism-composite-application-guidance-for-wpf-silverlight-how-do-i-start%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<img src="http://feeds.feedburner.com/~r/dschenkelman/~4/rLPX1PQMWLg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/dschenkelman/2009/10/22/learning-prism-composite-application-guidance-for-wpf-silverlight-how-do-i-start/feed/</wfw:commentRss>
		<feedburner:origLink>http://blogs.southworks.net/dschenkelman/2009/10/22/learning-prism-composite-application-guidance-for-wpf-silverlight-how-do-i-start/</feedburner:origLink></item>
	</channel>
</rss>
