<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>simplemvvmtoolkit Wiki Rss Feed</title><link>http://simplemvvmtoolkit.codeplex.com/</link><description>simplemvvmtoolkit Wiki Rss Description</description><item><title>Updated Wiki: Prerequisites</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?title=Prerequisites&amp;version=10</link><description>&lt;div class="wikidoc"&gt;
&lt;h2&gt;Prerequisites for v.3 for VS 2010&lt;/h2&gt;
&lt;p&gt;1. &lt;strong&gt;Visual Studio 2010 with Service Pack 1&lt;/strong&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Professional or Higher: &lt;a href="http://www.microsoft.com/visualstudio/en-us/download"&gt;
http://www.microsoft.com/visualstudio/en-us/download&lt;/a&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Or Express: &lt;a href="http://www.microsoft.com/express/Download"&gt;
http://www.microsoft.com/express/Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. &lt;strong&gt;Silverlight 4 Tools&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. &lt;strong&gt;Silverlight&amp;nbsp;5 Tools for VS 2010 SP1&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=28358"&gt;http://www.microsoft.com/download/en/details.aspx?id=28358&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. &lt;strong&gt;Silverlight 4 Toolkit&lt;/strong&gt; (April 2010) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://silverlight.codeplex.com/releases/view/43528" href="http://silverlight.codeplex.com/releases/view/43528"&gt;
http://silverlight.codeplex.com/releases/view/43528&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5. &lt;strong&gt;Silverlight&amp;nbsp;5 Toolkit&lt;/strong&gt; (December 2011) &lt;br&gt;
&lt;a href="http://silverlight.codeplex.com/releases/view/78435"&gt;http://silverlight.codeplex.com/releases/view/78435&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. &lt;strong&gt;Expression Blend 4 SDK&lt;/strong&gt; (or Expression Blend 4 complete) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SL4: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;amp;displaylang=en&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; WPF: &lt;a title="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7.&amp;nbsp;&lt;strong&gt;Expression Blend Preview for Silverlight 5&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=22feb67c-4f65-4ced-97cf-5f8ada296445&amp;displaylang=en"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=22feb67c-4f65-4ced-97cf-5f8ada296445&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;8. &lt;strong&gt;Windows Phone&amp;nbsp;SDK 7.1&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=27570"&gt;
http://www.microsoft.com/download/en/details.aspx?id=27570&lt;br&gt;
&lt;/a&gt;&amp;nbsp; &amp;nbsp; If installing on Windows 8, see this &lt;a href="http://blogs.msdn.com/b/astebner/archive/2012/02/29/10274694.aspx"&gt;
post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;9. &lt;strong&gt;.NET Framework 4.5&lt;/strong&gt;&amp;nbsp;(required for installer)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=30653"&gt;
http://www.microsoft.com/en-us/download/details.aspx?id=30653&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10. For Samples: &lt;strong&gt;SQL Server 2008 Express&lt;/strong&gt; (database with management tools)
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/express/Database/InstallOptions.aspx"&gt;
http://www.microsoft.com/express/Database/InstallOptions.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11. For Samples: &lt;strong&gt;Northwind Sample Database&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;amp;displaylang=en&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - Make sure to attach the Northwind database to the SQLExpress instance&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tonysneed</author><pubDate>Thu, 28 Feb 2013 13:28:52 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Prerequisites 20130228012852P</guid></item><item><title>Updated Wiki: Prerequisites</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?title=Prerequisites&amp;version=9</link><description>&lt;div class="wikidoc"&gt;
&lt;h2&gt;Prerequisites for v.3 for VS 2010&lt;/h2&gt;
&lt;p&gt;1. &lt;strong&gt;Visual Studio 2010 with Service Pack 1&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Professional or Higher: &lt;a href="http://www.microsoft.com/visualstudio/en-us/download"&gt;
http://www.microsoft.com/visualstudio/en-us/download&lt;/a&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Or Express: &lt;a href="http://www.microsoft.com/express/Download"&gt;
http://www.microsoft.com/express/Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. &lt;strong&gt;Silverlight 4 Tools&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. &lt;strong&gt;Silverlight&amp;nbsp;5 Tools for VS 2010 SP1&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=28358"&gt;http://www.microsoft.com/download/en/details.aspx?id=28358&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. &lt;strong&gt;Silverlight 4 Toolkit&lt;/strong&gt; (April 2010) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://silverlight.codeplex.com/releases/view/43528" href="http://silverlight.codeplex.com/releases/view/43528"&gt;
http://silverlight.codeplex.com/releases/view/43528&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5. &lt;strong&gt;Silverlight&amp;nbsp;5 Toolkit&lt;/strong&gt; (December 2011) &lt;br&gt;
&lt;a href="http://silverlight.codeplex.com/releases/view/78435"&gt;http://silverlight.codeplex.com/releases/view/78435&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. &lt;strong&gt;Expression Blend 4 SDK&lt;/strong&gt; (or Expression Blend 4 complete) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SL4: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;amp;displaylang=en&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; WPF: &lt;a title="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7.&amp;nbsp;&lt;strong&gt;Expression Blend Preview for Silverlight 5&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=22feb67c-4f65-4ced-97cf-5f8ada296445&amp;displaylang=en"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=22feb67c-4f65-4ced-97cf-5f8ada296445&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;8. &lt;strong&gt;Windows Phone&amp;nbsp;SDK 7.1&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=27570"&gt;
http://www.microsoft.com/download/en/details.aspx?id=27570&lt;br&gt;
&lt;/a&gt;&amp;nbsp; &amp;nbsp; If installing on Windows 8, see this &lt;a href="http://blogs.msdn.com/b/astebner/archive/2012/02/29/10274694.aspx"&gt;
post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;9. &lt;strong&gt;WCF RIA Services V1.0 SP1 for Silverlight 4&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=330F6831-5B90-4315-B042-96127A4A7EFC&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=330F6831-5B90-4315-B042-96127A4A7EFC&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10. For Samples: &lt;strong&gt;SQL Server 2008 Express&lt;/strong&gt; (database with management tools)
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/express/Database/InstallOptions.aspx"&gt;
http://www.microsoft.com/express/Database/InstallOptions.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11. For Samples: &lt;strong&gt;Northwind Sample Database&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;amp;displaylang=en&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - Make sure to attach the Northwind database to the SQLExpress instance&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tonysneed</author><pubDate>Thu, 28 Feb 2013 12:27:24 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Prerequisites 20130228122724P</guid></item><item><title>Updated Wiki: Prerequisites</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?title=Prerequisites&amp;version=8</link><description>&lt;div class="wikidoc"&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;1. &lt;strong&gt;Visual Studio 2010 with Service Pack 1&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Professional or Higher: &lt;a href="http://www.microsoft.com/visualstudio/en-us/download"&gt;
http://www.microsoft.com/visualstudio/en-us/download&lt;/a&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Or Express: &lt;a href="http://www.microsoft.com/express/Download"&gt;
http://www.microsoft.com/express/Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. &lt;strong&gt;Silverlight 4 Tools&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. &lt;strong&gt;Silverlight&amp;nbsp;5 Tools for VS 2010 SP1&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=28358"&gt;http://www.microsoft.com/download/en/details.aspx?id=28358&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. &lt;strong&gt;Silverlight 4 Toolkit&lt;/strong&gt; (April 2010) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://silverlight.codeplex.com/releases/view/43528" href="http://silverlight.codeplex.com/releases/view/43528"&gt;
http://silverlight.codeplex.com/releases/view/43528&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5. &lt;strong&gt;Silverlight&amp;nbsp;5 Toolkit&lt;/strong&gt; (December 2011) &lt;br&gt;
&lt;a href="http://silverlight.codeplex.com/releases/view/78435"&gt;http://silverlight.codeplex.com/releases/view/78435&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. &lt;strong&gt;Expression Blend 4 SDK&lt;/strong&gt; (or Expression Blend 4 complete) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SL4: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;amp;displaylang=en&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; WPF: &lt;a title="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7.&amp;nbsp;&lt;strong&gt;Expression Blend Preview for Silverlight 5&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=22feb67c-4f65-4ced-97cf-5f8ada296445&amp;displaylang=en"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=22feb67c-4f65-4ced-97cf-5f8ada296445&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;8. &lt;strong&gt;Windows Phone&amp;nbsp;SDK 7.1&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=27570"&gt;
http://www.microsoft.com/download/en/details.aspx?id=27570&lt;br&gt;
&lt;/a&gt;&amp;nbsp; &amp;nbsp; If installing on Windows 8, see this &lt;a href="http://blogs.msdn.com/b/astebner/archive/2012/02/29/10274694.aspx"&gt;
post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;9. &lt;strong&gt;WCF RIA Services V1.0 SP1 for Silverlight 4&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=330F6831-5B90-4315-B042-96127A4A7EFC&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=330F6831-5B90-4315-B042-96127A4A7EFC&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10. For Samples: &lt;strong&gt;SQL Server 2008 Express&lt;/strong&gt; (database with management tools)
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/express/Database/InstallOptions.aspx"&gt;
http://www.microsoft.com/express/Database/InstallOptions.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11. For Samples: &lt;strong&gt;Northwind Sample Database&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;amp;displaylang=en&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - Make sure to attach the Northwind database to the SQLExpress instance&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tonysneed</author><pubDate>Thu, 28 Feb 2013 12:26:38 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Prerequisites 20130228122638P</guid></item><item><title>Updated Wiki: Home</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?version=37</link><description>&lt;div class="wikidoc"&gt;
&lt;h2&gt;Project Description&lt;/h2&gt;
&lt;p&gt;Simple MVVM Toolkit makes it easier to develop Silverlight, WPF and WP7 applications using the
&lt;em&gt;Model-View-ViewModel &lt;/em&gt;design pattern. The purpose of the toolkit is to provide a simple framework and set of tools for getting up to speed quickly with applications based on the MVVM design pattern. The emphasis is on
&lt;strong&gt;simplicity&lt;/strong&gt;, but it contains everything you need to implement MVVM for real-world line of business applications.&lt;/p&gt;
&lt;h2&gt;What&amp;rsquo;s Hot&lt;/h2&gt;
&lt;p&gt;Simple MVVM Toolkit v4&amp;nbsp;now supports &lt;strong&gt;Visual Studio 2012&lt;/strong&gt;!&amp;nbsp;Use v4 to develop SL5 (including Ria Services) and WPF 4.5 apps.&amp;nbsp; If you are still using Visual Studio 2010, which is required for Windows Phone 7 apps, then install
 Simple MVVM Toolkit v3.&lt;/p&gt;
&lt;p&gt;All &lt;em&gt;assemblies are now signed&lt;/em&gt;, which means you can reference them from other signed assemblies. Several bugs have been fixed in both v3.1 and v4.0.&amp;nbsp; See the download details for a list of issues addressed.&lt;/p&gt;
&lt;p&gt;Simple MVVM Toolkit v4 for Visual Studio 2012 is built using &lt;em&gt;Portable Class Library&lt;/em&gt; tools, so that it will be easier to add support for other platforms.&amp;nbsp; Support for Windows 8/WinRT, as well as Windows Phone 8, will be added in a subsequent
 release.&lt;/p&gt;
&lt;p&gt;I have also updated all the NuGet packages for SimpleMvvmToolkit to version 3.1.0.0 for SL4, SL5, WP7 and WPF4 (VS 2010), and I uploaded a new NuGet package for WFP 4.5 (VS 2012). &amp;nbsp;But keep in mind these NuGet packages only contain the DLLs -- to get
 the code snippets and item and project templates, you only need to download and run the installer.&lt;/p&gt;
&lt;h4&gt;Take a look at the &lt;span style="color:#ff0000"&gt;Getting Started screencast&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;You can &lt;a href="http://www.screencast.com/t/2zU5iwr5IbN" target="_blank"&gt;watch it now&lt;/a&gt; or
&lt;a href="http://s3.amazonaws.com/simplemvvmscreencasts/gettingstarted.mp4"&gt;download&lt;/a&gt; the screencast to watch it offline on your pc or mobile device.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.screencast.com/t/2zU5iwr5IbN"&gt;&lt;img title="gs-screencast" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=230234" border="0" alt="gs-screencast" width="604" height="359" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;View the &lt;span style="color:#ff0000"&gt;Real-World MVVM with RIA Services &lt;/span&gt;
Screencast: &lt;br&gt;
&lt;strong&gt;Real-World MVVM Part 1&lt;/strong&gt;:&amp;nbsp; &lt;a href="http://www.screencast.com/t/bwIQtWtVhu"&gt;
Streaming&lt;/a&gt; or &lt;a href="http://simplemvvmscreencasts.s3.amazonaws.com/mvvm-riaservices-part1.mp4"&gt;
Download&lt;/a&gt; (PC or mobile device) &lt;br&gt;
&lt;strong&gt;Real-World MVVM Part 2&lt;/strong&gt;:&amp;nbsp; &lt;a href="http://www.screencast.com/t/hUMVdlCxu"&gt;
Streaming&lt;/a&gt; or &lt;a href="http://simplemvvmscreencasts.s3.amazonaws.com/mvvm-riaservices-part2.mp4"&gt;
Download&lt;/a&gt; (PC or mobile device)&lt;/h4&gt;
&lt;h4&gt;Simple MVVM Toolkit can be downloaded from within Visual Studio by selecting the Tools menu,
&lt;span style="color:#ff0000"&gt;Extension Manager&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;&lt;img title="smvvm-vsext" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229239" border="0" alt="smvvm-vsext" width="600" height="390" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h4&gt;Simple MVVM Toolkit now has an &lt;span style="color:#ff0000"&gt;installer&lt;/span&gt;!&amp;nbsp; Just
&lt;a href="http://simplemvvmtoolkit.codeplex.com/releases"&gt;download&lt;/a&gt; and run it.&lt;/h4&gt;
&lt;p&gt;&lt;img title="SimpleMvvmInstaller" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229240" border="0" alt="SimpleMvvmInstaller" width="600" height="220" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h4&gt;Simple MVVM Toolkit has some awesome Visual Studio &lt;span style="color:#ff0000"&gt;
project templates&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;&lt;img title="mvvm-proj-sl4" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229241" border="0" alt="mvvm-proj-sl4" width="600" height="390" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;From within Visual Studio, select File, New Project, then click on the Mvvm category under either Windows (for WPF), Silverlight, or Silverlight for Windows Phone.&amp;nbsp; After clicking OK you get a complete project with a folder structure and a ready-made
 MVVM app.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-sl" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229242" border="0" alt="smvvm-sl" width="274" height="342" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;Here is what you get from the Silverlight project template.&amp;nbsp; Just follow the instructions in ReadMe.txt.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-ria" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229243" border="0" alt="smvvm-ria" width="274" height="557" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;Here is what you get from the RiaServices template.&amp;nbsp; Just hit F5 and you&amp;rsquo;ll see a fully functional MVVM Silverlight app that uses WCF RIA Services.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-riarun" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229244" border="0" alt="smvvm-riarun" width="600" height="462" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;The kicker is that you also get a Test project that uses the Microsoft Silverlight Testing Framework.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-testrun" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229245" border="0" alt="smvvm-testrun" width="600" height="462" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h2&gt;Features&lt;/h2&gt;
&lt;p&gt;&lt;span style="text-decoration:underline"&gt;New Features in v2&lt;/span&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;Installer &lt;/strong&gt;that places the binaries, templates and snippets in all the right places.
&lt;ul&gt;
&lt;li&gt;Copies binaries, libraries, &lt;strong&gt;samples and source code &lt;/strong&gt;to one location
&lt;/li&gt;&lt;li&gt;Copies Visual Studio &lt;strong&gt;templates and code snippets &lt;/strong&gt;to the correction location
&lt;/li&gt;&lt;li&gt;Registers the binaries so that SimpleMvvmToolkit appears in the Visual Studio
&lt;strong&gt;Add References &lt;/strong&gt;dialog. &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Visual Studio &lt;strong&gt;project templates&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Project templates for Silverlight, Windows Phone and WPF, which include starter Locator, Model, ViewModel, View and ServiceAgent classes.
&lt;/li&gt;&lt;li&gt;A multi-project Visual Studio template that includes a Silverlight client, a Silverlight Unit Test project and a WCF RIA Services project.
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;The &lt;strong&gt;main sample &lt;/strong&gt;now has Parts 2 and 3
&lt;ul&gt;
&lt;li&gt;Part 2 demonstrates navigation, messaging, property associations, async &lt;/li&gt;&lt;li&gt;Part 3 demonstrates using the toolkit with WCF RIA Services, including persistence with CRUD operations
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Simplified and consolidated &lt;strong&gt;ViewModelLocator&lt;/strong&gt; template which creates ViewModels on-demand.
&lt;ul&gt;
&lt;li&gt;This allows Views to control the ViewModel lifetime, avoiding potential memory leaks
&lt;/li&gt;&lt;li&gt;Silverlight and Windows Phone apps use the same ViewModelLocator template &lt;/li&gt;&lt;li&gt;The code snippet to insert injected (for dependency injection using MEF) ViewModels is more robust
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Improved support for &lt;strong&gt;unit testing &lt;/strong&gt;(with the Silverlight Unit Testing Framework &amp;ndash; included in the Silverlight Toolkit)
&lt;ul&gt;
&lt;li&gt;Includes an extension method for enqueuing&amp;nbsp; conditional tasks with a timeout
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Simpler and more robust MessageBus
&lt;ul&gt;
&lt;li&gt;Now uses leak-proof eventing model so that unregistering for messages is no longer required
&lt;/li&gt;&lt;li&gt;ViewModelBase now includes helper methods for sending and receiving messages &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;GenericDelegateCommand&lt;/strong&gt; supports parsing string parameters from XAML
&lt;ul&gt;
&lt;li&gt;Plays nicer with CommandParameter in XAML &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;span style="text-decoration:underline"&gt;Other Features&lt;/span&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for &lt;strong&gt;Silverlight&lt;/strong&gt;, &lt;strong&gt;WPF &lt;/strong&gt;and &lt;strong&gt;Windows Phone 7&lt;/strong&gt;
&lt;/li&gt;&lt;li&gt;Helper &lt;strong&gt;classes, &lt;/strong&gt;Visual Studio &lt;strong&gt;templates, code snippets&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="text-decoration:underline"&gt;Helpers&lt;/span&gt;: Model and view-model base classes, MessageBus,
&lt;br&gt;
DelegateCommand, MEF Export attribute &lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;Templates&lt;/span&gt;: View-model, detail view-model,
&lt;br&gt;
view-model locator, injected view-model locator &lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;C# Code Snippets&lt;/span&gt;: bindable property, vm locator, command
&lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;XML Code Snippets&lt;/span&gt;: Blend event-trigger
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Sample applications &lt;/strong&gt;with step-by-step instructions
&lt;ul&gt;
&lt;li&gt;End-to-end Silverlight Mvvm sample using WCF &lt;/li&gt;&lt;li&gt;Simplified &amp;ldquo;Getting Started&amp;rdquo; sample &lt;/li&gt;&lt;li&gt;Associated properties sample &lt;/li&gt;&lt;li&gt;Async execution sample &lt;/li&gt;&lt;li&gt;Enum to list conversion sample &lt;/li&gt;&lt;li&gt;Message bus sample &lt;/li&gt;&lt;li&gt;Navigation sample &lt;/li&gt;&lt;li&gt;Dependency injection (MEF) with unit testing &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Model and ViewModel &lt;strong&gt;base classes&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Strongly typed &lt;strong&gt;data binding &lt;/strong&gt;with &lt;em&gt;lambda expressions&lt;/em&gt;
&lt;/li&gt;&lt;li&gt;View-model &lt;strong&gt;locator service&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;DelegateCommand &lt;/strong&gt;based on ICommand &lt;/li&gt;&lt;li&gt;&lt;strong&gt;AssociateProperties &lt;/strong&gt;method to link view-model and model properties
&lt;/li&gt;&lt;li&gt;Event-based facility for &lt;strong&gt;two-way communication &lt;/strong&gt;between views and view-models
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;MessageBus &lt;/strong&gt;for sending notifications in a &lt;em&gt;loosely coupled
&lt;/em&gt;fashion among view-models &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Dependency injection &lt;/strong&gt;(IoC) for &lt;em&gt;unit testing &lt;/em&gt;using &lt;strong&gt;
MEF &lt;/strong&gt;(Managed Extensibility Framework) &lt;/li&gt;&lt;li&gt;&lt;strong&gt;IEditableDataObject &lt;/strong&gt;support with deep cloning &lt;/li&gt;&lt;li&gt;Conversion of &lt;strong&gt;enums &lt;/strong&gt;to lists for populating combo boxes &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Async support &lt;/strong&gt;with transparent marshaling to the UI thread &lt;/li&gt;&lt;li&gt;Built-in support for &lt;strong&gt;WCF RIA Services&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;h2&gt;What You Get&lt;/h2&gt;
&lt;p&gt;The toolkit consists of a set of &lt;strong&gt;helper classes&lt;/strong&gt;, some Visual Studio
&lt;strong&gt;templates&lt;/strong&gt;, and a set of &lt;strong&gt;code snippets&lt;/strong&gt;. All you have to do is reference the helper assembly (or include the Visual Studio project in your solution), add view-models using the Visual Studio item templates, and insert properties
 using the included mvvmprop code snippet. The view-models extend a base class that supplies two-way data binding. There is also an item template for a detail-based view model that extends a base class with editing capability (via IEditableDataObject). You
 can also add a view-model locator using the corresponding item template and code snippet.&lt;/p&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;The best way to get started is to open the Getting Started sample in Samples\SimpleMvvm-Other and follow instructions in the
&lt;a href="http://simplemvvmtoolkit.codeplex.com/wikipage?title=Getting%20Started"&gt;
Getting Started&lt;/a&gt; section of the online &lt;a href="http://simplemvvmtoolkit.codeplex.com/documentation"&gt;
Documentation&lt;/a&gt; for creating a Silverlight MVVM application from scratch using the toolkit.&lt;/p&gt;
&lt;p&gt;After creating your first app, you&amp;rsquo;re ready to explore the main sample app.&amp;nbsp; Open up Before and After versions of the sample application included in the downloaded zip file. There is a ReadMe.txt file with detailed step-by-step instructions. The
 Before solution is an n-tier application that retrieves products and categories from the Northwind sample database using a basic WCF service. (In case you'd like to reproduce the Before project, there is a text file describing how to do that.)&lt;/p&gt;
&lt;p&gt;Next you can check out samples for async execution, associated properties, enum to list conversion, notifications using the Message Bus, using view-model driven navigation, and dependency injection with unit testing.&lt;/p&gt;
&lt;h2&gt;About the Author&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.codeplex.com/site/users/view/tonysneed"&gt;Tony Sneed&lt;/a&gt;
&lt;/strong&gt;is an instructor for the developer training company, &lt;a href="http://www.develop.com/"&gt;
DevelopMentor&lt;/a&gt;, where he authors and teaches courses on &lt;a href="http://www.develop.com/training-course/new-net-3-net-3.5-linq"&gt;
.NET 3.5-4.0&lt;/a&gt;, &lt;a href="http://www.develop.com/training-course/entity-framework-4.0"&gt;
Entity Framework&lt;/a&gt;, Windows Communication Foundation and Silverlight.&amp;nbsp; He has a keen interest in MVVM, Managed Extensibility Framework, and WCF RIA Services.&amp;nbsp; You can read his
&lt;a href="http://blog.tonysneed.com/"&gt;blog&lt;/a&gt; or follow him on &lt;a href="http://twitter.com/tonysneed"&gt;
Twitter&lt;/a&gt; and &lt;a href="http://www.facebook.com/anthony.sneed"&gt;Facebook&lt;/a&gt;, where he has created a
&lt;a href="http://www.facebook.com/home.php?sk=group_181987988497920"&gt;group&lt;/a&gt; for people using MVVM to design Silverlight applications.&amp;nbsp; He is a frequent speaker at
&lt;a href="http://ddnug.net/"&gt;user groups&lt;/a&gt; and conferences and has written articles for
&lt;a href="http://msdn.microsoft.com/en-us/magazine/dd263098.aspx"&gt;MSDN Magazine&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What's Next?&lt;/h2&gt;
&lt;p&gt;I plan to put out additional blog posts and a series of screen casts on using the Simple MVVM Toolkit and exploring different features.&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tonysneed</author><pubDate>Thu, 08 Nov 2012 16:05:44 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20121108040544P</guid></item><item><title>Updated Wiki: Home</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?version=36</link><description>&lt;div class="wikidoc"&gt;
&lt;h2&gt;Project Description&lt;/h2&gt;
&lt;p&gt;Simple MVVM Toolkit makes it easier to develop Silverlight, WPF and WP7 applications using the
&lt;em&gt;Model-View-ViewModel &lt;/em&gt;design pattern. The purpose of the toolkit is to provide a simple framework and set of tools for getting up to speed quickly with applications based on the MVVM design pattern. The emphasis is on
&lt;strong&gt;simplicity&lt;/strong&gt;, but it contains everything you need to implement MVVM for real-world line of business applications.&lt;/p&gt;
&lt;h2&gt;What&amp;rsquo;s Hot&lt;/h2&gt;
&lt;p&gt;Simple MVVM Toolkit v4&amp;nbsp;now supports &lt;strong&gt;Visual Studio 2012&lt;/strong&gt;!&amp;nbsp;Use v4 to develop SL5 (including Ria Services) and WPF 4.5 apps.&amp;nbsp; If you are still using Visual Studio 2010, which is required for Windows Phone 7 apps, then install
 Simple MVVM Toolkit v3.&lt;/p&gt;
&lt;p&gt;All &lt;em&gt;assemblies are now signed&lt;/em&gt;, which means you can reference them from other signed assemblies. Several bugs have been fixed in both v3.1 and v4.0.&amp;nbsp; See the download details for a list of issues addressed.&lt;/p&gt;
&lt;p&gt;Simple MVVM Toolkit v4 for Visual Studio 2012 is built using &lt;em&gt;Portable Class Library&lt;/em&gt; tools, so that it will be easier to add support for other platforms.&amp;nbsp; Support for Windows 8/WinRT, as well as Windows Phone 8, will be added in a subsequent
 release.&lt;/p&gt;
&lt;p&gt;I have also updated all the NuGet packages for SimpleMvvmToolkit to version 3.1.0.0 for SL4, SL5, WP7 and WPF4 (VS 2010), and I uploaded a new NuGet package for WFP 4.5 (VS 2012). &amp;nbsp;But keep in mind these NuGet packages only contain the DLLs -- to get
 the code snippets and item and project templates, you only need to download and run the installer.&lt;/p&gt;
&lt;h4&gt;Take a look at the &lt;span style="color:#ff0000"&gt;Getting Started screencast&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;You can &lt;a href="http://www.screencast.com/t/2zU5iwr5IbN" target="_blank"&gt;watch it now&lt;/a&gt; or
&lt;a href="http://s3.amazonaws.com/simplemvvmscreencasts/gettingstarted.mp4"&gt;download&lt;/a&gt; the screencast to watch it offline on your pc or mobile device.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.screencast.com/t/2zU5iwr5IbN"&gt;&lt;img title="gs-screencast" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=230234" border="0" alt="gs-screencast" width="604" height="359" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;View the &lt;span style="color:#ff0000"&gt;Real-World MVVM with RIA Services &lt;/span&gt;
Screencast: &lt;br&gt;
&lt;strong&gt;Real-World MVVM Part 1&lt;/strong&gt;:&amp;nbsp; &lt;a href="http://www.screencast.com/t/bwIQtWtVhu"&gt;
Streaming&lt;/a&gt; or &lt;a href="http://simplemvvmscreencasts.s3.amazonaws.com/mvvm-riaservices-part1.mp4"&gt;
Download&lt;/a&gt; (PC or mobile device) &lt;br&gt;
&lt;strong&gt;Real-World MVVM Part 2&lt;/strong&gt;:&amp;nbsp; &lt;a href="http://www.screencast.com/t/hUMVdlCxu"&gt;
Streaming&lt;/a&gt; or &lt;a href="http://simplemvvmscreencasts.s3.amazonaws.com/mvvm-riaservices-part2.mp4"&gt;
Download&lt;/a&gt; (PC or mobile device)&lt;/h4&gt;
&lt;h4&gt;Simple MVVM Toolkit can be downloaded from within Visual Studio by selecting the Tools menu,
&lt;span style="color:#ff0000"&gt;Extension Manager&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;&lt;img title="smvvm-vsext" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229239" border="0" alt="smvvm-vsext" width="600" height="390" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h4&gt;Simple MVVM Toolkit now has an &lt;span style="color:#ff0000"&gt;installer&lt;/span&gt;!&amp;nbsp; Just
&lt;a href="http://simplemvvmtoolkit.codeplex.com/releases/view/64265"&gt;download&lt;/a&gt; and run it.&lt;/h4&gt;
&lt;p&gt;&lt;img title="SimpleMvvmInstaller" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229240" border="0" alt="SimpleMvvmInstaller" width="600" height="220" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h4&gt;Simple MVVM Toolkit has some awesome Visual Studio &lt;span style="color:#ff0000"&gt;
project templates&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;&lt;img title="mvvm-proj-sl4" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229241" border="0" alt="mvvm-proj-sl4" width="600" height="390" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;From within Visual Studio, select File, New Project, then click on the Mvvm category under either Windows (for WPF), Silverlight, or Silverlight for Windows Phone.&amp;nbsp; After clicking OK you get a complete project with a folder structure and a ready-made
 MVVM app.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-sl" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229242" border="0" alt="smvvm-sl" width="274" height="342" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;Here is what you get from the Silverlight project template.&amp;nbsp; Just follow the instructions in ReadMe.txt.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-ria" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229243" border="0" alt="smvvm-ria" width="274" height="557" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;Here is what you get from the RiaServices template.&amp;nbsp; Just hit F5 and you&amp;rsquo;ll see a fully functional MVVM Silverlight app that uses WCF RIA Services.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-riarun" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229244" border="0" alt="smvvm-riarun" width="600" height="462" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;The kicker is that you also get a Test project that uses the Microsoft Silverlight Testing Framework.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-testrun" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229245" border="0" alt="smvvm-testrun" width="600" height="462" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h2&gt;Features&lt;/h2&gt;
&lt;p&gt;&lt;span style="text-decoration:underline"&gt;New Features in v2&lt;/span&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;Installer &lt;/strong&gt;that places the binaries, templates and snippets in all the right places.
&lt;ul&gt;
&lt;li&gt;Copies binaries, libraries, &lt;strong&gt;samples and source code &lt;/strong&gt;to one location
&lt;/li&gt;&lt;li&gt;Copies Visual Studio &lt;strong&gt;templates and code snippets &lt;/strong&gt;to the correction location
&lt;/li&gt;&lt;li&gt;Registers the binaries so that SimpleMvvmToolkit appears in the Visual Studio
&lt;strong&gt;Add References &lt;/strong&gt;dialog. &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Visual Studio &lt;strong&gt;project templates&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Project templates for Silverlight, Windows Phone and WPF, which include starter Locator, Model, ViewModel, View and ServiceAgent classes.
&lt;/li&gt;&lt;li&gt;A multi-project Visual Studio template that includes a Silverlight client, a Silverlight Unit Test project and a WCF RIA Services project.
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;The &lt;strong&gt;main sample &lt;/strong&gt;now has Parts 2 and 3
&lt;ul&gt;
&lt;li&gt;Part 2 demonstrates navigation, messaging, property associations, async &lt;/li&gt;&lt;li&gt;Part 3 demonstrates using the toolkit with WCF RIA Services, including persistence with CRUD operations
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Simplified and consolidated &lt;strong&gt;ViewModelLocator&lt;/strong&gt; template which creates ViewModels on-demand.
&lt;ul&gt;
&lt;li&gt;This allows Views to control the ViewModel lifetime, avoiding potential memory leaks
&lt;/li&gt;&lt;li&gt;Silverlight and Windows Phone apps use the same ViewModelLocator template &lt;/li&gt;&lt;li&gt;The code snippet to insert injected (for dependency injection using MEF) ViewModels is more robust
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Improved support for &lt;strong&gt;unit testing &lt;/strong&gt;(with the Silverlight Unit Testing Framework &amp;ndash; included in the Silverlight Toolkit)
&lt;ul&gt;
&lt;li&gt;Includes an extension method for enqueuing&amp;nbsp; conditional tasks with a timeout
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Simpler and more robust MessageBus
&lt;ul&gt;
&lt;li&gt;Now uses leak-proof eventing model so that unregistering for messages is no longer required
&lt;/li&gt;&lt;li&gt;ViewModelBase now includes helper methods for sending and receiving messages &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;GenericDelegateCommand&lt;/strong&gt; supports parsing string parameters from XAML
&lt;ul&gt;
&lt;li&gt;Plays nicer with CommandParameter in XAML &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;span style="text-decoration:underline"&gt;Other Features&lt;/span&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for &lt;strong&gt;Silverlight&lt;/strong&gt;, &lt;strong&gt;WPF &lt;/strong&gt;and &lt;strong&gt;Windows Phone 7&lt;/strong&gt;
&lt;/li&gt;&lt;li&gt;Helper &lt;strong&gt;classes, &lt;/strong&gt;Visual Studio &lt;strong&gt;templates, code snippets&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="text-decoration:underline"&gt;Helpers&lt;/span&gt;: Model and view-model base classes, MessageBus,
&lt;br&gt;
DelegateCommand, MEF Export attribute &lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;Templates&lt;/span&gt;: View-model, detail view-model,
&lt;br&gt;
view-model locator, injected view-model locator &lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;C# Code Snippets&lt;/span&gt;: bindable property, vm locator, command
&lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;XML Code Snippets&lt;/span&gt;: Blend event-trigger
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Sample applications &lt;/strong&gt;with step-by-step instructions
&lt;ul&gt;
&lt;li&gt;End-to-end Silverlight Mvvm sample using WCF &lt;/li&gt;&lt;li&gt;Simplified &amp;ldquo;Getting Started&amp;rdquo; sample &lt;/li&gt;&lt;li&gt;Associated properties sample &lt;/li&gt;&lt;li&gt;Async execution sample &lt;/li&gt;&lt;li&gt;Enum to list conversion sample &lt;/li&gt;&lt;li&gt;Message bus sample &lt;/li&gt;&lt;li&gt;Navigation sample &lt;/li&gt;&lt;li&gt;Dependency injection (MEF) with unit testing &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Model and ViewModel &lt;strong&gt;base classes&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Strongly typed &lt;strong&gt;data binding &lt;/strong&gt;with &lt;em&gt;lambda expressions&lt;/em&gt;
&lt;/li&gt;&lt;li&gt;View-model &lt;strong&gt;locator service&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;DelegateCommand &lt;/strong&gt;based on ICommand &lt;/li&gt;&lt;li&gt;&lt;strong&gt;AssociateProperties &lt;/strong&gt;method to link view-model and model properties
&lt;/li&gt;&lt;li&gt;Event-based facility for &lt;strong&gt;two-way communication &lt;/strong&gt;between views and view-models
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;MessageBus &lt;/strong&gt;for sending notifications in a &lt;em&gt;loosely coupled
&lt;/em&gt;fashion among view-models &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Dependency injection &lt;/strong&gt;(IoC) for &lt;em&gt;unit testing &lt;/em&gt;using &lt;strong&gt;
MEF &lt;/strong&gt;(Managed Extensibility Framework) &lt;/li&gt;&lt;li&gt;&lt;strong&gt;IEditableDataObject &lt;/strong&gt;support with deep cloning &lt;/li&gt;&lt;li&gt;Conversion of &lt;strong&gt;enums &lt;/strong&gt;to lists for populating combo boxes &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Async support &lt;/strong&gt;with transparent marshaling to the UI thread &lt;/li&gt;&lt;li&gt;Built-in support for &lt;strong&gt;WCF RIA Services&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;h2&gt;What You Get&lt;/h2&gt;
&lt;p&gt;The toolkit consists of a set of &lt;strong&gt;helper classes&lt;/strong&gt;, some Visual Studio
&lt;strong&gt;templates&lt;/strong&gt;, and a set of &lt;strong&gt;code snippets&lt;/strong&gt;. All you have to do is reference the helper assembly (or include the Visual Studio project in your solution), add view-models using the Visual Studio item templates, and insert properties
 using the included mvvmprop code snippet. The view-models extend a base class that supplies two-way data binding. There is also an item template for a detail-based view model that extends a base class with editing capability (via IEditableDataObject). You
 can also add a view-model locator using the corresponding item template and code snippet.&lt;/p&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;The best way to get started is to open the Getting Started sample in Samples\SimpleMvvm-Other and follow instructions in the
&lt;a href="http://simplemvvmtoolkit.codeplex.com/wikipage?title=Getting%20Started"&gt;
Getting Started&lt;/a&gt; section of the online &lt;a href="http://simplemvvmtoolkit.codeplex.com/documentation"&gt;
Documentation&lt;/a&gt; for creating a Silverlight MVVM application from scratch using the toolkit.&lt;/p&gt;
&lt;p&gt;After creating your first app, you&amp;rsquo;re ready to explore the main sample app.&amp;nbsp; Open up Before and After versions of the sample application included in the downloaded zip file. There is a ReadMe.txt file with detailed step-by-step instructions. The
 Before solution is an n-tier application that retrieves products and categories from the Northwind sample database using a basic WCF service. (In case you'd like to reproduce the Before project, there is a text file describing how to do that.)&lt;/p&gt;
&lt;p&gt;Next you can check out samples for async execution, associated properties, enum to list conversion, notifications using the Message Bus, using view-model driven navigation, and dependency injection with unit testing.&lt;/p&gt;
&lt;h2&gt;About the Author&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.codeplex.com/site/users/view/tonysneed"&gt;Tony Sneed&lt;/a&gt;
&lt;/strong&gt;is an instructor for the developer training company, &lt;a href="http://www.develop.com/"&gt;
DevelopMentor&lt;/a&gt;, where he authors and teaches courses on &lt;a href="http://www.develop.com/training-course/new-net-3-net-3.5-linq"&gt;
.NET 3.5-4.0&lt;/a&gt;, &lt;a href="http://www.develop.com/training-course/entity-framework-4.0"&gt;
Entity Framework&lt;/a&gt;, Windows Communication Foundation and Silverlight.&amp;nbsp; He has a keen interest in MVVM, Managed Extensibility Framework, and WCF RIA Services.&amp;nbsp; You can read his
&lt;a href="http://blog.tonysneed.com/"&gt;blog&lt;/a&gt; or follow him on &lt;a href="http://twitter.com/tonysneed"&gt;
Twitter&lt;/a&gt; and &lt;a href="http://www.facebook.com/anthony.sneed"&gt;Facebook&lt;/a&gt;, where he has created a
&lt;a href="http://www.facebook.com/home.php?sk=group_181987988497920"&gt;group&lt;/a&gt; for people using MVVM to design Silverlight applications.&amp;nbsp; He is a frequent speaker at
&lt;a href="http://ddnug.net/"&gt;user groups&lt;/a&gt; and conferences and has written articles for
&lt;a href="http://msdn.microsoft.com/en-us/magazine/dd263098.aspx"&gt;MSDN Magazine&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What's Next?&lt;/h2&gt;
&lt;p&gt;I plan to put out additional blog posts and a series of screen casts on using the Simple MVVM Toolkit and exploring different features.&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tonysneed</author><pubDate>Sun, 04 Nov 2012 04:08:06 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20121104040806A</guid></item><item><title>Updated Wiki: Home</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?version=35</link><description>&lt;div class="wikidoc"&gt;
&lt;h2&gt;Project Description&lt;/h2&gt;
&lt;p&gt;Simple MVVM Toolkit makes it easier to develop Silverlight, WPF and WP7 applications using the
&lt;em&gt;Model-View-ViewModel &lt;/em&gt;design pattern. The purpose of the toolkit is to provide a simple framework and set of tools for getting up to speed quickly with applications based on the MVVM design pattern. The emphasis is on
&lt;strong&gt;simplicity&lt;/strong&gt;, but it contains everything you need to implement MVVM for real-world line of business applications.&lt;/p&gt;
&lt;h2&gt;What&amp;rsquo;s Hot&lt;/h2&gt;
&lt;p&gt;Simple MVVM Toolkit v4&amp;nbsp;now supports &lt;strong&gt;Visual Studio 2012&lt;/strong&gt;!&amp;nbsp;Use v4 to develop SL5 (including Ria Services) and WPF 4.5 apps.&amp;nbsp; If you are still using Visual Studio 2010, which is required for Windows Phone 7 apps, then install
 Simple MVVM Toolkit v3.&lt;/p&gt;
&lt;p&gt;All &lt;em&gt;assemblies are now signed&lt;/em&gt;, which means you can reference them from other signed assemblies. Several bugs have been fixed in both v3.1 and v4.0.&amp;nbsp; See the download details for a list of issues addressed.&lt;/p&gt;
&lt;p&gt;Simple MVVM Toolkit v4 for Visual Studio 2012 is built using &lt;em&gt;Portable Class Library&lt;/em&gt; tools, so that it will be easier to add support for other platforms.&amp;nbsp; Support for Windows 8/WinRT, as well as Windows Phone 8, will be added in a subsequent
 release.&lt;/p&gt;
&lt;h4&gt;Take a look at the &lt;span style="color:#ff0000"&gt;Getting Started screencast&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;You can &lt;a href="http://www.screencast.com/t/2zU5iwr5IbN" target="_blank"&gt;watch it now&lt;/a&gt; or
&lt;a href="http://s3.amazonaws.com/simplemvvmscreencasts/gettingstarted.mp4"&gt;download&lt;/a&gt; the screencast to watch it offline on your pc or mobile device.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.screencast.com/t/2zU5iwr5IbN"&gt;&lt;img title="gs-screencast" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=230234" border="0" alt="gs-screencast" width="604" height="359" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;View the &lt;span style="color:#ff0000"&gt;Real-World MVVM with RIA Services &lt;/span&gt;
Screencast: &lt;br&gt;
&lt;strong&gt;Real-World MVVM Part 1&lt;/strong&gt;:&amp;nbsp; &lt;a href="http://www.screencast.com/t/bwIQtWtVhu"&gt;
Streaming&lt;/a&gt; or &lt;a href="http://simplemvvmscreencasts.s3.amazonaws.com/mvvm-riaservices-part1.mp4"&gt;
Download&lt;/a&gt; (PC or mobile device) &lt;br&gt;
&lt;strong&gt;Real-World MVVM Part 2&lt;/strong&gt;:&amp;nbsp; &lt;a href="http://www.screencast.com/t/hUMVdlCxu"&gt;
Streaming&lt;/a&gt; or &lt;a href="http://simplemvvmscreencasts.s3.amazonaws.com/mvvm-riaservices-part2.mp4"&gt;
Download&lt;/a&gt; (PC or mobile device)&lt;/h4&gt;
&lt;h4&gt;Simple MVVM Toolkit can be downloaded from within Visual Studio by selecting the Tools menu,
&lt;span style="color:#ff0000"&gt;Extension Manager&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;&lt;img title="smvvm-vsext" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229239" border="0" alt="smvvm-vsext" width="600" height="390" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h4&gt;Simple MVVM Toolkit now has an &lt;span style="color:#ff0000"&gt;installer&lt;/span&gt;!&amp;nbsp; Just
&lt;a href="http://simplemvvmtoolkit.codeplex.com/releases/view/64265"&gt;download&lt;/a&gt; and run it.&lt;/h4&gt;
&lt;p&gt;&lt;img title="SimpleMvvmInstaller" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229240" border="0" alt="SimpleMvvmInstaller" width="600" height="220" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h4&gt;Simple MVVM Toolkit has some awesome Visual Studio &lt;span style="color:#ff0000"&gt;
project templates&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;&lt;img title="mvvm-proj-sl4" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229241" border="0" alt="mvvm-proj-sl4" width="600" height="390" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;From within Visual Studio, select File, New Project, then click on the Mvvm category under either Windows (for WPF), Silverlight, or Silverlight for Windows Phone.&amp;nbsp; After clicking OK you get a complete project with a folder structure and a ready-made
 MVVM app.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-sl" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229242" border="0" alt="smvvm-sl" width="274" height="342" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;Here is what you get from the Silverlight project template.&amp;nbsp; Just follow the instructions in ReadMe.txt.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-ria" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229243" border="0" alt="smvvm-ria" width="274" height="557" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;Here is what you get from the RiaServices template.&amp;nbsp; Just hit F5 and you&amp;rsquo;ll see a fully functional MVVM Silverlight app that uses WCF RIA Services.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-riarun" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229244" border="0" alt="smvvm-riarun" width="600" height="462" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;The kicker is that you also get a Test project that uses the Microsoft Silverlight Testing Framework.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-testrun" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229245" border="0" alt="smvvm-testrun" width="600" height="462" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h2&gt;Features&lt;/h2&gt;
&lt;p&gt;&lt;span style="text-decoration:underline"&gt;New Features in v2&lt;/span&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;Installer &lt;/strong&gt;that places the binaries, templates and snippets in all the right places.
&lt;ul&gt;
&lt;li&gt;Copies binaries, libraries, &lt;strong&gt;samples and source code &lt;/strong&gt;to one location
&lt;/li&gt;&lt;li&gt;Copies Visual Studio &lt;strong&gt;templates and code snippets &lt;/strong&gt;to the correction location
&lt;/li&gt;&lt;li&gt;Registers the binaries so that SimpleMvvmToolkit appears in the Visual Studio
&lt;strong&gt;Add References &lt;/strong&gt;dialog. &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Visual Studio &lt;strong&gt;project templates&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Project templates for Silverlight, Windows Phone and WPF, which include starter Locator, Model, ViewModel, View and ServiceAgent classes.
&lt;/li&gt;&lt;li&gt;A multi-project Visual Studio template that includes a Silverlight client, a Silverlight Unit Test project and a WCF RIA Services project.
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;The &lt;strong&gt;main sample &lt;/strong&gt;now has Parts 2 and 3
&lt;ul&gt;
&lt;li&gt;Part 2 demonstrates navigation, messaging, property associations, async &lt;/li&gt;&lt;li&gt;Part 3 demonstrates using the toolkit with WCF RIA Services, including persistence with CRUD operations
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Simplified and consolidated &lt;strong&gt;ViewModelLocator&lt;/strong&gt; template which creates ViewModels on-demand.
&lt;ul&gt;
&lt;li&gt;This allows Views to control the ViewModel lifetime, avoiding potential memory leaks
&lt;/li&gt;&lt;li&gt;Silverlight and Windows Phone apps use the same ViewModelLocator template &lt;/li&gt;&lt;li&gt;The code snippet to insert injected (for dependency injection using MEF) ViewModels is more robust
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Improved support for &lt;strong&gt;unit testing &lt;/strong&gt;(with the Silverlight Unit Testing Framework &amp;ndash; included in the Silverlight Toolkit)
&lt;ul&gt;
&lt;li&gt;Includes an extension method for enqueuing&amp;nbsp; conditional tasks with a timeout
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Simpler and more robust MessageBus
&lt;ul&gt;
&lt;li&gt;Now uses leak-proof eventing model so that unregistering for messages is no longer required
&lt;/li&gt;&lt;li&gt;ViewModelBase now includes helper methods for sending and receiving messages &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;GenericDelegateCommand&lt;/strong&gt; supports parsing string parameters from XAML
&lt;ul&gt;
&lt;li&gt;Plays nicer with CommandParameter in XAML &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;span style="text-decoration:underline"&gt;Other Features&lt;/span&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for &lt;strong&gt;Silverlight&lt;/strong&gt;, &lt;strong&gt;WPF &lt;/strong&gt;and &lt;strong&gt;Windows Phone 7&lt;/strong&gt;
&lt;/li&gt;&lt;li&gt;Helper &lt;strong&gt;classes, &lt;/strong&gt;Visual Studio &lt;strong&gt;templates, code snippets&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="text-decoration:underline"&gt;Helpers&lt;/span&gt;: Model and view-model base classes, MessageBus,
&lt;br&gt;
DelegateCommand, MEF Export attribute &lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;Templates&lt;/span&gt;: View-model, detail view-model,
&lt;br&gt;
view-model locator, injected view-model locator &lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;C# Code Snippets&lt;/span&gt;: bindable property, vm locator, command
&lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;XML Code Snippets&lt;/span&gt;: Blend event-trigger
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Sample applications &lt;/strong&gt;with step-by-step instructions
&lt;ul&gt;
&lt;li&gt;End-to-end Silverlight Mvvm sample using WCF &lt;/li&gt;&lt;li&gt;Simplified &amp;ldquo;Getting Started&amp;rdquo; sample &lt;/li&gt;&lt;li&gt;Associated properties sample &lt;/li&gt;&lt;li&gt;Async execution sample &lt;/li&gt;&lt;li&gt;Enum to list conversion sample &lt;/li&gt;&lt;li&gt;Message bus sample &lt;/li&gt;&lt;li&gt;Navigation sample &lt;/li&gt;&lt;li&gt;Dependency injection (MEF) with unit testing &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Model and ViewModel &lt;strong&gt;base classes&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Strongly typed &lt;strong&gt;data binding &lt;/strong&gt;with &lt;em&gt;lambda expressions&lt;/em&gt;
&lt;/li&gt;&lt;li&gt;View-model &lt;strong&gt;locator service&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;DelegateCommand &lt;/strong&gt;based on ICommand &lt;/li&gt;&lt;li&gt;&lt;strong&gt;AssociateProperties &lt;/strong&gt;method to link view-model and model properties
&lt;/li&gt;&lt;li&gt;Event-based facility for &lt;strong&gt;two-way communication &lt;/strong&gt;between views and view-models
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;MessageBus &lt;/strong&gt;for sending notifications in a &lt;em&gt;loosely coupled
&lt;/em&gt;fashion among view-models &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Dependency injection &lt;/strong&gt;(IoC) for &lt;em&gt;unit testing &lt;/em&gt;using &lt;strong&gt;
MEF &lt;/strong&gt;(Managed Extensibility Framework) &lt;/li&gt;&lt;li&gt;&lt;strong&gt;IEditableDataObject &lt;/strong&gt;support with deep cloning &lt;/li&gt;&lt;li&gt;Conversion of &lt;strong&gt;enums &lt;/strong&gt;to lists for populating combo boxes &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Async support &lt;/strong&gt;with transparent marshaling to the UI thread &lt;/li&gt;&lt;li&gt;Built-in support for &lt;strong&gt;WCF RIA Services&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;h2&gt;What You Get&lt;/h2&gt;
&lt;p&gt;The toolkit consists of a set of &lt;strong&gt;helper classes&lt;/strong&gt;, some Visual Studio
&lt;strong&gt;templates&lt;/strong&gt;, and a set of &lt;strong&gt;code snippets&lt;/strong&gt;. All you have to do is reference the helper assembly (or include the Visual Studio project in your solution), add view-models using the Visual Studio item templates, and insert properties
 using the included mvvmprop code snippet. The view-models extend a base class that supplies two-way data binding. There is also an item template for a detail-based view model that extends a base class with editing capability (via IEditableDataObject). You
 can also add a view-model locator using the corresponding item template and code snippet.&lt;/p&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;The best way to get started is to open the Getting Started sample in Samples\SimpleMvvm-Other and follow instructions in the
&lt;a href="http://simplemvvmtoolkit.codeplex.com/wikipage?title=Getting%20Started"&gt;
Getting Started&lt;/a&gt; section of the online &lt;a href="http://simplemvvmtoolkit.codeplex.com/documentation"&gt;
Documentation&lt;/a&gt; for creating a Silverlight MVVM application from scratch using the toolkit.&lt;/p&gt;
&lt;p&gt;After creating your first app, you&amp;rsquo;re ready to explore the main sample app.&amp;nbsp; Open up Before and After versions of the sample application included in the downloaded zip file. There is a ReadMe.txt file with detailed step-by-step instructions. The
 Before solution is an n-tier application that retrieves products and categories from the Northwind sample database using a basic WCF service. (In case you'd like to reproduce the Before project, there is a text file describing how to do that.)&lt;/p&gt;
&lt;p&gt;Next you can check out samples for async execution, associated properties, enum to list conversion, notifications using the Message Bus, using view-model driven navigation, and dependency injection with unit testing.&lt;/p&gt;
&lt;h2&gt;About the Author&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.codeplex.com/site/users/view/tonysneed"&gt;Tony Sneed&lt;/a&gt;
&lt;/strong&gt;is an instructor for the developer training company, &lt;a href="http://www.develop.com/"&gt;
DevelopMentor&lt;/a&gt;, where he authors and teaches courses on &lt;a href="http://www.develop.com/training-course/new-net-3-net-3.5-linq"&gt;
.NET 3.5-4.0&lt;/a&gt;, &lt;a href="http://www.develop.com/training-course/entity-framework-4.0"&gt;
Entity Framework&lt;/a&gt;, Windows Communication Foundation and Silverlight.&amp;nbsp; He has a keen interest in MVVM, Managed Extensibility Framework, and WCF RIA Services.&amp;nbsp; You can read his
&lt;a href="http://blog.tonysneed.com/"&gt;blog&lt;/a&gt; or follow him on &lt;a href="http://twitter.com/tonysneed"&gt;
Twitter&lt;/a&gt; and &lt;a href="http://www.facebook.com/anthony.sneed"&gt;Facebook&lt;/a&gt;, where he has created a
&lt;a href="http://www.facebook.com/home.php?sk=group_181987988497920"&gt;group&lt;/a&gt; for people using MVVM to design Silverlight applications.&amp;nbsp; He is a frequent speaker at
&lt;a href="http://ddnug.net/"&gt;user groups&lt;/a&gt; and conferences and has written articles for
&lt;a href="http://msdn.microsoft.com/en-us/magazine/dd263098.aspx"&gt;MSDN Magazine&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What's Next?&lt;/h2&gt;
&lt;p&gt;I plan to put out additional blog posts and a series of screen casts on using the Simple MVVM Toolkit and exploring different features.&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tonysneed</author><pubDate>Sat, 20 Oct 2012 13:18:44 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20121020011844P</guid></item><item><title>New Comment on "WCF RIA Services"</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?title=WCF RIA Services&amp;ANCHOR#C23673</link><description>Hi Tony,&amp;#10;&amp;#10;I never had a chance to thank you for your awesome work. Thank you very much&amp;#33;&amp;#10;&amp;#10;To be honest, I&amp;#39;ve been struggling with MVVM for some time already until I found simplemvvmtoolkit.&amp;#10;&amp;#10;Other examples&amp;#47;videos are just to vague for me. I mean they are too simple to be a realistic reference. Your RealWorld demonstration however is very helpful together with the great documentation and active discussions.&amp;#10;Thank you&amp;#33;</description><author>junwebhead</author><pubDate>Sun, 13 May 2012 02:45:09 GMT</pubDate><guid isPermaLink="false">New Comment on "WCF RIA Services" 20120513024509A</guid></item><item><title>New Comment on "Programming Reference"</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?title=Programming Reference&amp;ANCHOR#C23293</link><description>I agree, this is one of the best and most well documented MVVM frameworks I have found. Flawless installation and very complete sample applications. I decided to use it for a big WPF application I&amp;#39;m building and it solves most of the issues I&amp;#39;ve run into, like communication between V and VM&amp;#39;s, and Notifications in general, now I&amp;#39;ll try to integrate it to Unity IoC Container now that I see Tony has added Dependency Injection Support&amp;#33;. I&amp;#39;ve also contacted Tony with some questions and he has been very helpful and supportive.  We appreciate all the efforts you&amp;#39;ve put into this Tony&amp;#33;</description><author>adolfo1981</author><pubDate>Fri, 13 Apr 2012 16:49:11 GMT</pubDate><guid isPermaLink="false">New Comment on "Programming Reference" 20120413044911P</guid></item><item><title>Updated Wiki: Prerequisites</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?title=Prerequisites&amp;version=7</link><description>&lt;div class="wikidoc"&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;1. &lt;strong&gt;Visual Studio 2010 with Service Pack 1&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Professional or Higher: &lt;a href="http://www.microsoft.com/visualstudio/en-us/download"&gt;
http://www.microsoft.com/visualstudio/en-us/download&lt;/a&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Or Express: &lt;a href="http://www.microsoft.com/express/Download"&gt;
http://www.microsoft.com/express/Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. &lt;strong&gt;Silverlight 4 Tools&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. &lt;strong&gt;Silverlight&amp;nbsp;5 Tools for VS 2010 SP1&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=28358"&gt;http://www.microsoft.com/download/en/details.aspx?id=28358&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. &lt;strong&gt;Silverlight 4 Toolkit&lt;/strong&gt; (April 2010) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://silverlight.codeplex.com/releases/view/43528" href="http://silverlight.codeplex.com/releases/view/43528"&gt;
http://silverlight.codeplex.com/releases/view/43528&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5. &lt;strong&gt;Silverlight&amp;nbsp;5 Toolkit&lt;/strong&gt; (December 2011) &lt;br&gt;
&lt;a href="http://silverlight.codeplex.com/releases/view/78435"&gt;http://silverlight.codeplex.com/releases/view/78435&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. &lt;strong&gt;Expression Blend 4 SDK&lt;/strong&gt; (or Expression Blend 4 complete) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SL4: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;amp;displaylang=en&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; WPF: &lt;a title="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7.&amp;nbsp;&lt;strong&gt;Expression Blend Preview for Silverlight 5&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=22feb67c-4f65-4ced-97cf-5f8ada296445&amp;displaylang=en"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=22feb67c-4f65-4ced-97cf-5f8ada296445&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;8. &lt;strong&gt;Windows Phone&amp;nbsp;SDK 7.1&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=27570"&gt;
http://www.microsoft.com/download/en/details.aspx?id=27570&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;9. &lt;strong&gt;WCF RIA Services V1.0 SP1 for Silverlight 4&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=330F6831-5B90-4315-B042-96127A4A7EFC&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=330F6831-5B90-4315-B042-96127A4A7EFC&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10. For Samples: &lt;strong&gt;SQL Server 2008 Express&lt;/strong&gt; (database with management tools)
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/express/Database/InstallOptions.aspx"&gt;
http://www.microsoft.com/express/Database/InstallOptions.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11. For Samples: &lt;strong&gt;Northwind Sample Database&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;amp;displaylang=en&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - Make sure to attach the Northwind database to the SQLExpress instance&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tonysneed</author><pubDate>Wed, 07 Mar 2012 20:44:27 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Prerequisites 20120307084427P</guid></item><item><title>Updated Wiki: Home</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?version=34</link><description>&lt;div class="wikidoc"&gt;
&lt;h2&gt;Project Description&lt;/h2&gt;
&lt;p&gt;Simple MVVM Toolkit makes it easier to develop Silverlight, WPF and WP7 applications using the
&lt;em&gt;Model-View-ViewModel &lt;/em&gt;design pattern. The purpose of the toolkit is to provide a simple framework and set of tools for getting up to speed quickly with applications based on the MVVM design pattern. The emphasis is on
&lt;strong&gt;simplicity&lt;/strong&gt;, but it contains everything you need to implement MVVM for real-world line of business applications.&lt;/p&gt;
&lt;h2&gt;What&amp;rsquo;s Hot&lt;/h2&gt;
&lt;p&gt;Simple MVVM Toolkit now supports &lt;strong&gt;Silverlight 5.0 and Windows Phone 7.1&lt;/strong&gt;!&amp;nbsp; Project templates for both SL4 and SL5 are included, so you can use both.&amp;nbsp; Samples have also been upgraded. &amp;nbsp;Get it
&lt;a href="http://simplemvvmtoolkit.codeplex.com/releases/edit/83316"&gt;here&lt;/a&gt;. Check the new list of
&lt;a href="http://simplemvvmtoolkit.codeplex.com/wikipage?title=Prerequisites"&gt;prerequisites&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Compare &lt;a href="http://blog.tonysneed.com/2011/04/23/simple-mvvm-toolkit-versus-mvvm-light-toolkit/"&gt;
Simple MVVM Toolkit to MVVM Light Toolkit&lt;/a&gt;.&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://blog.tonysneed.com/2011/04/23/simple-mvvm-toolkit-versus-mvvm-light-toolkit/"&gt;&lt;img title="compare" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=232485" border="0" alt="compare" width="600" height="600" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Take a look at the &lt;span style="color:#ff0000"&gt;Getting Started screencast&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;You can &lt;a href="http://www.screencast.com/t/2zU5iwr5IbN" target="_blank"&gt;watch it now&lt;/a&gt; or
&lt;a href="http://s3.amazonaws.com/simplemvvmscreencasts/gettingstarted.mp4"&gt;download&lt;/a&gt; the screencast to watch it offline on your pc or mobile device.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.screencast.com/t/2zU5iwr5IbN"&gt;&lt;img title="gs-screencast" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=230234" border="0" alt="gs-screencast" width="604" height="359" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;View the &lt;span style="color:#ff0000"&gt;Real-World MVVM with RIA Services &lt;/span&gt;
Screencast: &lt;br&gt;
&lt;strong&gt;Real-World MVVM Part 1&lt;/strong&gt;:&amp;nbsp; &lt;a href="http://www.screencast.com/t/bwIQtWtVhu"&gt;
Streaming&lt;/a&gt; or &lt;a href="http://simplemvvmscreencasts.s3.amazonaws.com/mvvm-riaservices-part1.mp4"&gt;
Download&lt;/a&gt; (PC or mobile device) &lt;br&gt;
&lt;strong&gt;Real-World MVVM Part 2&lt;/strong&gt;:&amp;nbsp; &lt;a href="http://www.screencast.com/t/hUMVdlCxu"&gt;
Streaming&lt;/a&gt; or &lt;a href="http://simplemvvmscreencasts.s3.amazonaws.com/mvvm-riaservices-part2.mp4"&gt;
Download&lt;/a&gt; (PC or mobile device)&lt;/h4&gt;
&lt;h4&gt;Simple MVVM Toolkit can be downloaded from within Visual Studio by selecting the Tools menu,
&lt;span style="color:#ff0000"&gt;Extension Manager&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;&lt;img title="smvvm-vsext" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229239" border="0" alt="smvvm-vsext" width="600" height="390" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h4&gt;Simple MVVM Toolkit now has an &lt;span style="color:#ff0000"&gt;installer&lt;/span&gt;!&amp;nbsp; Just
&lt;a href="http://simplemvvmtoolkit.codeplex.com/releases/view/64265"&gt;download&lt;/a&gt; and run it.&lt;/h4&gt;
&lt;p&gt;&lt;img title="SimpleMvvmInstaller" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229240" border="0" alt="SimpleMvvmInstaller" width="600" height="220" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h4&gt;Simple MVVM Toolkit has some awesome Visual Studio &lt;span style="color:#ff0000"&gt;
project templates&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;&lt;img title="mvvm-proj-sl4" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229241" border="0" alt="mvvm-proj-sl4" width="600" height="390" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;From within Visual Studio, select File, New Project, then click on the Mvvm category under either Windows (for WPF), Silverlight, or Silverlight for Windows Phone.&amp;nbsp; After clicking OK you get a complete project with a folder structure and a ready-made
 MVVM app.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-sl" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229242" border="0" alt="smvvm-sl" width="274" height="342" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;Here is what you get from the Silverlight project template.&amp;nbsp; Just follow the instructions in ReadMe.txt.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-ria" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229243" border="0" alt="smvvm-ria" width="274" height="557" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;Here is what you get from the RiaServices template.&amp;nbsp; Just hit F5 and you&amp;rsquo;ll see a fully functional MVVM Silverlight app that uses WCF RIA Services.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-riarun" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229244" border="0" alt="smvvm-riarun" width="600" height="462" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;The kicker is that you also get a Test project that uses the Microsoft Silverlight Testing Framework.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-testrun" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229245" border="0" alt="smvvm-testrun" width="600" height="462" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h2&gt;Features&lt;/h2&gt;
&lt;p&gt;&lt;span style="text-decoration:underline"&gt;New Features in v2&lt;/span&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;Installer &lt;/strong&gt;that places the binaries, templates and snippets in all the right places.
&lt;ul&gt;
&lt;li&gt;Copies binaries, libraries, &lt;strong&gt;samples and source code &lt;/strong&gt;to one location
&lt;/li&gt;&lt;li&gt;Copies Visual Studio &lt;strong&gt;templates and code snippets &lt;/strong&gt;to the correction location
&lt;/li&gt;&lt;li&gt;Registers the binaries so that SimpleMvvmToolkit appears in the Visual Studio
&lt;strong&gt;Add References &lt;/strong&gt;dialog. &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Visual Studio &lt;strong&gt;project templates&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Project templates for Silverlight, Windows Phone and WPF, which include starter Locator, Model, ViewModel, View and ServiceAgent classes.
&lt;/li&gt;&lt;li&gt;A multi-project Visual Studio template that includes a Silverlight client, a Silverlight Unit Test project and a WCF RIA Services project.
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;The &lt;strong&gt;main sample &lt;/strong&gt;now has Parts 2 and 3
&lt;ul&gt;
&lt;li&gt;Part 2 demonstrates navigation, messaging, property associations, async &lt;/li&gt;&lt;li&gt;Part 3 demonstrates using the toolkit with WCF RIA Services, including persistence with CRUD operations
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Simplified and consolidated &lt;strong&gt;ViewModelLocator&lt;/strong&gt; template which creates ViewModels on-demand.
&lt;ul&gt;
&lt;li&gt;This allows Views to control the ViewModel lifetime, avoiding potential memory leaks
&lt;/li&gt;&lt;li&gt;Silverlight and Windows Phone apps use the same ViewModelLocator template &lt;/li&gt;&lt;li&gt;The code snippet to insert injected (for dependency injection using MEF) ViewModels is more robust
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Improved support for &lt;strong&gt;unit testing &lt;/strong&gt;(with the Silverlight Unit Testing Framework &amp;ndash; included in the Silverlight Toolkit)
&lt;ul&gt;
&lt;li&gt;Includes an extension method for enqueuing&amp;nbsp; conditional tasks with a timeout
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Simpler and more robust MessageBus
&lt;ul&gt;
&lt;li&gt;Now uses leak-proof eventing model so that unregistering for messages is no longer required
&lt;/li&gt;&lt;li&gt;ViewModelBase now includes helper methods for sending and receiving messages &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;GenericDelegateCommand&lt;/strong&gt; supports parsing string parameters from XAML
&lt;ul&gt;
&lt;li&gt;Plays nicer with CommandParameter in XAML &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;span style="text-decoration:underline"&gt;Other Features&lt;/span&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for &lt;strong&gt;Silverlight&lt;/strong&gt;, &lt;strong&gt;WPF &lt;/strong&gt;and &lt;strong&gt;Windows Phone 7&lt;/strong&gt;
&lt;/li&gt;&lt;li&gt;Helper &lt;strong&gt;classes, &lt;/strong&gt;Visual Studio &lt;strong&gt;templates, code snippets&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="text-decoration:underline"&gt;Helpers&lt;/span&gt;: Model and view-model base classes, MessageBus,
&lt;br&gt;
DelegateCommand, MEF Export attribute &lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;Templates&lt;/span&gt;: View-model, detail view-model,
&lt;br&gt;
view-model locator, injected view-model locator &lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;C# Code Snippets&lt;/span&gt;: bindable property, vm locator, command
&lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;XML Code Snippets&lt;/span&gt;: Blend event-trigger
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Sample applications &lt;/strong&gt;with step-by-step instructions
&lt;ul&gt;
&lt;li&gt;End-to-end Silverlight Mvvm sample using WCF &lt;/li&gt;&lt;li&gt;Simplified &amp;ldquo;Getting Started&amp;rdquo; sample &lt;/li&gt;&lt;li&gt;Associated properties sample &lt;/li&gt;&lt;li&gt;Async execution sample &lt;/li&gt;&lt;li&gt;Enum to list conversion sample &lt;/li&gt;&lt;li&gt;Message bus sample &lt;/li&gt;&lt;li&gt;Navigation sample &lt;/li&gt;&lt;li&gt;Dependency injection (MEF) with unit testing &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Model and ViewModel &lt;strong&gt;base classes&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Strongly typed &lt;strong&gt;data binding &lt;/strong&gt;with &lt;em&gt;lambda expressions&lt;/em&gt;
&lt;/li&gt;&lt;li&gt;View-model &lt;strong&gt;locator service&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;DelegateCommand &lt;/strong&gt;based on ICommand &lt;/li&gt;&lt;li&gt;&lt;strong&gt;AssociateProperties &lt;/strong&gt;method to link view-model and model properties
&lt;/li&gt;&lt;li&gt;Event-based facility for &lt;strong&gt;two-way communication &lt;/strong&gt;between views and view-models
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;MessageBus &lt;/strong&gt;for sending notifications in a &lt;em&gt;loosely coupled
&lt;/em&gt;fashion among view-models &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Dependency injection &lt;/strong&gt;(IoC) for &lt;em&gt;unit testing &lt;/em&gt;using &lt;strong&gt;
MEF &lt;/strong&gt;(Managed Extensibility Framework) &lt;/li&gt;&lt;li&gt;&lt;strong&gt;IEditableDataObject &lt;/strong&gt;support with deep cloning &lt;/li&gt;&lt;li&gt;Conversion of &lt;strong&gt;enums &lt;/strong&gt;to lists for populating combo boxes &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Async support &lt;/strong&gt;with transparent marshaling to the UI thread &lt;/li&gt;&lt;li&gt;Built-in support for &lt;strong&gt;WCF RIA Services&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;h2&gt;What You Get&lt;/h2&gt;
&lt;p&gt;The toolkit consists of a set of &lt;strong&gt;helper classes&lt;/strong&gt;, some Visual Studio
&lt;strong&gt;templates&lt;/strong&gt;, and a set of &lt;strong&gt;code snippets&lt;/strong&gt;. All you have to do is reference the helper assembly (or include the Visual Studio project in your solution), add view-models using the Visual Studio item templates, and insert properties
 using the included mvvmprop code snippet. The view-models extend a base class that supplies two-way data binding. There is also an item template for a detail-based view model that extends a base class with editing capability (via IEditableDataObject). You
 can also add a view-model locator using the corresponding item template and code snippet.&lt;/p&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;1. &lt;strong&gt;Visual Studio 2010&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Professional or Higher: &lt;a href="http://www.microsoft.com/visualstudio/en-us/download"&gt;
http://www.microsoft.com/visualstudio/en-us/download&lt;/a&gt;&amp;nbsp; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Express: &lt;a href="http://www.microsoft.com/express/Download"&gt;http://www.microsoft.com/express/Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. &lt;strong&gt;Silverlight 4 Tools&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. &lt;strong&gt;Silverlight 4 Toolkit&lt;/strong&gt; (April 2010) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://silverlight.codeplex.com/releases/view/43528" href="http://silverlight.codeplex.com/releases/view/43528"&gt;
http://silverlight.codeplex.com/releases/view/43528&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. &lt;strong&gt;Expression Blend 4 SDK&lt;/strong&gt; (or Expression Blend 4 complete) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SL4: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;amp;displaylang=en&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; WPF: &lt;a title="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;5. For Windows Phone: &lt;strong&gt;Windows Phone Developer Tools RTW&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce&amp;displaylang=en" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. For RIA Services Development: &lt;strong&gt;WCF RIA Services V1.0 SP1 for Silverlight 4&lt;/strong&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=330F6831-5B90-4315-B042-96127A4A7EFC&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=330F6831-5B90-4315-B042-96127A4A7EFC&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7. For Samples: &lt;strong&gt;SQL Server 2008 Express&lt;/strong&gt; (database with management tools)
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/express/Database/InstallOptions.aspx"&gt;
http://www.microsoft.com/express/Database/InstallOptions.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;8. For Samples: &lt;strong&gt;Northwind Sample Database&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;amp;displaylang=en&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - Make sure to attach the Northwind database to the SQLExpress instance&lt;/p&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;The best way to get started is to open the Getting Started sample in Samples\SimpleMvvm-Other and follow instructions in the
&lt;a href="http://simplemvvmtoolkit.codeplex.com/wikipage?title=Getting%20Started"&gt;
Getting Started&lt;/a&gt; section of the online &lt;a href="http://simplemvvmtoolkit.codeplex.com/documentation"&gt;
Documentation&lt;/a&gt; for creating a Silverlight MVVM application from scratch using the toolkit.&lt;/p&gt;
&lt;p&gt;After creating your first app, you&amp;rsquo;re ready to explore the main sample app.&amp;nbsp; Open up Before and After versions of the sample application included in the downloaded zip file. There is a ReadMe.txt file with detailed step-by-step instructions. The
 Before solution is an n-tier application that retrieves products and categories from the Northwind sample database using a basic WCF service. (In case you'd like to reproduce the Before project, there is a text file describing how to do that.)&lt;/p&gt;
&lt;p&gt;Next you can check out samples for async execution, associated properties, enum to list conversion, notifications using the Message Bus, using view-model driven navigation, and dependency injection with unit testing.&lt;/p&gt;
&lt;h2&gt;About the Author&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.codeplex.com/site/users/view/tonysneed"&gt;Tony Sneed&lt;/a&gt;
&lt;/strong&gt;is an instructor for the developer training company, &lt;a href="http://www.develop.com/"&gt;
DevelopMentor&lt;/a&gt;, where he authors and teaches courses on &lt;a href="http://www.develop.com/training-course/new-net-3-net-3.5-linq"&gt;
.NET 3.5-4.0&lt;/a&gt;, &lt;a href="http://www.develop.com/training-course/entity-framework-4.0"&gt;
Entity Framework&lt;/a&gt;, Windows Communication Foundation and Silverlight.&amp;nbsp; He has a keen interest in MVVM, Managed Extensibility Framework, and WCF RIA Services.&amp;nbsp; You can read his
&lt;a href="http://blog.tonysneed.com/"&gt;blog&lt;/a&gt; or follow him on &lt;a href="http://twitter.com/tonysneed"&gt;
Twitter&lt;/a&gt; and &lt;a href="http://www.facebook.com/anthony.sneed"&gt;Facebook&lt;/a&gt;, where he has created a
&lt;a href="http://www.facebook.com/home.php?sk=group_181987988497920"&gt;group&lt;/a&gt; for people using MVVM to design Silverlight applications.&amp;nbsp; He is a frequent speaker at
&lt;a href="http://ddnug.net/"&gt;user groups&lt;/a&gt; and conferences and has written articles for
&lt;a href="http://msdn.microsoft.com/en-us/magazine/dd263098.aspx"&gt;MSDN Magazine&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What's Next?&lt;/h2&gt;
&lt;p&gt;I plan to put out additional blog posts and a series of screen casts on using the Simple MVVM Toolkit and exploring different features.&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tonysneed</author><pubDate>Fri, 02 Mar 2012 16:27:45 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120302042745P</guid></item><item><title>Updated Wiki: Home</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?version=33</link><description>&lt;div class="wikidoc"&gt;
&lt;h2&gt;Project Description&lt;/h2&gt;
&lt;p&gt;Simple MVVM Toolkit makes it easier to develop Silverlight, WPF and WP7 applications using the
&lt;em&gt;Model-View-ViewModel &lt;/em&gt;design pattern. The purpose of the toolkit is to provide a simple framework and set of tools for getting up to speed quickly with applications based on the MVVM design pattern. The emphasis is on
&lt;strong&gt;simplicity&lt;/strong&gt;, but it contains everything you need to implement MVVM for real-world line of business applications.&lt;/p&gt;
&lt;h2&gt;What&amp;rsquo;s Hot&lt;/h2&gt;
&lt;p&gt;Simple MVVM Toolkit now supports &lt;strong&gt;Silverlight 5.0 and Windows Phone 7.1&lt;/strong&gt;!&amp;nbsp; Project templates for both SL4 and SL5 are included, so you can use both.&amp;nbsp; Samples have also been upgraded. &amp;nbsp;Get it
&lt;a href="http://simplemvvmtoolkit.codeplex.com/releases/edit/83316"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Compare &lt;a href="http://blog.tonysneed.com/2011/04/23/simple-mvvm-toolkit-versus-mvvm-light-toolkit/"&gt;
Simple MVVM Toolkit to MVVM Light Toolkit&lt;/a&gt;.&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://blog.tonysneed.com/2011/04/23/simple-mvvm-toolkit-versus-mvvm-light-toolkit/"&gt;&lt;img title="compare" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=232485" border="0" alt="compare" width="600" height="600" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Take a look at the &lt;span style="color:#ff0000"&gt;Getting Started screencast&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;You can &lt;a href="http://www.screencast.com/t/2zU5iwr5IbN" target="_blank"&gt;watch it now&lt;/a&gt; or
&lt;a href="http://s3.amazonaws.com/simplemvvmscreencasts/gettingstarted.mp4"&gt;download&lt;/a&gt; the screencast to watch it offline on your pc or mobile device.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.screencast.com/t/2zU5iwr5IbN"&gt;&lt;img title="gs-screencast" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=230234" border="0" alt="gs-screencast" width="604" height="359" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;View the &lt;span style="color:#ff0000"&gt;Real-World MVVM with RIA Services &lt;/span&gt;
Screencast: &lt;br&gt;
&lt;strong&gt;Real-World MVVM Part 1&lt;/strong&gt;:&amp;nbsp; &lt;a href="http://www.screencast.com/t/bwIQtWtVhu"&gt;
Streaming&lt;/a&gt; or &lt;a href="http://simplemvvmscreencasts.s3.amazonaws.com/mvvm-riaservices-part1.mp4"&gt;
Download&lt;/a&gt; (PC or mobile device) &lt;br&gt;
&lt;strong&gt;Real-World MVVM Part 2&lt;/strong&gt;:&amp;nbsp; &lt;a href="http://www.screencast.com/t/hUMVdlCxu"&gt;
Streaming&lt;/a&gt; or &lt;a href="http://simplemvvmscreencasts.s3.amazonaws.com/mvvm-riaservices-part2.mp4"&gt;
Download&lt;/a&gt; (PC or mobile device)&lt;/h4&gt;
&lt;h4&gt;Simple MVVM Toolkit can be downloaded from within Visual Studio by selecting the Tools menu,
&lt;span style="color:#ff0000"&gt;Extension Manager&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;&lt;img title="smvvm-vsext" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229239" border="0" alt="smvvm-vsext" width="600" height="390" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h4&gt;Simple MVVM Toolkit now has an &lt;span style="color:#ff0000"&gt;installer&lt;/span&gt;!&amp;nbsp; Just
&lt;a href="http://simplemvvmtoolkit.codeplex.com/releases/view/64265"&gt;download&lt;/a&gt; and run it.&lt;/h4&gt;
&lt;p&gt;&lt;img title="SimpleMvvmInstaller" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229240" border="0" alt="SimpleMvvmInstaller" width="600" height="220" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h4&gt;Simple MVVM Toolkit has some awesome Visual Studio &lt;span style="color:#ff0000"&gt;
project templates&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;&lt;img title="mvvm-proj-sl4" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229241" border="0" alt="mvvm-proj-sl4" width="600" height="390" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;From within Visual Studio, select File, New Project, then click on the Mvvm category under either Windows (for WPF), Silverlight, or Silverlight for Windows Phone.&amp;nbsp; After clicking OK you get a complete project with a folder structure and a ready-made
 MVVM app.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-sl" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229242" border="0" alt="smvvm-sl" width="274" height="342" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;Here is what you get from the Silverlight project template.&amp;nbsp; Just follow the instructions in ReadMe.txt.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-ria" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229243" border="0" alt="smvvm-ria" width="274" height="557" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;Here is what you get from the RiaServices template.&amp;nbsp; Just hit F5 and you&amp;rsquo;ll see a fully functional MVVM Silverlight app that uses WCF RIA Services.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-riarun" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229244" border="0" alt="smvvm-riarun" width="600" height="462" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;The kicker is that you also get a Test project that uses the Microsoft Silverlight Testing Framework.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-testrun" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229245" border="0" alt="smvvm-testrun" width="600" height="462" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h2&gt;Features&lt;/h2&gt;
&lt;p&gt;&lt;span style="text-decoration:underline"&gt;New Features in v2&lt;/span&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;Installer &lt;/strong&gt;that places the binaries, templates and snippets in all the right places.
&lt;ul&gt;
&lt;li&gt;Copies binaries, libraries, &lt;strong&gt;samples and source code &lt;/strong&gt;to one location
&lt;/li&gt;&lt;li&gt;Copies Visual Studio &lt;strong&gt;templates and code snippets &lt;/strong&gt;to the correction location
&lt;/li&gt;&lt;li&gt;Registers the binaries so that SimpleMvvmToolkit appears in the Visual Studio
&lt;strong&gt;Add References &lt;/strong&gt;dialog. &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Visual Studio &lt;strong&gt;project templates&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Project templates for Silverlight, Windows Phone and WPF, which include starter Locator, Model, ViewModel, View and ServiceAgent classes.
&lt;/li&gt;&lt;li&gt;A multi-project Visual Studio template that includes a Silverlight client, a Silverlight Unit Test project and a WCF RIA Services project.
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;The &lt;strong&gt;main sample &lt;/strong&gt;now has Parts 2 and 3
&lt;ul&gt;
&lt;li&gt;Part 2 demonstrates navigation, messaging, property associations, async &lt;/li&gt;&lt;li&gt;Part 3 demonstrates using the toolkit with WCF RIA Services, including persistence with CRUD operations
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Simplified and consolidated &lt;strong&gt;ViewModelLocator&lt;/strong&gt; template which creates ViewModels on-demand.
&lt;ul&gt;
&lt;li&gt;This allows Views to control the ViewModel lifetime, avoiding potential memory leaks
&lt;/li&gt;&lt;li&gt;Silverlight and Windows Phone apps use the same ViewModelLocator template &lt;/li&gt;&lt;li&gt;The code snippet to insert injected (for dependency injection using MEF) ViewModels is more robust
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Improved support for &lt;strong&gt;unit testing &lt;/strong&gt;(with the Silverlight Unit Testing Framework &amp;ndash; included in the Silverlight Toolkit)
&lt;ul&gt;
&lt;li&gt;Includes an extension method for enqueuing&amp;nbsp; conditional tasks with a timeout
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Simpler and more robust MessageBus
&lt;ul&gt;
&lt;li&gt;Now uses leak-proof eventing model so that unregistering for messages is no longer required
&lt;/li&gt;&lt;li&gt;ViewModelBase now includes helper methods for sending and receiving messages &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;GenericDelegateCommand&lt;/strong&gt; supports parsing string parameters from XAML
&lt;ul&gt;
&lt;li&gt;Plays nicer with CommandParameter in XAML &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;span style="text-decoration:underline"&gt;Other Features&lt;/span&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for &lt;strong&gt;Silverlight&lt;/strong&gt;, &lt;strong&gt;WPF &lt;/strong&gt;and &lt;strong&gt;Windows Phone 7&lt;/strong&gt;
&lt;/li&gt;&lt;li&gt;Helper &lt;strong&gt;classes, &lt;/strong&gt;Visual Studio &lt;strong&gt;templates, code snippets&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="text-decoration:underline"&gt;Helpers&lt;/span&gt;: Model and view-model base classes, MessageBus,
&lt;br&gt;
DelegateCommand, MEF Export attribute &lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;Templates&lt;/span&gt;: View-model, detail view-model,
&lt;br&gt;
view-model locator, injected view-model locator &lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;C# Code Snippets&lt;/span&gt;: bindable property, vm locator, command
&lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;XML Code Snippets&lt;/span&gt;: Blend event-trigger
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Sample applications &lt;/strong&gt;with step-by-step instructions
&lt;ul&gt;
&lt;li&gt;End-to-end Silverlight Mvvm sample using WCF &lt;/li&gt;&lt;li&gt;Simplified &amp;ldquo;Getting Started&amp;rdquo; sample &lt;/li&gt;&lt;li&gt;Associated properties sample &lt;/li&gt;&lt;li&gt;Async execution sample &lt;/li&gt;&lt;li&gt;Enum to list conversion sample &lt;/li&gt;&lt;li&gt;Message bus sample &lt;/li&gt;&lt;li&gt;Navigation sample &lt;/li&gt;&lt;li&gt;Dependency injection (MEF) with unit testing &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Model and ViewModel &lt;strong&gt;base classes&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Strongly typed &lt;strong&gt;data binding &lt;/strong&gt;with &lt;em&gt;lambda expressions&lt;/em&gt;
&lt;/li&gt;&lt;li&gt;View-model &lt;strong&gt;locator service&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;DelegateCommand &lt;/strong&gt;based on ICommand &lt;/li&gt;&lt;li&gt;&lt;strong&gt;AssociateProperties &lt;/strong&gt;method to link view-model and model properties
&lt;/li&gt;&lt;li&gt;Event-based facility for &lt;strong&gt;two-way communication &lt;/strong&gt;between views and view-models
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;MessageBus &lt;/strong&gt;for sending notifications in a &lt;em&gt;loosely coupled
&lt;/em&gt;fashion among view-models &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Dependency injection &lt;/strong&gt;(IoC) for &lt;em&gt;unit testing &lt;/em&gt;using &lt;strong&gt;
MEF &lt;/strong&gt;(Managed Extensibility Framework) &lt;/li&gt;&lt;li&gt;&lt;strong&gt;IEditableDataObject &lt;/strong&gt;support with deep cloning &lt;/li&gt;&lt;li&gt;Conversion of &lt;strong&gt;enums &lt;/strong&gt;to lists for populating combo boxes &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Async support &lt;/strong&gt;with transparent marshaling to the UI thread &lt;/li&gt;&lt;li&gt;Built-in support for &lt;strong&gt;WCF RIA Services&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;h2&gt;What You Get&lt;/h2&gt;
&lt;p&gt;The toolkit consists of a set of &lt;strong&gt;helper classes&lt;/strong&gt;, some Visual Studio
&lt;strong&gt;templates&lt;/strong&gt;, and a set of &lt;strong&gt;code snippets&lt;/strong&gt;. All you have to do is reference the helper assembly (or include the Visual Studio project in your solution), add view-models using the Visual Studio item templates, and insert properties
 using the included mvvmprop code snippet. The view-models extend a base class that supplies two-way data binding. There is also an item template for a detail-based view model that extends a base class with editing capability (via IEditableDataObject). You
 can also add a view-model locator using the corresponding item template and code snippet.&lt;/p&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;1. &lt;strong&gt;Visual Studio 2010&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Professional or Higher: &lt;a href="http://www.microsoft.com/visualstudio/en-us/download"&gt;
http://www.microsoft.com/visualstudio/en-us/download&lt;/a&gt;&amp;nbsp; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Express: &lt;a href="http://www.microsoft.com/express/Download"&gt;http://www.microsoft.com/express/Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. &lt;strong&gt;Silverlight 4 Tools&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. &lt;strong&gt;Silverlight 4 Toolkit&lt;/strong&gt; (April 2010) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://silverlight.codeplex.com/releases/view/43528" href="http://silverlight.codeplex.com/releases/view/43528"&gt;
http://silverlight.codeplex.com/releases/view/43528&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. &lt;strong&gt;Expression Blend 4 SDK&lt;/strong&gt; (or Expression Blend 4 complete) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SL4: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;amp;displaylang=en&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; WPF: &lt;a title="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;5. For Windows Phone: &lt;strong&gt;Windows Phone Developer Tools RTW&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce&amp;displaylang=en" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. For RIA Services Development: &lt;strong&gt;WCF RIA Services V1.0 SP1 for Silverlight 4&lt;/strong&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=330F6831-5B90-4315-B042-96127A4A7EFC&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=330F6831-5B90-4315-B042-96127A4A7EFC&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7. For Samples: &lt;strong&gt;SQL Server 2008 Express&lt;/strong&gt; (database with management tools)
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/express/Database/InstallOptions.aspx"&gt;
http://www.microsoft.com/express/Database/InstallOptions.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;8. For Samples: &lt;strong&gt;Northwind Sample Database&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;amp;displaylang=en&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - Make sure to attach the Northwind database to the SQLExpress instance&lt;/p&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;The best way to get started is to open the Getting Started sample in Samples\SimpleMvvm-Other and follow instructions in the
&lt;a href="http://simplemvvmtoolkit.codeplex.com/wikipage?title=Getting%20Started"&gt;
Getting Started&lt;/a&gt; section of the online &lt;a href="http://simplemvvmtoolkit.codeplex.com/documentation"&gt;
Documentation&lt;/a&gt; for creating a Silverlight MVVM application from scratch using the toolkit.&lt;/p&gt;
&lt;p&gt;After creating your first app, you&amp;rsquo;re ready to explore the main sample app.&amp;nbsp; Open up Before and After versions of the sample application included in the downloaded zip file. There is a ReadMe.txt file with detailed step-by-step instructions. The
 Before solution is an n-tier application that retrieves products and categories from the Northwind sample database using a basic WCF service. (In case you'd like to reproduce the Before project, there is a text file describing how to do that.)&lt;/p&gt;
&lt;p&gt;Next you can check out samples for async execution, associated properties, enum to list conversion, notifications using the Message Bus, using view-model driven navigation, and dependency injection with unit testing.&lt;/p&gt;
&lt;h2&gt;About the Author&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.codeplex.com/site/users/view/tonysneed"&gt;Tony Sneed&lt;/a&gt;
&lt;/strong&gt;is an instructor for the developer training company, &lt;a href="http://www.develop.com/"&gt;
DevelopMentor&lt;/a&gt;, where he authors and teaches courses on &lt;a href="http://www.develop.com/training-course/new-net-3-net-3.5-linq"&gt;
.NET 3.5-4.0&lt;/a&gt;, &lt;a href="http://www.develop.com/training-course/entity-framework-4.0"&gt;
Entity Framework&lt;/a&gt;, Windows Communication Foundation and Silverlight.&amp;nbsp; He has a keen interest in MVVM, Managed Extensibility Framework, and WCF RIA Services.&amp;nbsp; You can read his
&lt;a href="http://blog.tonysneed.com/"&gt;blog&lt;/a&gt; or follow him on &lt;a href="http://twitter.com/tonysneed"&gt;
Twitter&lt;/a&gt; and &lt;a href="http://www.facebook.com/anthony.sneed"&gt;Facebook&lt;/a&gt;, where he has created a
&lt;a href="http://www.facebook.com/home.php?sk=group_181987988497920"&gt;group&lt;/a&gt; for people using MVVM to design Silverlight applications.&amp;nbsp; He is a frequent speaker at
&lt;a href="http://ddnug.net/"&gt;user groups&lt;/a&gt; and conferences and has written articles for
&lt;a href="http://msdn.microsoft.com/en-us/magazine/dd263098.aspx"&gt;MSDN Magazine&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What's Next?&lt;/h2&gt;
&lt;p&gt;I plan to put out additional blog posts and a series of screen casts on using the Simple MVVM Toolkit and exploring different features.&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tonysneed</author><pubDate>Fri, 02 Mar 2012 16:25:43 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120302042543P</guid></item><item><title>Updated Wiki: Prerequisites</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?title=Prerequisites&amp;version=6</link><description>&lt;div class="wikidoc"&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;1. &lt;strong&gt;Visual Studio 2010 with Service Pack 1&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Professional or Higher: &lt;a href="http://www.microsoft.com/visualstudio/en-us/download"&gt;
http://www.microsoft.com/visualstudio/en-us/download&lt;/a&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Or Express: &lt;a href="http://www.microsoft.com/express/Download"&gt;
http://www.microsoft.com/express/Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. &lt;strong&gt;Silverlight 4 Tools&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. &lt;strong&gt;Silverlight&amp;nbsp;5 Tools for VS 2010 SP1&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=28358"&gt;http://www.microsoft.com/download/en/details.aspx?id=28358&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. &lt;strong&gt;Silverlight 4 Toolkit&lt;/strong&gt; (April 2010) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://silverlight.codeplex.com/releases/view/43528" href="http://silverlight.codeplex.com/releases/view/43528"&gt;
http://silverlight.codeplex.com/releases/view/43528&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5. &lt;strong&gt;Silverlight&amp;nbsp;5 Toolkit&lt;/strong&gt; (December 2011) &lt;br&gt;
&lt;a href="http://silverlight.codeplex.com/releases/view/78435"&gt;http://silverlight.codeplex.com/releases/view/78435&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. &lt;strong&gt;Expression Blend 4 SDK&lt;/strong&gt; (or Expression Blend 4 complete) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SL4: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;amp;displaylang=en&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; WPF: &lt;a title="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7.&amp;nbsp;&lt;strong&gt;Expression Blend Preview for Silverlight 5&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&lt;a href="http://www.microsoft.com/download/en/confirmation.aspx?id=9503"&gt;http://www.microsoft.com/download/en/confirmation.aspx?id=9503&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;8. &lt;strong&gt;Windows Phone&amp;nbsp;SDK 7.1&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=27570"&gt;
http://www.microsoft.com/download/en/details.aspx?id=27570&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;9. &lt;strong&gt;WCF RIA Services V1.0 SP1 for Silverlight 4&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=330F6831-5B90-4315-B042-96127A4A7EFC&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=330F6831-5B90-4315-B042-96127A4A7EFC&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10. For Samples: &lt;strong&gt;SQL Server 2008 Express&lt;/strong&gt; (database with management tools)
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/express/Database/InstallOptions.aspx"&gt;
http://www.microsoft.com/express/Database/InstallOptions.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11. For Samples: &lt;strong&gt;Northwind Sample Database&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;amp;displaylang=en&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - Make sure to attach the Northwind database to the SQLExpress instance&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tonysneed</author><pubDate>Fri, 02 Mar 2012 00:02:12 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Prerequisites 20120302120212A</guid></item><item><title>Updated Wiki: Home</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?version=32</link><description>&lt;div class="wikidoc"&gt;
&lt;h2&gt;Project Description&lt;/h2&gt;
&lt;p&gt;Simple MVVM Toolkit makes it easier to develop Silverlight, WPF and WP7 applications using the
&lt;em&gt;Model-View-ViewModel &lt;/em&gt;design pattern. The purpose of the toolkit is to provide a simple framework and set of tools for getting up to speed quickly with applications based on the MVVM design pattern. The emphasis is on
&lt;strong&gt;simplicity&lt;/strong&gt;, but it contains everything you need to implement MVVM for real-world line of business applications.&lt;/p&gt;
&lt;h2&gt;What&amp;rsquo;s Hot&lt;/h2&gt;
&lt;p&gt;Simple MVVM Toolkit now supports &lt;strong&gt;Silverlight 5.0 and Windows Phone 7.1&lt;/strong&gt;!&amp;nbsp; Project templates for both SL4 and SL5 are included, so you can use both.&amp;nbsp; Samples have been upgraded.&lt;/p&gt;
&lt;h4&gt;Compare &lt;a href="http://blog.tonysneed.com/2011/04/23/simple-mvvm-toolkit-versus-mvvm-light-toolkit/"&gt;
Simple MVVM Toolkit to MVVM Light Toolkit&lt;/a&gt;.&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://blog.tonysneed.com/2011/04/23/simple-mvvm-toolkit-versus-mvvm-light-toolkit/"&gt;&lt;img title="compare" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=232485" border="0" alt="compare" width="600" height="600" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Take a look at the &lt;span style="color:#ff0000"&gt;Getting Started screencast&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;You can &lt;a href="http://www.screencast.com/t/2zU5iwr5IbN" target="_blank"&gt;watch it now&lt;/a&gt; or
&lt;a href="http://s3.amazonaws.com/simplemvvmscreencasts/gettingstarted.mp4"&gt;download&lt;/a&gt; the screencast to watch it offline on your pc or mobile device.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.screencast.com/t/2zU5iwr5IbN"&gt;&lt;img title="gs-screencast" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=230234" border="0" alt="gs-screencast" width="604" height="359" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;View the &lt;span style="color:#ff0000"&gt;Real-World MVVM with RIA Services &lt;/span&gt;
Screencast: &lt;br&gt;
&lt;strong&gt;Real-World MVVM Part 1&lt;/strong&gt;:&amp;nbsp; &lt;a href="http://www.screencast.com/t/bwIQtWtVhu"&gt;
Streaming&lt;/a&gt; or &lt;a href="http://simplemvvmscreencasts.s3.amazonaws.com/mvvm-riaservices-part1.mp4"&gt;
Download&lt;/a&gt; (PC or mobile device) &lt;br&gt;
&lt;strong&gt;Real-World MVVM Part 2&lt;/strong&gt;:&amp;nbsp; &lt;a href="http://www.screencast.com/t/hUMVdlCxu"&gt;
Streaming&lt;/a&gt; or &lt;a href="http://simplemvvmscreencasts.s3.amazonaws.com/mvvm-riaservices-part2.mp4"&gt;
Download&lt;/a&gt; (PC or mobile device)&lt;/h4&gt;
&lt;h4&gt;Simple MVVM Toolkit can be downloaded from within Visual Studio by selecting the Tools menu,
&lt;span style="color:#ff0000"&gt;Extension Manager&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;&lt;img title="smvvm-vsext" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229239" border="0" alt="smvvm-vsext" width="600" height="390" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h4&gt;Simple MVVM Toolkit now has an &lt;span style="color:#ff0000"&gt;installer&lt;/span&gt;!&amp;nbsp; Just
&lt;a href="http://simplemvvmtoolkit.codeplex.com/releases/view/64265"&gt;download&lt;/a&gt; and run it.&lt;/h4&gt;
&lt;p&gt;&lt;img title="SimpleMvvmInstaller" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229240" border="0" alt="SimpleMvvmInstaller" width="600" height="220" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h4&gt;Simple MVVM Toolkit has some awesome Visual Studio &lt;span style="color:#ff0000"&gt;
project templates&lt;/span&gt;!&lt;/h4&gt;
&lt;p&gt;&lt;img title="mvvm-proj-sl4" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229241" border="0" alt="mvvm-proj-sl4" width="600" height="390" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;From within Visual Studio, select File, New Project, then click on the Mvvm category under either Windows (for WPF), Silverlight, or Silverlight for Windows Phone.&amp;nbsp; After clicking OK you get a complete project with a folder structure and a ready-made
 MVVM app.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-sl" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229242" border="0" alt="smvvm-sl" width="274" height="342" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;Here is what you get from the Silverlight project template.&amp;nbsp; Just follow the instructions in ReadMe.txt.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-ria" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229243" border="0" alt="smvvm-ria" width="274" height="557" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;Here is what you get from the RiaServices template.&amp;nbsp; Just hit F5 and you&amp;rsquo;ll see a fully functional MVVM Silverlight app that uses WCF RIA Services.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-riarun" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229244" border="0" alt="smvvm-riarun" width="600" height="462" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;p&gt;The kicker is that you also get a Test project that uses the Microsoft Silverlight Testing Framework.&lt;/p&gt;
&lt;p&gt;&lt;img title="smvvm-testrun" src="http://download.codeplex.com/download?ProjectName=simplemvvmtoolkit&amp;DownloadId=229245" border="0" alt="smvvm-testrun" width="600" height="462" style="padding-left:0px; padding-right:0px; display:inline; padding-top:0px; border-width:0px"&gt;&lt;/p&gt;
&lt;h2&gt;Features&lt;/h2&gt;
&lt;p&gt;&lt;span style="text-decoration:underline"&gt;New Features in v2&lt;/span&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;Installer &lt;/strong&gt;that places the binaries, templates and snippets in all the right places.
&lt;ul&gt;
&lt;li&gt;Copies binaries, libraries, &lt;strong&gt;samples and source code &lt;/strong&gt;to one location
&lt;/li&gt;&lt;li&gt;Copies Visual Studio &lt;strong&gt;templates and code snippets &lt;/strong&gt;to the correction location
&lt;/li&gt;&lt;li&gt;Registers the binaries so that SimpleMvvmToolkit appears in the Visual Studio
&lt;strong&gt;Add References &lt;/strong&gt;dialog. &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Visual Studio &lt;strong&gt;project templates&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Project templates for Silverlight, Windows Phone and WPF, which include starter Locator, Model, ViewModel, View and ServiceAgent classes.
&lt;/li&gt;&lt;li&gt;A multi-project Visual Studio template that includes a Silverlight client, a Silverlight Unit Test project and a WCF RIA Services project.
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;The &lt;strong&gt;main sample &lt;/strong&gt;now has Parts 2 and 3
&lt;ul&gt;
&lt;li&gt;Part 2 demonstrates navigation, messaging, property associations, async &lt;/li&gt;&lt;li&gt;Part 3 demonstrates using the toolkit with WCF RIA Services, including persistence with CRUD operations
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Simplified and consolidated &lt;strong&gt;ViewModelLocator&lt;/strong&gt; template which creates ViewModels on-demand.
&lt;ul&gt;
&lt;li&gt;This allows Views to control the ViewModel lifetime, avoiding potential memory leaks
&lt;/li&gt;&lt;li&gt;Silverlight and Windows Phone apps use the same ViewModelLocator template &lt;/li&gt;&lt;li&gt;The code snippet to insert injected (for dependency injection using MEF) ViewModels is more robust
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Improved support for &lt;strong&gt;unit testing &lt;/strong&gt;(with the Silverlight Unit Testing Framework &amp;ndash; included in the Silverlight Toolkit)
&lt;ul&gt;
&lt;li&gt;Includes an extension method for enqueuing&amp;nbsp; conditional tasks with a timeout
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Simpler and more robust MessageBus
&lt;ul&gt;
&lt;li&gt;Now uses leak-proof eventing model so that unregistering for messages is no longer required
&lt;/li&gt;&lt;li&gt;ViewModelBase now includes helper methods for sending and receiving messages &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;GenericDelegateCommand&lt;/strong&gt; supports parsing string parameters from XAML
&lt;ul&gt;
&lt;li&gt;Plays nicer with CommandParameter in XAML &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;span style="text-decoration:underline"&gt;Other Features&lt;/span&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for &lt;strong&gt;Silverlight&lt;/strong&gt;, &lt;strong&gt;WPF &lt;/strong&gt;and &lt;strong&gt;Windows Phone 7&lt;/strong&gt;
&lt;/li&gt;&lt;li&gt;Helper &lt;strong&gt;classes, &lt;/strong&gt;Visual Studio &lt;strong&gt;templates, code snippets&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="text-decoration:underline"&gt;Helpers&lt;/span&gt;: Model and view-model base classes, MessageBus,
&lt;br&gt;
DelegateCommand, MEF Export attribute &lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;Templates&lt;/span&gt;: View-model, detail view-model,
&lt;br&gt;
view-model locator, injected view-model locator &lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;C# Code Snippets&lt;/span&gt;: bindable property, vm locator, command
&lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration:underline"&gt;XML Code Snippets&lt;/span&gt;: Blend event-trigger
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Sample applications &lt;/strong&gt;with step-by-step instructions
&lt;ul&gt;
&lt;li&gt;End-to-end Silverlight Mvvm sample using WCF &lt;/li&gt;&lt;li&gt;Simplified &amp;ldquo;Getting Started&amp;rdquo; sample &lt;/li&gt;&lt;li&gt;Associated properties sample &lt;/li&gt;&lt;li&gt;Async execution sample &lt;/li&gt;&lt;li&gt;Enum to list conversion sample &lt;/li&gt;&lt;li&gt;Message bus sample &lt;/li&gt;&lt;li&gt;Navigation sample &lt;/li&gt;&lt;li&gt;Dependency injection (MEF) with unit testing &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Model and ViewModel &lt;strong&gt;base classes&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Strongly typed &lt;strong&gt;data binding &lt;/strong&gt;with &lt;em&gt;lambda expressions&lt;/em&gt;
&lt;/li&gt;&lt;li&gt;View-model &lt;strong&gt;locator service&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;DelegateCommand &lt;/strong&gt;based on ICommand &lt;/li&gt;&lt;li&gt;&lt;strong&gt;AssociateProperties &lt;/strong&gt;method to link view-model and model properties
&lt;/li&gt;&lt;li&gt;Event-based facility for &lt;strong&gt;two-way communication &lt;/strong&gt;between views and view-models
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;MessageBus &lt;/strong&gt;for sending notifications in a &lt;em&gt;loosely coupled
&lt;/em&gt;fashion among view-models &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Dependency injection &lt;/strong&gt;(IoC) for &lt;em&gt;unit testing &lt;/em&gt;using &lt;strong&gt;
MEF &lt;/strong&gt;(Managed Extensibility Framework) &lt;/li&gt;&lt;li&gt;&lt;strong&gt;IEditableDataObject &lt;/strong&gt;support with deep cloning &lt;/li&gt;&lt;li&gt;Conversion of &lt;strong&gt;enums &lt;/strong&gt;to lists for populating combo boxes &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Async support &lt;/strong&gt;with transparent marshaling to the UI thread &lt;/li&gt;&lt;li&gt;Built-in support for &lt;strong&gt;WCF RIA Services&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;h2&gt;What You Get&lt;/h2&gt;
&lt;p&gt;The toolkit consists of a set of &lt;strong&gt;helper classes&lt;/strong&gt;, some Visual Studio
&lt;strong&gt;templates&lt;/strong&gt;, and a set of &lt;strong&gt;code snippets&lt;/strong&gt;. All you have to do is reference the helper assembly (or include the Visual Studio project in your solution), add view-models using the Visual Studio item templates, and insert properties
 using the included mvvmprop code snippet. The view-models extend a base class that supplies two-way data binding. There is also an item template for a detail-based view model that extends a base class with editing capability (via IEditableDataObject). You
 can also add a view-model locator using the corresponding item template and code snippet.&lt;/p&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;1. &lt;strong&gt;Visual Studio 2010&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Professional or Higher: &lt;a href="http://www.microsoft.com/visualstudio/en-us/download"&gt;
http://www.microsoft.com/visualstudio/en-us/download&lt;/a&gt;&amp;nbsp; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Express: &lt;a href="http://www.microsoft.com/express/Download"&gt;http://www.microsoft.com/express/Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. &lt;strong&gt;Silverlight 4 Tools&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. &lt;strong&gt;Silverlight 4 Toolkit&lt;/strong&gt; (April 2010) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://silverlight.codeplex.com/releases/view/43528" href="http://silverlight.codeplex.com/releases/view/43528"&gt;
http://silverlight.codeplex.com/releases/view/43528&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. &lt;strong&gt;Expression Blend 4 SDK&lt;/strong&gt; (or Expression Blend 4 complete) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SL4: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;amp;displaylang=en&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; WPF: &lt;a title="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75E13D71-7C53-4382-9592-6C07C6A00207&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;5. For Windows Phone: &lt;strong&gt;Windows Phone Developer Tools RTW&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce&amp;displaylang=en" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. For RIA Services Development: &lt;strong&gt;WCF RIA Services V1.0 SP1 for Silverlight 4&lt;/strong&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=330F6831-5B90-4315-B042-96127A4A7EFC&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=330F6831-5B90-4315-B042-96127A4A7EFC&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7. For Samples: &lt;strong&gt;SQL Server 2008 Express&lt;/strong&gt; (database with management tools)
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/express/Database/InstallOptions.aspx"&gt;
http://www.microsoft.com/express/Database/InstallOptions.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;8. For Samples: &lt;strong&gt;Northwind Sample Database&lt;/strong&gt; &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;displaylang=en"&gt;
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&amp;amp;displaylang=en&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - Make sure to attach the Northwind database to the SQLExpress instance&lt;/p&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;The best way to get started is to open the Getting Started sample in Samples\SimpleMvvm-Other and follow instructions in the
&lt;a href="http://simplemvvmtoolkit.codeplex.com/wikipage?title=Getting%20Started"&gt;
Getting Started&lt;/a&gt; section of the online &lt;a href="http://simplemvvmtoolkit.codeplex.com/documentation"&gt;
Documentation&lt;/a&gt; for creating a Silverlight MVVM application from scratch using the toolkit.&lt;/p&gt;
&lt;p&gt;After creating your first app, you&amp;rsquo;re ready to explore the main sample app.&amp;nbsp; Open up Before and After versions of the sample application included in the downloaded zip file. There is a ReadMe.txt file with detailed step-by-step instructions. The
 Before solution is an n-tier application that retrieves products and categories from the Northwind sample database using a basic WCF service. (In case you'd like to reproduce the Before project, there is a text file describing how to do that.)&lt;/p&gt;
&lt;p&gt;Next you can check out samples for async execution, associated properties, enum to list conversion, notifications using the Message Bus, using view-model driven navigation, and dependency injection with unit testing.&lt;/p&gt;
&lt;h2&gt;About the Author&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.codeplex.com/site/users/view/tonysneed"&gt;Tony Sneed&lt;/a&gt;
&lt;/strong&gt;is an instructor for the developer training company, &lt;a href="http://www.develop.com/"&gt;
DevelopMentor&lt;/a&gt;, where he authors and teaches courses on &lt;a href="http://www.develop.com/training-course/new-net-3-net-3.5-linq"&gt;
.NET 3.5-4.0&lt;/a&gt;, &lt;a href="http://www.develop.com/training-course/entity-framework-4.0"&gt;
Entity Framework&lt;/a&gt;, Windows Communication Foundation and Silverlight.&amp;nbsp; He has a keen interest in MVVM, Managed Extensibility Framework, and WCF RIA Services.&amp;nbsp; You can read his
&lt;a href="http://blog.tonysneed.com/"&gt;blog&lt;/a&gt; or follow him on &lt;a href="http://twitter.com/tonysneed"&gt;
Twitter&lt;/a&gt; and &lt;a href="http://www.facebook.com/anthony.sneed"&gt;Facebook&lt;/a&gt;, where he has created a
&lt;a href="http://www.facebook.com/home.php?sk=group_181987988497920"&gt;group&lt;/a&gt; for people using MVVM to design Silverlight applications.&amp;nbsp; He is a frequent speaker at
&lt;a href="http://ddnug.net/"&gt;user groups&lt;/a&gt; and conferences and has written articles for
&lt;a href="http://msdn.microsoft.com/en-us/magazine/dd263098.aspx"&gt;MSDN Magazine&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What's Next?&lt;/h2&gt;
&lt;p&gt;I plan to put out additional blog posts and a series of screen casts on using the Simple MVVM Toolkit and exploring different features.&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tonysneed</author><pubDate>Thu, 01 Mar 2012 23:56:21 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120301115621P</guid></item><item><title>New Comment on "Getting Started"</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?title=Getting Started&amp;ANCHOR#C21275</link><description>Hi, I&amp;#39;m trying to adapt this tutorial for Windows Phone. I can&amp;#39;t get the trigger to work. How do I LoadProducts as soon as the page has loaded&amp;#63; And how would I use those in a ListBox. thanks.</description><author>jlebrech</author><pubDate>Mon, 17 Oct 2011 15:04:37 GMT</pubDate><guid isPermaLink="false">New Comment on "Getting Started" 20111017030437P</guid></item><item><title>New Comment on "Samples"</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?title=Samples&amp;ANCHOR#C21268</link><description>Tony,&amp;#10;In Messaging sample, I observed a strange phenomenon. Below are the steps.&amp;#10;1. Execute the program.&amp;#10;2. Click the &amp;#34;Increase Orders&amp;#34; button, when &amp;#34;Bill Gates&amp;#34; item is selected.&amp;#10;3. &amp;#34;Approve Increase&amp;#34; window show up,  click &amp;#34;Yes&amp;#34; button.&amp;#10;4. MessageText &amp;#34;Order quantity of 1000 approved for Bill Gates&amp;#34; DO appear under the &amp;#34;Increase Orders&amp;#34; button.&amp;#10;5. Click &amp;#34;Increase Orders&amp;#34; button again, this time the MessageText should be disapeared, but is is STILL appear there.&amp;#10;&amp;#10;My question is&amp;#58;&amp;#10;In your IncreaseOrders method, there is a statement &amp;#34;MessageVisibility &amp;#61; Visibility.Collapsed&amp;#59;&amp;#34;, why has it no effect at all&amp;#63;</description><author>hjyanghj</author><pubDate>Sun, 16 Oct 2011 09:51:45 GMT</pubDate><guid isPermaLink="false">New Comment on "Samples" 20111016095145A</guid></item><item><title>New Comment on "Getting Started"</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?title=Getting Started&amp;ANCHOR#C21261</link><description>Nice documentation.&amp;#10;It is nice to have included&amp;#58; how&amp;#47;when to insert item template and code&amp;#47;xaml snippet.&amp;#10;Thanks a lot.</description><author>hjyanghj</author><pubDate>Sat, 15 Oct 2011 12:00:46 GMT</pubDate><guid isPermaLink="false">New Comment on "Getting Started" 20111015120046P</guid></item><item><title>Updated Wiki: Getting Started</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?title=Getting Started&amp;version=8</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;Getting Started&lt;/h3&gt;
&lt;p&gt;The easiest way to get started with the Simple Mvvm Toolkit is to create a new Visual Studio project using one of the
&lt;strong&gt;project templates &lt;/strong&gt;installed by the toolkit.&amp;#160; Each project template creates a fully functioning MVVM application and includes a ReadMe.txt file with instructions for inserting your own classes using the Visual Studio
&lt;strong&gt;item templates&lt;/strong&gt;, &lt;strong&gt;code snippets &lt;/strong&gt;and &lt;strong&gt;xml snippets&lt;/strong&gt;. There are project templates for WPF, Silverlight and Windows Phone.&amp;#160; These instructions will build a Silverlight MVVM application.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.screencast.com/t/2zU5iwr5IbN"&gt;Watch&lt;/a&gt; or &lt;a href="http://s3.amazonaws.com/simplemvvmscreencasts/gettingstarted.mp4"&gt;
download&lt;/a&gt; the Getting Started screencast to see a demonstration of following the steps in this Getting Started exercise.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open Visual Studio 2010, then select File, New Project.&amp;#160; &lt;br&gt;
&lt;p&gt;&lt;img title="mvvm-proj-sl4" border="0" alt="mvvm-proj-sl4" src="http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=simplemvvmtoolkit&amp;DownloadId=231517" width="600" height="390" style="border-right-width:0px; padding-left:0px; padding-right:0px; display:inline; border-top-width:0px; border-bottom-width:0px; border-left-width:0px; padding-top:0px"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Under the Silverlight category, select the Mvvm sub-category &lt;/li&gt;&lt;li&gt;Select the &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;SimpleMvvmSilverlight&lt;/font&gt;
&lt;/strong&gt;project template &lt;/li&gt;&lt;li&gt;Name the project Getting Started and click OK &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;The project already references the SimpleMvvmToolkit assembly.
&lt;ul&gt;
&lt;li&gt;This reference can also be added manually through the Visual Studio Add References dialog.
&lt;/li&gt;&lt;li&gt;&lt;em&gt;If references for Microsoft.Expression.Interactions and System.Windows.Interactivity are missing,
&lt;br&gt;
you need to install the &lt;/em&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d&amp;displaylang=en"&gt;&lt;em&gt;Microsoft Expression Blend SDK&lt;/em&gt;&lt;/a&gt;.
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;The project will contain folders for Locators, Models, Services, ViewModels and Views.
&lt;br&gt;
&lt;p&gt;&lt;img title="smvvm-sl" border="0" alt="smvvm-sl" src="http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=simplemvvmtoolkit&amp;DownloadId=231518" width="300" height="375" style="border-right-width:0px; padding-left:0px; padding-right:0px; display:inline; border-top-width:0px; border-bottom-width:0px; border-left-width:0px; padding-top:0px"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can use the files within each of these folders as examples, then simply remove them.
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Start by adding a &lt;font style="background-color:#ffff00"&gt;&lt;strong&gt;Product&lt;/strong&gt;
&lt;/font&gt;class to the &lt;strong&gt;Models &lt;/strong&gt;folder.
&lt;ul&gt;
&lt;li&gt;Derive the class from &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;ModelBase&amp;lt;Product&amp;gt;&lt;/font&gt;&lt;/strong&gt;, which adds data binding capabilities to Product.
&lt;/li&gt;&lt;li&gt;Use the &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;mvvmprop&lt;/font&gt;&lt;/strong&gt; code snippet to insert two properties:
&lt;br&gt;
ProductId (int) &lt;br&gt;
ProductName (string) &lt;/li&gt;&lt;li&gt;The code snippet will call the base method NotifyPropertyChanged, &lt;br&gt;
which accepts a lambda expression for the property name.
&lt;ul&gt;
&lt;li&gt;This provides a type-safe way to fire the PropertyChanged event, &lt;br&gt;
which is necessary for two-way data binding. &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;
&lt;p&gt;&lt;em&gt;NOTE: Code snippets have been around for quite a while and make it easier to write boilerplate code.&amp;#160; Code snippets exist for many C# constructs, such as for, foreach, switch, etc.&amp;#160; After inserting the code snippet, it acts like a form where
 you type a value and hit tab to go to the next field. You can create your own code snippets using a tool such as Snippet Designer, which you can install by going to Tools / Extensions Manager and searching for Snippet Designer in the Online Gallery.&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Product : &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;ModelBase&amp;lt;Product&amp;gt;&lt;/font&gt;&lt;/strong&gt;
{
    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; productId;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; ProductId
    {
        get { &lt;span class="kwrd"&gt;return&lt;/span&gt; productId; }
        set
        {
            productId = &lt;span class="kwrd"&gt;value&lt;/span&gt;;
            &lt;strong&gt;NotifyPropertyChanged(m =&amp;gt; m.ProductId);
&lt;/strong&gt;        }
    }

    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; productName;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ProductName
    {
        get { &lt;span class="kwrd"&gt;return&lt;/span&gt; productName; }
        set
        {
            productName = &lt;span class="kwrd"&gt;value&lt;/span&gt;;
            &lt;strong&gt;NotifyPropertyChanged(m =&amp;gt; m.ProductName);
&lt;/strong&gt;        }
    }
}&lt;/pre&gt;
&lt;/li&gt;&lt;li&gt;
&lt;p&gt;Next add an &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;IProductServiceAgent
&lt;/font&gt;&lt;/strong&gt;interface to the &lt;strong&gt;Services &lt;/strong&gt;folder.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Include a &lt;strong&gt;LoadProducts &lt;/strong&gt;method that returns a List&amp;lt;Product&amp;gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; &lt;strong&gt;IProductServiceAgent&lt;/strong&gt;
{
    &lt;strong&gt;List&amp;lt;Product&amp;gt; LoadProducts();&lt;/strong&gt;
}&lt;/pre&gt;
&lt;/li&gt;&lt;li&gt;Add a &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;MockProductServiceAgent&lt;/font&gt;&lt;/strong&gt; class that implements
&lt;strong&gt;IProductServiceAgent&lt;/strong&gt;.
&lt;ul&gt;
&lt;li&gt;Flesh out the LoadProducts method by creating a new List&amp;lt;Product&amp;gt; with a few products in it.
&lt;/li&gt;&lt;/ul&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; &lt;strong&gt;MockProductServiceAgent&lt;/strong&gt; : IProductServiceAgent
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; List&amp;lt;Product&amp;gt; LoadProducts()
    {
        &lt;strong&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;Product&amp;gt;&lt;/strong&gt;
        {
            &lt;span class="kwrd"&gt;new&lt;/span&gt; Product { ProductId = 1, ProductName = &lt;span class="str"&gt;&amp;quot;Chai&amp;quot;&lt;/span&gt; },
            &lt;span class="kwrd"&gt;new&lt;/span&gt; Product { ProductId = 2, ProductName = &lt;span class="str"&gt;&amp;quot;Capuccino&amp;quot;&lt;/span&gt; },
            &lt;span class="kwrd"&gt;new&lt;/span&gt; Product { ProductId = 3, ProductName = &lt;span class="str"&gt;&amp;quot;Latte&amp;quot;&lt;/span&gt; },
            &lt;span class="kwrd"&gt;new&lt;/span&gt; Product { ProductId = 4, ProductName = &lt;span class="str"&gt;&amp;quot;Americano&amp;quot;&lt;/span&gt; },
            &lt;span class="kwrd"&gt;new&lt;/span&gt; Product { ProductId = 5, ProductName = &lt;span class="str"&gt;&amp;quot;Machiato&amp;quot;&lt;/span&gt; }
        };
    }
}&lt;/pre&gt;
&lt;/li&gt;&lt;li&gt;Next we’re going to create a &lt;strong&gt;ProductListViewModel&lt;/strong&gt;.&amp;#160; But instead of just adding a class with this name to the project, we’ll use one of the
&lt;strong&gt;Visual Studio item templates &lt;/strong&gt;that ship with the Simple Mvvm Toolkit!
&lt;ul&gt;
&lt;li&gt;Right-click the ViewModels folder and select Add New Item. &lt;/li&gt;&lt;li&gt;Expand the Silverlight category on the left to select the Mvvm category. &lt;/li&gt;&lt;li&gt;Select SimpleMvvmViewModel, enter ProductListViewModel.cs for the name, then click the Add button.
&lt;p&gt;&lt;img title="mvvm-items-sl4" border="0" alt="mvvm-items-sl4" src="http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=simplemvvmtoolkit&amp;DownloadId=231519" width="600" height="390" style="border-right-width:0px; padding-left:0px; padding-right:0px; display:inline; border-top-width:0px; border-bottom-width:0px; border-left-width:0px; padding-top:0px"&gt;&lt;/p&gt;
&lt;/li&gt;&lt;li&gt;What you get is a class which extends ViewModelBase&amp;lt;TViewModel&amp;gt; &lt;/li&gt;&lt;li&gt;Replace the &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;/* IXxxServiceAgent */&lt;/font&gt;&lt;/strong&gt; comment in the serviceAgent field with
&lt;strong&gt;IProductServiceAgent&lt;/strong&gt;. &lt;/li&gt;&lt;li&gt;Replace the &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;/* IXxxServiceAgent */&lt;/font&gt;&lt;/strong&gt; comment in the constructor with
&lt;strong&gt;IProductServiceAgent&lt;/strong&gt;. &lt;/li&gt;&lt;/ul&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; &lt;strong&gt;ProductListViewModel&lt;/strong&gt; : ViewModelBase&amp;lt;ProductListViewModel&amp;gt;
{
    &lt;span class="rem"&gt;// Add a member for IProductServiceAgent&lt;/span&gt;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;IProductServiceAgent&lt;/font&gt;&lt;/strong&gt; &lt;strong&gt;serviceAgent&lt;/strong&gt;;

    &lt;span class="rem"&gt;// Default ctor&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; ProductListViewModel() { }

    &lt;span class="rem"&gt;// ctor that accepts IProductServiceAgent&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; ProductListViewModel(&lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;IProductServiceAgent&lt;/font&gt; serviceAgent&lt;/strong&gt;)
    {
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.serviceAgent = serviceAgent;
    }&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Using the &lt;strong&gt;mvvmprop &lt;/strong&gt;code snippet add a &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;Products&lt;/font&gt;&lt;/strong&gt; property to the ProductListViewModel.
&lt;ul&gt;
&lt;li&gt;Make the property an ObservableCollection&amp;lt;Product&amp;gt; &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Add a &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;LoadProducts&lt;/font&gt;&lt;/strong&gt; method.
&lt;ul&gt;
&lt;li&gt;Call LoadProducts on serviceAgent and pass the result to the ctor of an ObservableCollection&amp;lt;Product&amp;gt;
&lt;/li&gt;&lt;li&gt;Set the &lt;strong&gt;Products &lt;/strong&gt;property to the ObservableCollection&amp;lt;Product&amp;gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; ObservableCollection&amp;lt;Product&amp;gt; products;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;strong&gt;ObservableCollection&amp;lt;Product&amp;gt; &lt;font style="background-color:#ffff00"&gt;Products&lt;/font&gt;&lt;/strong&gt;
{
    get { &lt;span class="kwrd"&gt;return&lt;/span&gt; products; }
    set
    {
        products = &lt;span class="kwrd"&gt;value&lt;/span&gt;;
        NotifyPropertyChanged(vm =&amp;gt; vm.Products);
    }
}

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;LoadProducts&lt;/font&gt;&lt;/strong&gt;()
{
    var products = &lt;strong&gt;serviceAgent.LoadProducts()&lt;/strong&gt;;
    &lt;strong&gt;Products&lt;/strong&gt; = &lt;span class="kwrd"&gt;new&lt;/span&gt; ObservableCollection&amp;lt;Product&amp;gt;(products);
}&lt;/pre&gt;
&lt;/li&gt;&lt;li&gt;Open the &lt;strong&gt;ViewModelLocator.cs &lt;/strong&gt;file, which resides in the Locators folder.
&lt;ul&gt;
&lt;li&gt;Use the &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;mvvmlocator&lt;/font&gt;&lt;/strong&gt; code snippet to add a property that creates the
&lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;ProductListViewModel&lt;/font&gt;&lt;/strong&gt; on demand.
&lt;ul&gt;
&lt;li&gt;Set serviceAgent to a new &lt;strong&gt;MockProductServiceAgent&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ViewModelLocator
{
    &lt;span class="rem"&gt;// Create ProductListViewModel on demand&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; ProductListViewModel &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;ProductListViewModel&lt;/font&gt;&lt;/strong&gt;
    {
        get
        {
            IProductServiceAgent serviceAgent = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;strong&gt;MockProductServiceAgent&lt;/strong&gt;();
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ProductListViewModel(serviceAgent);
        }
    }
}&lt;/pre&gt;
&lt;/li&gt;&lt;li&gt;Now that you’ve created a model and view-model, it’s time to create a &lt;strong&gt;
view&lt;/strong&gt;.
&lt;ul&gt;
&lt;li&gt;Right-click on the GettingStarted project to add a new &lt;strong&gt;Silverlight User Control
&lt;/strong&gt;named &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;ProductListView.xaml&lt;/font&gt;&lt;/strong&gt;
&lt;/li&gt;&lt;li&gt;Move ProductListView.xaml to the Views folder
&lt;p&gt;&lt;img title="Add New Item - HelloSimpleMvvmSL" border="0" alt="Add New Item - HelloSimpleMvvmSL" src="http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=simplemvvmtoolkit&amp;DownloadId=231520" width="600" height="390" style="border-right-width:0px; padding-left:0px; padding-right:0px; display:inline; border-top-width:0px; border-bottom-width:0px; border-left-width:0px; padding-top:0px"&gt;&lt;/p&gt;
&lt;/li&gt;&lt;li&gt;Add two rows to the grid, with a Button in the first row and a DataGrid in the second row.
&lt;/li&gt;&lt;li&gt;Right-click on ProductListViewModel.xaml in the solution explorer and select Open With…
&lt;ul&gt;
&lt;li&gt;Then choose the XML (Text) Editor and click OK (click Yes on the confirm dialog).
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;img title="Open With - ProductListView.xaml" border="0" alt="Open With - ProductListView.xaml" src="http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=simplemvvmtoolkit&amp;DownloadId=231521" width="446" height="300" style="border-right-width:0px; padding-left:0px; padding-right:0px; display:inline; border-top-width:0px; border-bottom-width:0px; border-left-width:0px; padding-top:0px"&gt;&lt;/p&gt;
&lt;/li&gt;&lt;li&gt;Place the cursor before the &amp;gt; symbol in the UserControl element, then right-click and select
&lt;strong&gt;Insert Snippet&lt;/strong&gt;.
&lt;ul&gt;
&lt;li&gt;Select My XML Snippets / SimpleMvvm / &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;mvvmxmlns&lt;/font&gt;&lt;/strong&gt;, which inserts the blend namespaces
&lt;/li&gt;&lt;li&gt;Select My XML Snippets / SimpleMvvm / &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;mvvmcontext&lt;/font&gt;&lt;/strong&gt;, and bind the DataContext to the Locator’s
&lt;strong&gt;ProductListViewModel&lt;/strong&gt; property. &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Lastly, provide a closing &amp;lt;/Button&amp;gt; element and insert a blend event trigger to call the LoadProducts method on the Click event.
&lt;ul&gt;
&lt;li&gt;Select My XML Snippets / SimpleMvvm / &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;mvvmcommand&lt;/font&gt;&lt;/strong&gt;, and type
&lt;strong&gt;LoadProducts&lt;/strong&gt; for the MethodName. &lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;While you’re at it, go ahead and bind the &lt;strong&gt;ItemsSource&lt;/strong&gt; property of the DataGrid with
&lt;strong&gt;Path=Products&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Double-click on ProductListView.xaml in the solution explorer to re-open the file in the designer. The XAML should look like this:
&lt;/li&gt;&lt;/ul&gt;
&lt;pre&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl &lt;/span&gt;&lt;span style="color:red"&gt;x:Class&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;HelloSimpleMvvmSL.ProductListView&lt;/span&gt;&amp;quot;
    &lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/span&gt;&amp;quot;
    &lt;span style="color:red"&gt;xmlns:x&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/span&gt;&amp;quot;
    &lt;span style="color:red"&gt;xmlns:d&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;http://schemas.microsoft.com/expression/blend/2008&lt;/span&gt;&amp;quot;
    &lt;span style="color:red"&gt;xmlns:mc&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;http://schemas.openxmlformats.org/markup-compatibility/2006&lt;/span&gt;&amp;quot;
    &lt;span style="color:red"&gt;xmlns:sdk&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk&lt;/span&gt;&amp;quot;
&lt;strong&gt;    &lt;font style="background-color:#ffff00"&gt;&lt;span style="color:red"&gt;xmlns:i&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;http://schemas.microsoft.com/expression/2010/interactivity&lt;/span&gt;&amp;quot;
&lt;/font&gt;    &lt;font style="background-color:#ffff00"&gt;&lt;span style="color:red"&gt;xmlns:ei&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;http://schemas.microsoft.com/expression/2010/interactions&lt;/span&gt;&amp;quot;
&lt;/font&gt;&lt;/strong&gt;    &lt;span style="color:red"&gt;mc:Ignorable&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;d&lt;/span&gt;&amp;quot;
    &lt;span style="color:red"&gt;d:DesignHeight&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;300&lt;/span&gt;&amp;quot; &lt;span style="color:red"&gt;d:DesignWidth&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;400&lt;/span&gt;&amp;quot;
    &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;&lt;span style="color:red"&gt;DataContext&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;{Binding Source={StaticResource Locator}, Path=ProductListViewModel}&lt;/span&gt;&amp;quot;&lt;/font&gt;
&lt;/strong&gt;    &lt;span style="color:blue"&gt;&amp;gt;
    
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid &lt;/span&gt;&lt;span style="color:red"&gt;x:Name&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;LayoutRoot&lt;/span&gt;&amp;quot; &lt;span style="color:red"&gt;Background&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;White&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;RowDefinition &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;46*&lt;/span&gt;&amp;quot; &lt;span style="color:blue"&gt;/&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;RowDefinition &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;254*&lt;/span&gt;&amp;quot; &lt;span style="color:blue"&gt;/&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Button &lt;/span&gt;&lt;span style="color:red"&gt;Content&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;Load Products&lt;/span&gt;&amp;quot; &lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;23&lt;/span&gt;&amp;quot; &lt;span style="color:red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;Left&lt;/span&gt;&amp;quot;
              &lt;span style="color:red"&gt;Margin&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;12,12,0,0&lt;/span&gt;&amp;quot; &lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;loadProductsButton&lt;/span&gt;&amp;quot;
              &lt;span style="color:red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;Top&lt;/span&gt;&amp;quot;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;95&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;&amp;gt;
&lt;strong&gt;        &lt;font style="background-color:#ffff00"&gt;&amp;lt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;&lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;i:Interaction.Triggers&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;&lt;span style="color:blue"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;i:EventTrigger &lt;/span&gt;&lt;span style="color:red"&gt;EventName&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;Click&lt;/span&gt;&amp;quot;&lt;/font&gt;&lt;/strong&gt;&lt;span style="color:blue"&gt;&lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;&amp;gt;
            &amp;lt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;&lt;span style="color:#a31515"&gt;ei:CallMethodAction
                    &lt;/span&gt;&lt;span style="color:red"&gt;TargetObject&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;{Binding}&lt;/span&gt;&amp;quot;
                    &lt;span style="color:red"&gt;MethodName&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;LoadProducts&lt;/span&gt;&amp;quot;&lt;/font&gt;&lt;/strong&gt;&lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;&lt;span style="color:blue"&gt;/&amp;gt;
          &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;i:EventTrigger&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;&lt;span style="color:blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;i:Interaction.Triggers&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;span style="color:blue"&gt;&lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;&amp;gt;
&lt;/font&gt;&lt;/strong&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Button&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;sdk:DataGrid &lt;/span&gt;&lt;span style="color:red"&gt;AutoGenerateColumns&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;True&lt;/span&gt;&amp;quot; &lt;span style="color:red"&gt;Grid.Row&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;1&lt;/span&gt;&amp;quot; &lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;214&lt;/span&gt;&amp;quot; 
            &lt;span style="color:red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;Left&lt;/span&gt;&amp;quot; &lt;span style="color:red"&gt;Margin&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;12,14,0,0&lt;/span&gt;&amp;quot; &lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;dataGrid1&lt;/span&gt;&amp;quot;
            &lt;span style="color:red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;Top&lt;/span&gt;&amp;quot; &lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;376&lt;/span&gt;&amp;quot;
            &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;&lt;span style="color:red"&gt;ItemsSource&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;{Binding Path=Products, Mode=TwoWay}&lt;/span&gt;&amp;quot;&lt;/font&gt;&lt;/strong&gt; &lt;span style="color:blue"&gt;/&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;&lt;li&gt;That’s all there is to it!&amp;#160; Just set the content of MainPage.xaml to show the ProductListView, then press F5 to run the application.
&lt;ul&gt;
&lt;li&gt;Clicking on the Load Products button will display a list of products created by the MockProductServiceAgent and bound to the Products property of the ProductListViewModel.
&lt;/li&gt;&lt;/ul&gt;
&lt;pre&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Class&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;HelloSimpleMvvmSL.MainPage&amp;quot;
    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&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:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&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:red"&gt;d&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;http://schemas.microsoft.com/expression/blend/2008&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:red"&gt;mc&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;http://schemas.openxmlformats.org/markup-compatibility/2006&amp;quot;
    &lt;/span&gt;&lt;span style="color:red"&gt;mc&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Ignorable&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;d&amp;quot;
    &lt;/span&gt;&lt;span style="color:red"&gt;d&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;DesignHeight&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;300&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;d&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;DesignWidth&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;400&amp;quot;&amp;gt;

    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;LayoutRoot&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;Background&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;White&amp;quot;&amp;gt;
        &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;&amp;lt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;&lt;span style="color:#a31515"&gt;my&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;ProductListView &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:red"&gt;my&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;span style="color:blue"&gt;&lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;=&amp;quot;clr-namespace:HelloSimpleMvvmSL&amp;quot;/&amp;gt;
&lt;/font&gt;&lt;/strong&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;
    
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img title="WindowClipping" border="0" alt="WindowClipping" src="http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=simplemvvmtoolkit&amp;DownloadId=231522" width="445" height="318" style="border-right-width:0px; padding-left:0px; padding-right:0px; display:inline; border-top-width:0px; border-bottom-width:0px; border-left-width:0px; padding-top:0px"&gt;&lt;/p&gt;
&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;This Getting Started guide has walked you through the steps of building an MVVM Silverlight application using the Simple MVVM Toolkit.&amp;#160; This includes using Visual Studio
&lt;strong&gt;project and item templates&lt;/strong&gt;, together with &lt;strong&gt;code and xml snippets&lt;/strong&gt;, to produce
&lt;em&gt;service agents, models, view-models, and views&lt;/em&gt;.&amp;#160; View-models are served up by a view-model locator, which creates a service agent and passes it to the ctor of the view-model.&amp;#160; The DataContext of the view is set to a view-model property on
 the locator so that elements on the view can be bound to properties on the view-model.&lt;/p&gt;
&lt;p&gt;In this exercise you used a mock service agent to create dummy model classes. To see how to connect this project to a WCF service for retrieving entities from a database, open projects in
&lt;strong&gt;Samples\SimpleMvvm-Main &lt;/strong&gt;and follow steps contained in the ReadMe files.&amp;#160; Part 1 includes more information on using the toolkit, for example, concerning modal dialogs.&amp;#160; Part 2 takes it a step further with navigation, messaging and
 async operations.&amp;#160; Part 3 ports the solution to WCF RIA Services.&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tonysneed</author><pubDate>Sat, 10 Sep 2011 21:01:23 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Getting Started 20110910090123P</guid></item><item><title>Updated Wiki: Programming Reference</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?title=Programming Reference&amp;version=19</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;Programming Reference&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;ViewModelBase&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This class serves as the base class for all your view-models.&amp;#160; It has a single property,
&lt;strong&gt;IsInDesignMode&lt;/strong&gt;, which returns true when a view that is bound to this view-model is being edited in a designer, which can either be Visual Studio or Expression Blend. To support
&lt;em&gt;designability&lt;/em&gt;, also referred to as &lt;em&gt;Blendability&lt;/em&gt;, check this property in your view-model in order to supply data that will be displayed in design view.&amp;#160; This makes it much easier for a designer, or a developer who is playing designer,
 to see a visual representation that is populated with sample or dummy data.&amp;#160; This is important because live data will only be shown at runtime, and some controls, such as labels, cannot be easily manipulated by design tools unless there is some design-time
 data to hold it in place.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ViewModelBase
{
    &lt;span class="rem"&gt;// Allows you to provide data at design-time (Blendability)&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;IsInDesignMode&lt;/font&gt;&lt;/strong&gt;
    {
        get
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; DesignerProperties.IsInDesignTool;
        }
    }
}&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-size:16px; font-weight:bold"&gt;ModelBase&amp;lt;TModel&amp;gt;, ViewModelBase&amp;lt;TViewModel&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The toolkit includes two base classes, &lt;strong&gt;ModelBase&amp;lt;TModel&amp;gt;&lt;/strong&gt; and
&lt;strong&gt;ViewModelBase&amp;lt;TViewModel&amp;gt;&lt;/strong&gt;, which support two-way data binding by implementing INotifyPropertyChanged.&amp;#160; They do this by providing a
&lt;strong&gt;NotifyPropertyChanged&lt;/strong&gt; method that accepts a &lt;em&gt;lambda expression
&lt;/em&gt;indicating the property that has been changed. This is to address one of the drawbacks of the PropertyChanged event, which is that it accepts a string for the property name. However, because NotifyPropertyChanged accepts a lambda expression, it provides
 a compile-time check for the property name, which can catch errors when you change the property name and forget to change it in the call to NotifyPropertyChanged.&lt;/p&gt;
&lt;p&gt;Another benefit of the NotifyPropertyChanged method is that it is always guaranteed to fire on the UI thread, because the InternalNotifyPropertyChanged method asks the current Dispatcher to see if we’re on the UI thread and, if not, calls BeginInvoke to
 marshal the call over to the UI thread.&amp;#160; This behavior is required when you are setting properties
&lt;em&gt;asynchronously&lt;/em&gt; from a worker thread.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; &lt;strong&gt;ModelBase&amp;lt;TModel&amp;gt;&lt;/strong&gt; : &lt;font style="background-color:#ffffff"&gt;&lt;strong&gt;INotifyPropertyChanged&lt;/strong&gt;&lt;/font&gt;
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; PropertyChangedEventHandler PropertyChanged
    {
        add { propertyChanged &amp;#43;= &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        remove { propertyChanged -= &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
    }
    &lt;span class="kwrd"&gt;protected&lt;/span&gt; PropertyChangedEventHandler propertyChanged;

    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; &lt;font style="background-color:#ffff00"&gt;&lt;strong&gt;NotifyPropertyChanged&lt;/strong&gt;&lt;/font&gt;&amp;lt;TResult&amp;gt;
        (&lt;strong&gt;Expression&amp;lt;Func&amp;lt;TViewModel, TResult&amp;gt;&amp;gt; property&lt;/strong&gt;)
    {
        &lt;span class="rem"&gt;// Fire PropertyChanged event&lt;/span&gt;
        BindingHelper.NotifyPropertyChanged(property, &lt;span class="kwrd"&gt;this&lt;/span&gt;, propertyChanged);
    }
    &lt;span class="rem"&gt;// Other members elided for clarity ...&lt;/span&gt;
}&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; &lt;strong&gt;ViewModelBase&amp;lt;TViewModel&amp;gt;&lt;/strong&gt; : ViewModelBase, &lt;font style="background-color:#ffffff"&gt;&lt;strong&gt;INotifyPropertyChanged&lt;/strong&gt;&lt;/font&gt; { ... }&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; BindingHelper
{
    &lt;span class="rem"&gt;// Defined as virtual so you can override if you wish&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;NotifyPropertyChanged&lt;/font&gt;&lt;/strong&gt;&amp;lt;TModel, TResult&amp;gt;
        (Expression&amp;lt;Func&amp;lt;TModel, TResult&amp;gt;&amp;gt; property,
        &lt;span class="kwrd"&gt;object&lt;/span&gt; sender, PropertyChangedEventHandler propertyChanged)
    {
        &lt;span class="rem"&gt;// Convert expression to a property name&lt;/span&gt;
        &lt;span class="kwrd"&gt;string&lt;/span&gt; propertyName = ((MemberExpression)property.Body).Member.Name;

        &lt;span class="rem"&gt;// Fire notify property changed event&lt;/span&gt;
        InternalNotifyPropertyChanged(propertyName, sender, propertyChanged);
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; InternalNotifyPropertyChanged(&lt;span class="kwrd"&gt;string&lt;/span&gt; propertyName, 
        &lt;span class="kwrd"&gt;object&lt;/span&gt; sender, PropertyChangedEventHandler propertyChanged)
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (propertyChanged != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
        {
            &lt;span class="rem"&gt;// Always fire the event on the UI thread&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;strong&gt;Deployment.Current.Dispatcher.CheckAccess&lt;/strong&gt;())
            {
                propertyChanged(sender, &lt;span class="kwrd"&gt;new&lt;/span&gt; PropertyChangedEventArgs(propertyName));

            }
            &lt;span class="kwrd"&gt;else&lt;/span&gt;
            {
                &lt;strong&gt;&lt;font style="background-color:#ffffff"&gt;Deployment.Current.Dispatcher.BeginInvoke&lt;/font&gt;&lt;/strong&gt;(() =&amp;gt; propertyChanged
                    (sender, &lt;span class="kwrd"&gt;new&lt;/span&gt; PropertyChangedEventArgs(propertyName)));
            }
        }
    }
}&lt;/pre&gt;
&lt;p&gt;Here is an example of calling &lt;strong&gt;NotifyPropertyChanged&lt;/strong&gt; from a property setter in a view-model.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; canLoad;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; CanLoad
{
    get { &lt;span class="kwrd"&gt;return&lt;/span&gt; canLoad; }
    set
    {
        canLoad = &lt;span class="kwrd"&gt;value&lt;/span&gt;;
        &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;NotifyPropertyChanged&lt;/font&gt;(m =&amp;gt; m.CanLoad);&lt;/strong&gt;
    }
}&lt;/pre&gt;
&lt;p&gt;Speaking of asynchronous programming, ViewModelBase&amp;lt;TViewModel&amp;gt; also includes a
&lt;strong&gt;Notify&lt;/strong&gt; method that fires a notification event by marshaling it to the UI thread if necessary.&amp;#160; Further down this page you’ll learn about using notification events to handle two-way communication between a view and its view-model.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; &lt;strong&gt;Notify&lt;/strong&gt;
    (EventHandler&amp;lt;NotificationEventArgs&amp;gt; handler,
    NotificationEventArgs e)
{
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (handler != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
    {
        InternalNotify(() =&amp;gt; handler(&lt;span class="kwrd"&gt;this&lt;/span&gt;, e));
    }
}

&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; &lt;strong&gt;Notify&lt;/strong&gt;&amp;lt;TOutgoing&amp;gt;
    (EventHandler&amp;lt;NotificationEventArgs&amp;lt;TOutgoing&amp;gt;&amp;gt; handler,
    NotificationEventArgs&amp;lt;TOutgoing&amp;gt; e)
{
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (handler != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
    {
        InternalNotify(() =&amp;gt; handler(&lt;span class="kwrd"&gt;this&lt;/span&gt;, e));
    }
}

&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; &lt;strong&gt;Notify&lt;/strong&gt;&amp;lt;TOutgoing, TIncoming&amp;gt;
    (EventHandler&amp;lt;NotificationEventArgs&amp;lt;TOutgoing, TIncoming&amp;gt;&amp;gt; handler,
    NotificationEventArgs&amp;lt;TOutgoing, TIncoming&amp;gt; e)
{
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (handler != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
    {
        InternalNotify(() =&amp;gt; handler(&lt;span class="kwrd"&gt;this&lt;/span&gt;, e));
    }
}

&lt;span class="kwrd"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; InternalNotify(Action method)
{
    &lt;span class="rem"&gt;// Always fire the event on the UI thread&lt;/span&gt;
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;strong&gt;UIDispatcher.Current.CheckAccess&lt;/strong&gt;())
        method();
    &lt;span class="kwrd"&gt;else&lt;/span&gt;
        &lt;strong&gt;UIDispatcher.Current.BeginInvoke&lt;/strong&gt;(method);
}&lt;/pre&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-size:16px; font-weight:bold"&gt;ViewModelDetailBase&amp;lt;TViewModel, TModel&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This base class implements &lt;em&gt;IEditableObject&lt;/em&gt; to support editing an entity and either committing or rolling back changes.&amp;#160; A typical scenario would be an Edit dialog or page that will commit changes when the user clicks OK or roll them back when
 the user clicks Cancel.&amp;#160; Calling the edit methods will only be necessary if editing is not already enabled by another means, such as a data form or in the base class of your model entities, as is the case with RIA Services.&amp;#160; The way ViewModelDetailBase
 does this is with an &lt;strong&gt;Model&lt;/strong&gt; property that will either point to a cloned version of the entity (on BeginEdit) or to the original version (on CancelEdit).&amp;#160; In EndEdit it will copy values from the cloned object over to the original.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; &lt;strong&gt;ViewModelDetailBase&amp;lt;TViewModel, TModel&amp;gt;&lt;/strong&gt;
    : ViewModelBase&amp;lt;TViewModel&amp;gt;, IEditableObject
    &lt;span class="kwrd"&gt;where&lt;/span&gt; TModel : INotifyPropertyChanged
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; TModel Model
    {
        get { &lt;span class="kwrd"&gt;return&lt;/span&gt; model; }
        set
        {
            model = &lt;span class="kwrd"&gt;value&lt;/span&gt;;
            BindingHelper.InternalNotifyPropertyChanged(&lt;span class="str"&gt;&amp;quot;Model&amp;quot;&lt;/span&gt;,
                &lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;base&lt;/span&gt;.propertyChanged);
        }
    }
    &lt;span class="kwrd"&gt;private&lt;/span&gt; TModel model;

    &lt;span class="rem"&gt;// Other members elided for clarity ...&lt;/span&gt;

    &lt;span class="kwrd"&gt;private&lt;/span&gt; TModel Original;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; TModel Copy;

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; &lt;font style="background-color:#ffff00"&gt;&lt;strong&gt;BeginEdit()&lt;/strong&gt;&lt;/font&gt;
    {
        &lt;span class="rem"&gt;// Throw an exception if Entity not supplied&lt;/span&gt;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (Model == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
        {
            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; InvalidOperationException(&lt;span class="str"&gt;&amp;quot;Entity must be set&amp;quot;&lt;/span&gt;);
        }

        &lt;span class="rem"&gt;// Copy entity&lt;/span&gt;
        Original = Model;
        Copy = Model.Clone();

        &lt;span class="rem"&gt;// Point entity to the copy&lt;/span&gt;
        Model = Copy;
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; &lt;font style="background-color:#ffff00"&gt;&lt;strong&gt;CancelEdit()&lt;/strong&gt;&lt;/font&gt;
    {
        &lt;span class="rem"&gt;// Point entity to original&lt;/span&gt;
        Model = Original;
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; &lt;font style="background-color:#ffff00"&gt;&lt;strong&gt;EndEdit()&lt;/strong&gt;&lt;/font&gt;
    {
        &lt;span class="rem"&gt;// Tranfer values from copy to original&lt;/span&gt;
        Copy.CopyValuesTo(Original);

        &lt;span class="rem"&gt;// Point entity to original&lt;/span&gt;
        Model = Original;
    }
}&lt;/pre&gt;
&lt;p&gt;The &lt;strong&gt;Clone&lt;/strong&gt; and &lt;strong&gt;CopyValuesTo &lt;/strong&gt;methods are implemented as extension methods in the Extensions class and can be brought into scope by inserting a using directive for the namespace,
&lt;strong&gt;SimpleMvvmToolkit.ModelExtensions&lt;/strong&gt;.&amp;#160; Clone uses the &lt;em&gt;DataContractSerializer
&lt;/em&gt;to serialize the object to and from a memory stream. It will work with entities that do not have the [DataContract] attribute by serializing all public properties.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Extensions
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; T &lt;strong&gt;Clone&lt;/strong&gt;&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt; T obj)
    {
        T copy = &lt;span class="kwrd"&gt;default&lt;/span&gt;(T);
        &lt;span class="kwrd"&gt;using&lt;/span&gt; (MemoryStream stream = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream())
        {
            var ser = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataContractSerializer(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(T));
            ser.WriteObject(stream, obj);
            stream.Position = 0;
            copy = (T)ser.ReadObject(stream);
        }
        &lt;span class="kwrd"&gt;return&lt;/span&gt; copy;
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; &lt;strong&gt;CopyValuesTo&lt;/strong&gt;&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt; T source, T dest)
    {
        var properties = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(T).GetProperties(BindingFlags.Public | BindingFlags.Instance)
            .Where(p =&amp;gt; p.CanRead &amp;amp;&amp;amp; p.CanWrite);

        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var property &lt;span class="kwrd"&gt;in&lt;/span&gt; properties)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (property.GetSetMethod() == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;continue&lt;/span&gt;;
            property.SetValue(dest, property.GetValue(source, &lt;span class="kwrd"&gt;null&lt;/span&gt;), &lt;span class="kwrd"&gt;null&lt;/span&gt;);
        }
    }
}&lt;/pre&gt;
&lt;p&gt;There is also an &lt;strong&gt;AssociateProperties&lt;/strong&gt; method that will propagate changes from a model property to a view-model property, so that updates to the model will be reflected in UI elements that are bound to the corresponding view-model properties.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; &lt;strong&gt;AssociateProperties&amp;lt;TModelResult, TViewModelResult&amp;gt;
&lt;/strong&gt;    (Expression&amp;lt;Func&amp;lt;TModel, TModelResult&amp;gt;&amp;gt; &lt;font style="background-color:#ffff00"&gt;modelProperty&lt;/font&gt;,
        Expression&amp;lt;Func&amp;lt;TViewModel, TViewModelResult&amp;gt;&amp;gt; &lt;font style="background-color:#ffff00"&gt;viewModelProperty&lt;/font&gt;)
{
    &lt;span class="rem"&gt;// Convert expressions to a property names&lt;/span&gt;
    &lt;span class="kwrd"&gt;string&lt;/span&gt; modelPropertyName = ((MemberExpression)modelProperty.Body).Member.Name;
    &lt;span class="kwrd"&gt;string&lt;/span&gt; viewModelPropertyName = ((MemberExpression)viewModelProperty.Body).Member.Name;

    &lt;span class="rem"&gt;// Propagate model to view-model property change&lt;/span&gt;
    Model.PropertyChanged &amp;#43;= (s, ea) =&amp;gt;
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (ea.PropertyName == modelPropertyName)
        {
            BindingHelper.InternalNotifyPropertyChanged(viewModelPropertyName,
                &lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;base&lt;/span&gt;.propertyChanged);
        }
    };
}&lt;/pre&gt;
&lt;p&gt;Here is an example of a CustomerViewModel class that transforms properties on a Customer model.&amp;#160; FirstName and LastName are exposed as a single
&lt;strong&gt;CustomerName&lt;/strong&gt; property, and IsActive is used to expose an &lt;strong&gt;
OrdersVisibility &lt;/strong&gt;property.&amp;#160; CustomerViewModel calls &lt;strong&gt;AssociateProperties&lt;/strong&gt; in the setter of a Customer property, so that changes to the Customer model properties will be reflected in UI elements that are bound to the CustomerName
 and OrdersVisibility properties.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CustomerViewModel : &lt;strong&gt;ViewModelDetailBase&amp;lt;CustomerViewModel, Customer&amp;gt;
&lt;/strong&gt;{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; Customer Customer
    {
        get
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; Model;
        }
        set
        {
            Model = &lt;span class="kwrd"&gt;value&lt;/span&gt;;

            &lt;span class="rem"&gt;// Associate model and view-model properties&lt;/span&gt;
            &lt;font style="background-color:#ffff00"&gt;AssociateProperties&lt;/font&gt;(m =&amp;gt; m.FirstName, vm =&amp;gt; vm.CustomerName);
            &lt;font style="background-color:#ffff00"&gt;AssociateProperties&lt;/font&gt;(m =&amp;gt; m.LastName, vm =&amp;gt; vm.CustomerName);
            &lt;font style="background-color:#ffff00"&gt;AssociateProperties&lt;/font&gt;(m =&amp;gt; m.IsActive, vm =&amp;gt; vm.OrdersVisibility);
        }
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; &lt;strong&gt;CustomerName&lt;/strong&gt;
    {
        get
        {
            &lt;span class="rem"&gt;// Concatenate first and last name&lt;/span&gt;
&lt;strong&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;{0} {1}&amp;quot;&lt;/span&gt;,
                Model.FirstName, Model.LastName);
&lt;/strong&gt;        }
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; Visibility &lt;strong&gt;OrdersVisibility&lt;/strong&gt;
    {
        get
        {
            &lt;span class="rem"&gt;// Show orders only for active customers&lt;/span&gt;
&lt;strong&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; Model.IsActive ? Visibility.Visible : Visibility.Collapsed;
&lt;/strong&gt;        }
    }
}&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-size:16px; font-weight:bold"&gt;NotificationEventArgs&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;When a view-model wishes to communicate with a view, it should do so in a &lt;em&gt;
loosely coupled &lt;/em&gt;manner.&amp;#160; The view-model should not reference the view or be aware of it in any way.&amp;#160; This presents somewhat of a quandary for many developers.&amp;#160; One approach is to use a message bus for communication between the view-model
 and the view.&amp;#160; To my mind, that is a bit too loose, because the view already holds a reference to the view-model.&amp;#160; Another approach is to use a service represented by an interface.&amp;#160; The view-model then holds on to a reference to the view via
 the service interface.&amp;#160; This is better than a direct reference but seems still too tight to me.&amp;#160; I prefer to use
&lt;em&gt;events&lt;/em&gt; as the communication mechanism because they offer finer granularity than interfaces and are more direct than a message bus.&amp;#160; Plus they are easy for developers to understand and implement.&lt;/p&gt;
&lt;p&gt;There are three versions of &lt;strong&gt;NotificationEventArgs&lt;/strong&gt;. The non-generic version simply has a string
&lt;strong&gt;Message&lt;/strong&gt; property.&amp;#160; There also is a generic version that accepts a
&lt;strong&gt;&amp;lt;TOutgoing&amp;gt; &lt;/strong&gt;type argument, which is an additional data payload passed by the view-model back to the view.&amp;#160; This can be an Exception or any other type.&amp;#160; And there another generic version which has a Completed property that is
 an &lt;strong&gt;Action&amp;lt;TIncoming&amp;gt;&lt;/strong&gt;, which the view-model sets to a completion callback method, so that the view can call back the view-model and pass a data payload.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; NotificationEventArgs : EventArgs
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; NotificationEventArgs() { }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; NotificationEventArgs(&lt;span class="kwrd"&gt;string&lt;/span&gt; message)
    {
        Message = message;
    }

    &lt;span class="rem"&gt;// Message&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Message { get; &lt;span class="kwrd"&gt;protected&lt;/span&gt; set; }
}

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; NotificationEventArgs&amp;lt;TOutgoing&amp;gt; : NotificationEventArgs
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; NotificationEventArgs() { }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; NotificationEventArgs(&lt;span class="kwrd"&gt;string&lt;/span&gt; message) : &lt;span class="kwrd"&gt;base&lt;/span&gt;(message) { }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; NotificationEventArgs(&lt;span class="kwrd"&gt;string&lt;/span&gt; message, &lt;font style="background-color:#ffff00"&gt;TOutgoing&lt;/font&gt; &lt;strong&gt;data&lt;/strong&gt;)
        : &lt;span class="kwrd"&gt;this&lt;/span&gt;(message)
    {
        Data = data;
    }

    &lt;span class="rem"&gt;// Data&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;font style="background-color:#ffff00"&gt;TOutgoing&lt;/font&gt; &lt;strong&gt;Data &lt;/strong&gt;{ get; &lt;span class="kwrd"&gt;protected&lt;/span&gt; set; }
}

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; NotificationEventArgs&amp;lt;TOutgoing, TIncoming&amp;gt; : NotificationEventArgs&amp;lt;TOutgoing&amp;gt;
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; NotificationEventArgs() { }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; NotificationEventArgs(&lt;span class="kwrd"&gt;string&lt;/span&gt; message) : &lt;span class="kwrd"&gt;base&lt;/span&gt;(message) { }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; NotificationEventArgs(&lt;span class="kwrd"&gt;string&lt;/span&gt; message, TOutgoing data)
        : &lt;span class="kwrd"&gt;base&lt;/span&gt;(message, data) { }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; NotificationEventArgs(&lt;span class="kwrd"&gt;string&lt;/span&gt; message, TOutgoing data, &lt;font style="background-color:#ffff00"&gt;Action&amp;lt;TIncoming&amp;gt;&lt;/font&gt; &lt;strong&gt;completed&lt;/strong&gt;)
        : &lt;span class="kwrd"&gt;this&lt;/span&gt;(message, data)
    {
        Completed = completed;
    }
        
    &lt;span class="rem"&gt;// Completion callback&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;font style="background-color:#ffff00"&gt;Action&amp;lt;TIncoming&amp;gt;&lt;/font&gt; &lt;strong&gt;Completed &lt;/strong&gt;{ get; &lt;span class="kwrd"&gt;protected&lt;/span&gt; set; }
}&lt;/pre&gt;
&lt;p&gt;Here is an example of a view-model firing a &lt;em&gt;one-way &lt;/em&gt;notification event.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ProductListViewModel : ViewModelBase&amp;lt;ProductListViewModel&amp;gt;
{
    &lt;span class="rem"&gt;// By convention we'll suffix each notification event with 'Notice'&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;NotificationEventArgs&amp;lt;Exception&amp;gt;&amp;gt; ErrorNotice;

    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; NotifyError(&lt;span class="kwrd"&gt;string&lt;/span&gt; message, Exception error)
    {
        &lt;span class="rem"&gt;// Notify view of an error&lt;/span&gt;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (ErrorNotice != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
        {
            ErrorNotice(&lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; NotificationEventArgs&amp;lt;Exception&amp;gt;(message, error));
        }
    }&lt;br&gt;}&lt;/pre&gt;
&lt;p&gt;However, we can make this more concise by taking advantage of the &lt;strong&gt;Notify
&lt;/strong&gt;method in ViewModelBase, which checks if the event is null (meaning it has no subscribers) and transparently marshals the call to the UI thread if necessary.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; NotifyError(&lt;span class="kwrd"&gt;string&lt;/span&gt; message, Exception error)
{
    &lt;span class="rem"&gt;// Notify view of an error&lt;/span&gt;
    Notify(&lt;strong&gt;ErrorNotice&lt;/strong&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;font style="background-color:#ffff00"&gt;NotificationEventArgs&amp;lt;Exception&amp;gt;&lt;/font&gt;(message, error));
}&lt;/pre&gt;
&lt;p&gt;Here is an example of a view-model firing a &lt;em&gt;two-way &lt;/em&gt;notification event.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ProductListViewModel : ViewModelBase&amp;lt;ProductListViewModel&amp;gt;
{
    &lt;span class="rem"&gt;// By convention we'll suffix each notification event with 'Notice'&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;NotificationEventArgs&amp;lt;&lt;span class="kwrd"&gt;bool&lt;/span&gt;, &lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt; &lt;strong&gt;ProductAvailableNotice&lt;/strong&gt;;
&lt;pre class="csharpcode"&gt;&amp;#160;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ProductAvailable(&lt;span class="kwrd"&gt;bool&lt;/span&gt; available, Exception error)&lt;/pre&gt;&lt;pre class="csharpcode"&gt;    {&lt;/pre&gt;&lt;pre class="csharpcode"&gt;        &lt;span class="rem"&gt;// Notify view that product is available&lt;/span&gt;&lt;pre class="csharpcode"&gt;        Notify(&lt;strong&gt;ProductAvailableNotice&lt;/strong&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;font style="background-color:#ffff00"&gt;NotificationEventArgs&amp;lt;&lt;span class="kwrd"&gt;bool&lt;/span&gt;, &lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt;&lt;/font&gt;
            (&lt;span class="kwrd"&gt;null&lt;/span&gt;, available, 
            &lt;strong&gt;confirm =&amp;gt; { &lt;span class="kwrd"&gt;if&lt;/span&gt; (confirm) &lt;span class="rem"&gt;/* place order */&lt;/span&gt;; }&lt;/strong&gt;));&lt;/pre&gt;&lt;pre class="csharpcode"&gt;    }&lt;br&gt;}&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;
&lt;p&gt;The view can respond handle the event in its code-behind class, supplying the &amp;lt;TIncoming&amp;gt; argument, which in this case is a boolean indicating that the user confirmed the order.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ProductListView : UserControl
{
    &lt;span class="rem"&gt;// Reference view model&lt;/span&gt;
    ProductListViewModel vm;

    &lt;span class="kwrd"&gt;public&lt;/span&gt; ProductListView()
    {
        InitializeComponent();

        &lt;span class="rem"&gt;// Get model from data context&lt;/span&gt;
        vm = (ProductListViewModel)DataContext;

        &lt;span class="rem"&gt;// Subscribe to notifications from the model&lt;/span&gt;
        &lt;font style="background-color:#ffff00"&gt;vm.ErrorNotice&lt;/font&gt; &amp;#43;= &lt;strong&gt;OnErrorNotice&lt;/strong&gt;;
        &lt;font style="background-color:#ffff00"&gt;vm.ProductAvailableNotice&lt;/font&gt; &amp;#43;= &lt;strong&gt;OnProductAvailableNotice&lt;/strong&gt;;
    }

    &lt;span class="kwrd"&gt;void&lt;/span&gt; &lt;strong&gt;OnErrorNotice&lt;/strong&gt;(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, &lt;font style="background-color:#ffff00"&gt;NotificationEventArgs&amp;lt;Exception&amp;gt;&lt;/font&gt; e)
    {
        MessageBox.Show(&lt;strong&gt;e.Message&lt;/strong&gt;, &lt;span class="str"&gt;&amp;quot;Error&amp;quot;&lt;/span&gt;, MessageBoxButton.OK);
        Debug.WriteLine(&lt;strong&gt;e.Data&lt;/strong&gt;.ToString());
    }

    &lt;span class="kwrd"&gt;void&lt;/span&gt; &lt;strong&gt;OnProductAvailableNotice&lt;/strong&gt;(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, &lt;font style="background-color:#ffff00"&gt;NotificationEventArgs&amp;lt;&lt;span class="kwrd"&gt;bool&lt;/span&gt;, &lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt;&lt;/font&gt; e)
    {
        &lt;span class="rem"&gt;// Product is available&lt;/span&gt;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;strong&gt;e.Data&lt;/strong&gt;)
        {
            &lt;span class="rem"&gt;// Show OrderProductView dialog&lt;/span&gt;
            OrderProductView orderProductView = &lt;span class="kwrd"&gt;new&lt;/span&gt; OrderProductView();
            var orderProductVm = (OrderProductViewModel)orderProductView.DataContext;
            orderProductVm.Product = vm.SelectedProduct;
            orderProductView.Closed &amp;#43;= (s, ea) =&amp;gt;
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (orderProductView.DialogResult == &lt;span class="kwrd"&gt;true&lt;/span&gt;)
                {
                    &lt;span class="rem"&gt;// Notify view model to order product&lt;/span&gt;
                    &lt;font style="background-color:#ffff00"&gt;&lt;strong&gt;e.Completed&lt;/strong&gt;(&lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;/font&gt;
                }
            };
            orderProductView.Show();
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt;
        {
            MessageBox.Show(&lt;span class="str"&gt;&amp;quot;Product is unavailable.&amp;quot;&lt;/span&gt;,
                &lt;span class="str"&gt;&amp;quot;Product Availability&amp;quot;&lt;/span&gt;, MessageBoxButton.OK);
        }
    }
}&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-size:16px; font-weight:bold"&gt;DelegateCommand&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;SimpleMvvmToolkit also contains generic and non-generic versions of a DelegateCommand class.&amp;#160; This is typically used to supply an ICommand property on the view-model, which the view can reference to bind the Command property of a ButtonBase-derived
 class.&amp;#160; This is to support scenarios where you might have a method on your view-model that accepts a parameter that is not already exposed as a property on the view-model.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; DelegateCommand&amp;lt;T&amp;gt; : ICommand
{
    &lt;span class="kwrd"&gt;private&lt;/span&gt; Func&amp;lt;T, &lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt; canExecute;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; Action&amp;lt;T&amp;gt; executeAction;

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler CanExecuteChanged;

    &lt;strong&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; DelegateCommand(&lt;font style="background-color:#ffff00"&gt;Action&amp;lt;T&amp;gt; executeAction&lt;/font&gt;,
        &lt;font style="background-color:#ffff00"&gt;Func&amp;lt;T, &lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt; canExecute&lt;/font&gt;)&lt;/strong&gt;
    {
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.executeAction = executeAction;
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.canExecute = canExecute;
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; DelegateCommand(Action&amp;lt;T&amp;gt; executeAction)
    {
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.executeAction = executeAction;
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.canExecute = x =&amp;gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RaiseCanExecuteChanged()
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (CanExecuteChanged != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
        {
            CanExecuteChanged(&lt;span class="kwrd"&gt;this&lt;/span&gt;, EventArgs.Empty);
        }
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; CanExecute(&lt;span class="kwrd"&gt;object&lt;/span&gt; parameter)
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (parameter == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
        T param = ConvertParameter(parameter);
        &lt;span class="kwrd"&gt;return&lt;/span&gt; canExecute == &lt;span class="kwrd"&gt;null&lt;/span&gt; ? &lt;span class="kwrd"&gt;true&lt;/span&gt; : canExecute(param);
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Execute(&lt;span class="kwrd"&gt;object&lt;/span&gt; parameter)
    {
        T param = ConvertParameter(parameter);
        executeAction(param);
    }

    &lt;span class="rem"&gt;// Convert parameter to expected type, parsing if necessary&lt;/span&gt;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; T ConvertParameter(&lt;span class="kwrd"&gt;object&lt;/span&gt; parameter)
    {
        &lt;span class="kwrd"&gt;string&lt;/span&gt; exceptionMessage = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;Cannot convert {0} to {1}&amp;quot;&lt;/span&gt;,
            parameter.GetType(), &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(T));

        T result = &lt;span class="kwrd"&gt;default&lt;/span&gt;(T);
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (parameter != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; parameter.GetType() == &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(T))
        {
            result = (T)parameter;
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (parameter &lt;span class="kwrd"&gt;is&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;)
        {
            MethodInfo mi = (from m &lt;span class="kwrd"&gt;in&lt;/span&gt; &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(T).GetMethods(BindingFlags.Static | BindingFlags.Public)
                                &lt;span class="kwrd"&gt;where&lt;/span&gt; m.Name == &lt;span class="str"&gt;&amp;quot;Parse&amp;quot;&lt;/span&gt; &amp;amp;&amp;amp; m.GetParameters().Count() == 1
                                select m).FirstOrDefault();
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (mi != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;try&lt;/span&gt;
                {
                    result = (T)mi.Invoke(&lt;span class="kwrd"&gt;null&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;[] { parameter });
                }
                &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
                {
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (ex.InnerException != &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;throw&lt;/span&gt; ex.InnerException;
                    &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; InvalidCastException(exceptionMessage);
                }
            }
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt;
        {
            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; InvalidCastException(exceptionMessage);
        }
        &lt;span class="kwrd"&gt;return&lt;/span&gt; result;
    }
}&lt;/pre&gt;
&lt;p&gt;Use the &lt;strong&gt;mvvmvommand&lt;/strong&gt; code snippet to insert a command that will execute a method on the ViewModel.&amp;#160; The ctor for DelegateCommand&amp;lt;T&amp;gt; also accepts a delegate for a method that accepts T and returns bool. Notice that the setter for
 the Amount property calls the RaiseCanExecuteChanged method so that the CanExecute method will be evaluated and the button will be enabled or disabled depending on whether the method returns true or false.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="preproc"&gt;#region&lt;/span&gt; Properties

&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; amount;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Amount
{
    get { &lt;span class="kwrd"&gt;return&lt;/span&gt; amount; }
    set
    {
        amount = &lt;span class="kwrd"&gt;value&lt;/span&gt;;
        NotifyPropertyChanged(m =&amp;gt; m.Amount);

        &lt;span class="rem"&gt;// Raise can execute changed event on command&lt;/span&gt;
        &lt;strong&gt;AddCommand.RaiseCanExecuteChanged();&lt;/strong&gt;
    }
}

&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; total;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Total
{
    get { &lt;span class="kwrd"&gt;return&lt;/span&gt; total; }
    set
    {
        total = &lt;span class="kwrd"&gt;value&lt;/span&gt;;
        NotifyPropertyChanged(m =&amp;gt; m.Total);
    }
}

&lt;span class="preproc"&gt;#endregion&lt;/span&gt;

&lt;span class="preproc"&gt;#region&lt;/span&gt; Methods

&lt;strong&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; Add(&lt;span class="kwrd"&gt;int&lt;/span&gt; num)&lt;/strong&gt;
{
    Total = Amount &amp;#43; num;
}

&lt;strong&gt;&lt;span class="kwrd"&gt;bool&lt;/span&gt; CanAdd(&lt;span class="kwrd"&gt;int&lt;/span&gt; num)&lt;/strong&gt;
{
    &lt;span class="kwrd"&gt;return&lt;/span&gt; Amount &amp;gt; 0;
}

&lt;span class="preproc"&gt;#endregion&lt;/span&gt;

&lt;span class="preproc"&gt;#region&lt;/span&gt; Commands

&lt;span class="kwrd"&gt;private&lt;/span&gt; DelegateCommand&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; addCommand;
&lt;span class="kwrd"&gt;public&lt;/span&gt; DelegateCommand&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; AddCommand
{
    get { &lt;span class="kwrd"&gt;return&lt;/span&gt; addCommand ?? (&lt;strong&gt;addCommand = &lt;span class="kwrd"&gt;new&lt;/span&gt; DelegateCommand&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt;(&lt;font style="background-color:#ffff00"&gt;Add&lt;/font&gt;, &lt;font style="background-color:#ffff00"&gt;CanAdd&lt;/font&gt;)&lt;/strong&gt;); }
    &lt;span class="kwrd"&gt;private&lt;/span&gt; set { addCommand = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
}

&lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;The view can then bind the Command of a Button to the AddCommand on the view-model, specifying a CommandParameter to pass to the Add method.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Button&lt;/span&gt; &lt;span class="attr"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Add 1&amp;quot;&lt;/span&gt;
        &lt;strong&gt;&lt;span class="attr"&gt;Command&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding &lt;font style="background-color:#ffff00"&gt;AddCommand&lt;/font&gt;}&amp;quot;&lt;/span&gt;
        &lt;span class="attr"&gt;CommandParameter&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;&lt;font style="background-color:#ffff00"&gt;1&lt;/font&gt;&amp;quot;&lt;/span&gt;&lt;/strong&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;font size="3"&gt;Here is a &lt;a href="http://tonysneed.com/simplemvvm/SimpleMvvmCommands.zip"&gt;
sample application&lt;/a&gt; that demonstrates the use of commands with Simple Mvvm Toolkit.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Blend EventTrigger / Action&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/h3&gt;
&lt;p&gt;While I support this approach, I find that it is not needed most of the time because you will generally have controls in the view that are bound to properties on the view-model. A parameterless method on the view-model can simply reference these properties,
 freeing you to use an blend-style &lt;strong&gt;event trigger &lt;/strong&gt;that uses a &lt;strong&gt;
CallMethodAction&lt;/strong&gt;.&amp;#160; This relieves you from having a bunch of code in your view-model just to support command-binding.&amp;#160; Event triggers can respond to any event, not just click, and there’s no need to call RaiseCanExecuteChanged.&lt;/p&gt;
&lt;p&gt;Here is a XAML snippet that calls the LoadProducts method on the view-model on the SelectionChanged event of a combo box.&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;i&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;http://schemas.microsoft.com/expression/2010/interactivity&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:red"&gt;ei&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;http://schemas.microsoft.com/expression/2010/interactions&amp;quot;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="color:green"&gt;&amp;lt;!-- Bind ItemsSource to Categories --&amp;gt;
&amp;lt;!-- Bind SelectedItem to SelectedCategory --&amp;gt;
&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ComboBox &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;23&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;categoriesComboBox&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;149&amp;quot; 
            &lt;/span&gt;&lt;span style="color:red"&gt;DisplayMemberPath&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;CategoryName&amp;quot; 
            &lt;/span&gt;&lt;span style="color:red"&gt;ItemsSource&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding &lt;/span&gt;&lt;span style="color:red"&gt;Path&lt;/span&gt;&lt;span style="color:blue"&gt;=Categories}&amp;quot; 
            &lt;/span&gt;&lt;span style="color:red"&gt;SelectedItem&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding &lt;/span&gt;&lt;span style="color:red"&gt;Path&lt;/span&gt;&lt;span style="color:blue"&gt;=SelectedCategory, &lt;/span&gt;&lt;span style="color:red"&gt;Mode&lt;/span&gt;&lt;span style="color:blue"&gt;=TwoWay}&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;Margin&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;0,5&amp;quot;&amp;gt;
    &lt;/span&gt;&lt;span style="color:green"&gt;&amp;lt;!-- Call LoadProducts on SelectionChanged event --&amp;gt;
    &lt;/span&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;i&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;Interaction.Triggers&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;i&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;EventTrigger &lt;/span&gt;&lt;span style="color:red"&gt;EventName&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;SelectionChanged&amp;quot;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ei&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;CallMethodAction 
                &lt;/span&gt;&lt;span style="color:red"&gt;TargetObject&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:blue"&gt;}&amp;quot;
                &lt;/span&gt;&lt;span style="color:red"&gt;MethodName&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;LoadProducts&amp;quot;/&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;i&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;EventTrigger&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;i&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;Interaction.Triggers&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ComboBox&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;The toolkit comes with two XML code snippets you can use to insert namespaces and the event trigger:
&lt;strong&gt;mvvmxmlns&lt;/strong&gt; and &lt;strong&gt;mvvmtrigger&lt;/strong&gt;.&amp;#160; However, Visual Studio does not support using code snippets in a XAML file, you you need to open the file with the
&lt;em&gt;Visual Studio XML Editor &lt;/em&gt;(right-click, Open With, XML Text Editor).&amp;#160; Then place the cursor where you want to use the snippet, right-click and select Insert Snippet).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;MessageBus&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sometimes you need to pass messages among view-models in your application.&amp;#160; A good example would be when you want to navigate to a particular view based on some business logic.&amp;#160; It would not be a good idea to reference the main view-model directly
 from another view-model.&amp;#160; Doing so would create interdependencies between view-models that would be difficult to maintain (a phenomenon referred to as
&lt;em&gt;spaghetti code&lt;/em&gt;).&amp;#160; This is where a &lt;em&gt;message bus &lt;/em&gt;(also called an event mediator or aggregator) comes in handy. The CustomerViewModel, for example, can then send a message to the message bus using a specific token, and the MainPageViewModel
 can subscribe to receive a message whenever someone sends a message with this same token to the message bus.&amp;#160; Message tokens are simply strings that can be defined as constants in a class.&lt;/p&gt;
&lt;p&gt;To make it easy to send and receive messages via the MessageBus, ViewModelBase&amp;lt;TViewModel&amp;gt; has two helper methods:&amp;#160;
&lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;RegisterToReceiveMessages&lt;/font&gt; &lt;/strong&gt;
and &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;SendMessage&lt;/font&gt;&lt;/strong&gt;. Here is a
&lt;strong&gt;Save &lt;/strong&gt;method in the CustomerViewModel that posts a message to the MessageBus using a token defined as a string constant in the MessageTokens class.&amp;#160; The message content is simply a NotificationEventArgs object, which in this case simply
 passes the name of the page we want to navigate to.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Save()
{
&lt;strong&gt;    &lt;font style="background-color:#ffff00"&gt;SendMessage&lt;/font&gt;(MessageTokens.Navigation,
        &lt;span class="kwrd"&gt;new&lt;/span&gt; NotificationEventArgs(PageNames.Home));
&lt;/strong&gt;}&lt;/pre&gt;
&lt;p&gt;The MainPageViewModel subscribes to receive messages with the MessageTokens.Navigation token.&amp;#160; When a message arrives at the MessageBus with this token, the MessageBus will call the method supplied to the Register method.&amp;#160; In this case the
&lt;strong&gt;OnNavigationRequested&lt;/strong&gt; method will be called, which will navigate to the specified page.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MainPageViewModel : ViewModelBase&amp;lt;MainPageViewModel&amp;gt;
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; MainPageViewModel()
    {    &lt;pre class="csharpcode"&gt;&lt;strong&gt;        &lt;font style="background-color:#ffff00"&gt;RegisterToReceiveMessages&lt;/font&gt;(MessageTokens.Navigation, OnNavigationRequested);
&lt;/strong&gt;    }

    &lt;span class="kwrd"&gt;void&lt;/span&gt; &lt;strong&gt;OnNavigationRequested&lt;/strong&gt;(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, NotificationEventArgs e)
    {
        Navigate(e.Message);
    }
}&lt;/pre&gt;&lt;/pre&gt;
&lt;p&gt;Because the MessageBus implements a &lt;em&gt;leak-proof eventing model&lt;/em&gt;, there is no need for the MainPageViewModel to unregister for receiving messages.&amp;#160; Message receivers are weakly referenced by the MessageBus, so they can be garbage collected at
 any time.&lt;/p&gt;
&lt;p&gt;That’s all there is to it!&amp;#160; As with direct notifications, you can pass additional data by specifying a TOutgoing argument on NotificationEventArgs.&amp;#160; And you can even have the message recipient call back the sender by passing in a callback method
 with a TIncoming argument.&amp;#160; Strongly-typed, loosely-coupled two-way communication.&amp;#160; Cool.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:16px; font-weight:bold"&gt;ViewModelLocator&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;There are many ways to create ViewModels.&amp;#160; But for a better design-time experience it’s a good idea to bind the DataContext of the View directly to a ViewModel.&amp;#160; There are times, however, when you want to supply a service agent to the ViewModel’s
 constructor, which means you cannot create the ViewModel in the XAML of the View.&amp;#160; What you need to solve this problem is a
&lt;strong&gt;ViewModelLocator&lt;/strong&gt;.&amp;#160; Luckily for you, the toolkit comes with a Visual Studio item template.&amp;#160; Simply add a new item to the project and select SimpleMvvmViewModelLocator from the dialog.&amp;#160; Then use the mvvmlocator code snippet to
 insert a property that creates a ViewModel on demand while supplying a service agent to the ViewModel’s ctor.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; &lt;strong&gt;&lt;font style="background-color:#ffffff"&gt;ViewModelLocator&lt;/font&gt;&lt;/strong&gt;
{
    &lt;span class="rem"&gt;// Create CustomerViewModel on demand&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; CustomerViewModel &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;CustomerViewModel&lt;/font&gt;&lt;/strong&gt;
    {
        get
        {
            &lt;strong&gt;ICustomerServiceAgent serviceAgent = &lt;span class="kwrd"&gt;new&lt;/span&gt; MockCustomerServiceAgent();
&lt;/strong&gt;            &lt;strong&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;font style="background-color:#ffff00"&gt;&lt;span class="kwrd"&gt;new&lt;/span&gt; CustomerViewModel(serviceAgent)&lt;/font&gt;;
&lt;/strong&gt;        }
    }
}&lt;/pre&gt;
&lt;p&gt;An instance of the ViewModelLocator is stored in the resource dictionary of App.xaml and identified with a key of “Locator”.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Application&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
             &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; 
             &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SimpleMvvmSilverlight.App&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;strong&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Application.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;vm:&lt;font style="background-color:#ffff00"&gt;ViewModelLocator&lt;/font&gt;&lt;/span&gt; &lt;span class="attr"&gt;xmlns:vm&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;clr-namespace:SimpleMvvmSilverlight&amp;quot;&lt;/span&gt;
            &lt;font style="background-color:#ffff00"&gt;&lt;span class="attr"&gt;x:Key&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Locator&amp;quot;&lt;/span&gt;&lt;/font&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Application.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/strong&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Application&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Then you need to bind the DataContext of the View using a &lt;strong&gt;StaticResource&lt;/strong&gt; with the “Locator” key, specifying the CustomerViewModel property for the Path.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;UserControl&lt;/span&gt; &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SimpleMvvmSilverlight8.CustomerView&amp;quot;&lt;/span&gt;
    &lt;strong&gt;&lt;span class="attr"&gt;DataContext&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding Source={&lt;font style="background-color:#ffff00"&gt;StaticResource Locator&lt;/font&gt;}, Path=&lt;font style="background-color:#ffff00"&gt;CustomerViewModel&lt;/font&gt;}&amp;quot;&lt;/span&gt;&lt;/strong&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;ServiceAgentExportAttribute, IServiceAgentMetadata, AgentType&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These classes support using &lt;strong&gt;Dependency Injection &lt;/strong&gt;(also called Inversion of Control) to specify which service agent to use in a view-model locator.&amp;#160; This is useful for executing unit tests with mock data so that they run faster and do
 not depend on external factors such as the availability of services or data stores.&amp;#160; The simplest way to implement dependency injection is to use Managed Extensibility Framework (MEF), which ships with Silverlight out of the box.&amp;#160; The way you do
 this is to define a custom export attribute which includes a property you can use to as metadata to identify which class you want to materialize.&amp;#160; A full discussion of MEF is beyond the scope of this documentation, but you can find more information on
 my &lt;a href="http://blog.tonysneed.com/2010/11/19/webinar-mef-explained"&gt;blog&lt;/a&gt;, including a screencast, slides and code samples.&lt;/p&gt;
&lt;p&gt;The way you use these classes is to decorate service agents with the &lt;strong&gt;ServiceAgentExport&lt;/strong&gt; attribute, passing the service agent interface as the contract type and an
&lt;strong&gt;AgentType&lt;/strong&gt; enum value (which can be Unspecified, Real or Mock).&lt;/p&gt;
&lt;pre class="csharpcode"&gt;[&lt;font style="background-color:#ffff00"&gt;&lt;strong&gt;ServiceAgentExport&lt;/strong&gt;&lt;/font&gt;(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;strong&gt;ICustomerServiceAgent&lt;/strong&gt;), &lt;strong&gt;AgentType = AgentType.Mock&lt;/strong&gt;)]
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MockItemListServiceAgent : IItemListServiceAgent
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetItems(Action&amp;lt;Item, Exception&amp;gt; completed)
    {
        &lt;span class="rem"&gt;// Use mock data for Customer ...&lt;/span&gt;
    }
}&lt;/pre&gt;
&lt;p&gt;You can then add an “injected” view-model locator using the &lt;strong&gt;SimpleMvvmViewModelInjectedLocator
&lt;/strong&gt;Visual Studio item template that comes with the toolkit.&amp;#160; This class as an
&lt;strong&gt;AgentType &lt;/strong&gt;property which unit tests can set to &lt;strong&gt;Mock&lt;/strong&gt;. There is also a ServiceAgents property with an
&lt;strong&gt;ImportMany &lt;/strong&gt;MEF attribute.&amp;#160; It uses a Lazy&amp;lt;T, TMetadata&amp;gt; type to only get service agents with a particular AgentType used in its ServiceAgentExport attribute.&amp;#160; The constructor of the view-model asks MEF to set the ServiceAgents
 property.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; InjectedViewModelLocator
{
    &lt;span class="kwrd"&gt;static&lt;/span&gt; InjectedViewModelLocator()
    {
        &lt;span class="rem"&gt;// Expose parts in the current XAP to MEF&lt;/span&gt;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!DesignerProperties.IsInDesignTool)
            &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;CompositionHost.Initialize&lt;/font&gt;&lt;/strong&gt;(&lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentCatalog());
    }

    &lt;span class="rem"&gt;// TODO: Change agent type to Real&lt;/span&gt;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; AgentType agentType = &lt;strong&gt;AgentType.Mock&lt;/strong&gt;;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; AgentType AgentType
    {
        get { &lt;span class="kwrd"&gt;return&lt;/span&gt; agentType; }
        set { agentType = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; InjectedViewModelLocator()
    {
        &lt;span class="rem"&gt;// Inject service agents at runtime&lt;/span&gt;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!DesignerProperties.IsInDesignTool)
        {
            &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;CompositionInitializer.SatisfyImports&lt;/font&gt;&lt;/strong&gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt;);
            Debug.Assert(&lt;span class="kwrd"&gt;this&lt;/span&gt;.ItemListViewModel != &lt;span class="kwrd"&gt;null&lt;/span&gt;,
                &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;No IItemListServiceAgent has ServiceAgentExport with AgentType = {0}&amp;quot;&lt;/span&gt;, agentType));
        }
    }

    &lt;span class="rem"&gt;// Create MainPageViewModel on demand&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; MainPageViewModel MainPageViewModel
    {
        get { &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; MainPageViewModel(); }
    }

    &lt;span class="rem"&gt;// Create ItemListViewModel on demand&lt;/span&gt;
    &lt;strong&gt;[ImportMany]&lt;/strong&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; Lazy&amp;lt;IItemListServiceAgent, IServiceAgentMetadata&amp;gt;[] ItemListServiceAgents { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; ItemListViewModel &lt;strong&gt;ItemListViewModel&lt;/strong&gt;
    {
        get
        {
            var serviceAgent = ItemListServiceAgents
                &lt;strong&gt;.Where(sa =&amp;gt; &lt;font style="background-color:#ffff00"&gt;sa.Metadata.AgentType == agentType&lt;/font&gt;).FirstOrDefault();
&lt;/strong&gt;            ItemListViewModel viewModel = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (serviceAgent != &lt;span class="kwrd"&gt;null&lt;/span&gt;) viewModel = &lt;span class="kwrd"&gt;new&lt;/span&gt; ItemListViewModel(serviceAgent.Value);
            &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (DesignerProperties.IsInDesignTool) viewModel = &lt;span class="kwrd"&gt;new&lt;/span&gt; ItemListViewModel();
            &lt;span class="kwrd"&gt;return&lt;/span&gt; viewModel;
        }
    }
}&lt;/pre&gt;
&lt;p&gt;You can then add a Silverlight Unit Test Application to your project (provided you’ve installed the Silverlight Toolkit) and create a test that sets AgentType on InjectedViewModelLocator to Mock before executing the test.&amp;#160; Here is an example which also
 plays nice with the asynchronous nature of the LoadItems mehod.&amp;#160; The unit test app requires that to run the app to execute the tests.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;[TestClass]
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ItemListViewModelTests : SilverlightTest
{
    &lt;span class="rem"&gt;// Mock data&lt;/span&gt;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; List&amp;lt;Item&amp;gt; mockItems = MockItems.GetItems();

    &lt;span class="rem"&gt;// Add ViewModel field&lt;/span&gt;
    ItemListViewModel viewModel;

    &lt;span class="rem"&gt;// Initialize ViewModel&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; ItemListViewModelTests()
    {
        &lt;span class="rem"&gt;// Create locator&lt;/span&gt;
&lt;strong&gt;        var locator = &lt;span class="kwrd"&gt;new&lt;/span&gt; InjectedViewModelLocator();
        &lt;font style="background-color:#ffff00"&gt;locator.AgentType = AgentType.Mock;&lt;/font&gt;
&lt;/strong&gt;
        &lt;span class="rem"&gt;// Get ViewModel&lt;/span&gt;
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.viewModel = locator.ItemListViewModel;
        Assert.IsNotNull(viewModel, &lt;span class="str"&gt;&amp;quot;ServiceAgent not injected for ViewModel&amp;quot;&lt;/span&gt;);
    }

    [TestMethod, Asynchronous]
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; LoadItemsTest()
    {
        &lt;span class="rem"&gt;// Completion flag&lt;/span&gt;
        &lt;span class="kwrd"&gt;bool&lt;/span&gt; completed = &lt;span class="kwrd"&gt;false&lt;/span&gt;;

        &lt;span class="rem"&gt;// Handle error&lt;/span&gt;
        viewModel.ErrorNotice &amp;#43;= (s, ea) =&amp;gt; Assert.Fail(ea.Data.Message);

        &lt;span class="rem"&gt;// Handle property change&lt;/span&gt;
        viewModel.PropertyChanged &amp;#43;= (s, ea) =&amp;gt;
        {
            &lt;span class="kwrd"&gt;string&lt;/span&gt; propName = &lt;span class="kwrd"&gt;this&lt;/span&gt;.GetPropertyName&amp;lt;ItemListViewModel,
                ObservableCollection&amp;lt;Item&amp;gt;&amp;gt;(vm =&amp;gt; vm.Items);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (ea.PropertyName == propName
                &amp;amp;&amp;amp; viewModel.Items != &lt;span class="kwrd"&gt;null&lt;/span&gt;) completed = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
        };

        &lt;span class="rem"&gt;// Call ViewModel method&lt;/span&gt;
        EnqueueCallback(() =&amp;gt; &lt;strong&gt;&lt;font style="background-color:#ffff00"&gt;viewModel.LoadItems()&lt;/font&gt;&lt;/strong&gt;);

        &lt;span class="rem"&gt;// Wait for completion with timeout&lt;/span&gt;
        &lt;span class="kwrd"&gt;int&lt;/span&gt; timeoutSeconds = 10; &lt;span class="rem"&gt;//Debugging: Timeout.Infinite&lt;/span&gt;
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.EnqueueConditional(() =&amp;gt; completed, timeoutSeconds);

        &lt;span class="rem"&gt;// Perform Asserts&lt;/span&gt;
        EnqueueCallback(() =&amp;gt;
            {
                &lt;span class="rem"&gt;// Categories has been set to 8&lt;/span&gt;
                Assert.IsNotNull(viewModel.Items);
                Assert.Equals(viewModel.Items.Count, 8);
            });

        &lt;span class="rem"&gt;// Complete test&lt;/span&gt;
        EnqueueTestComplete();
    }
}&lt;/pre&gt;
&lt;p&gt;Happy coding!&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>tonysneed</author><pubDate>Sun, 14 Aug 2011 19:53:39 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Programming Reference 20110814075339P</guid></item><item><title>New Comment on "WCF RIA Services"</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?title=WCF RIA Services&amp;ANCHOR#C19840</link><description>Very, very good&amp;#33; At least one tutorial which covers MVVM, Entity Framework and WCF RIA Services&amp;#33;&amp;#10;Perhaps in reflection how to separate Products View as dynamic view &amp;#40;module&amp;#41; which is loaded on demand from xap file &amp;#40;using MEF&amp;#41;&amp;#63;&amp;#10;Thank you very much&amp;#33;</description><author>BravcM</author><pubDate>Thu, 02 Jun 2011 09:43:34 GMT</pubDate><guid isPermaLink="false">New Comment on "WCF RIA Services" 20110602094334A</guid></item><item><title>New Comment on "Getting Started"</title><link>http://simplemvvmtoolkit.codeplex.com/wikipage?title=Getting Started&amp;ANCHOR#C19837</link><description>&amp;#64;Dolemike&amp;#58; Glad you figured it out. &amp;#58;-&amp;#41; I will need to do a Getting Started for WP7.</description><author>tonysneed</author><pubDate>Wed, 01 Jun 2011 22:06:51 GMT</pubDate><guid isPermaLink="false">New Comment on "Getting Started" 20110601100651P</guid></item></channel></rss>