<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>mvvmlight Wiki &amp; Documentation Rss Feed</title><link>http://mvvmlight.codeplex.com/Wiki/View.aspx?title=Home</link><description>mvvmlight Wiki Rss Description</description><item><title>New Comment on "Documentation"</title><link>http://mvvmlight.codeplex.com/documentation?&amp;ANCHOR#C26049</link><description>Honestly I don&amp;#39;t understand why this page have some outdated links to blog and one page tutorial when should have its own documentation.</description><author>Zenon66</author><pubDate>Sat, 29 Dec 2012 19:03:58 GMT</pubDate><guid isPermaLink="false">New Comment on "Documentation" 20121229070358P</guid></item><item><title>New Comment on "Documentation"</title><link>http://mvvmlight.codeplex.com/documentation?&amp;ANCHOR#C25736</link><description>The code on Liberty&amp;#39;s page is way out of date from what is in your code here. Can&amp;#39;t follow his instruction.  Consider writing a formal instruction and putting it here, along with several dozen example projects that use it from Hello World, to something complex.</description><author>Familyghost</author><pubDate>Wed, 28 Nov 2012 19:39:52 GMT</pubDate><guid isPermaLink="false">New Comment on "Documentation" 20121128073952P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://mvvmlight.codeplex.com/documentation?version=5</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;WHAT ABOUT WINDOWS 8&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The version currently in Codeplex does not compile or run in Windows 8 Consumer Preview. A new release is in the works and will be published soon to support Windows 8 Consumer preview. Thanks for your patience.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Building the code&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In order to get the latest source code from the Source Code section, build it, unit test it, and get the latest DLLs installed, check this article:&lt;br /&gt;&lt;a href="http://www.galasoft.ch/mvvm/building/" class="externalLink"&gt;http://www.galasoft.ch/mvvm/building/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installing the binaries with NuGet&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You can add MVVM Light to an existing Windows Presentation Foundation (3.5 or 4), Silverlight (3 or 4) or to a Windows Phone (7 or 7.1 beta) project with the help of the NuGet package manager. For more information, visit &lt;a href="http://blog.galasoft.ch/archive/2011/05/07/mvvm-light-v3-on-nuget-now-with-wp7-support.aspx" class="externalLink"&gt;http://blog.galasoft.ch/archive/2011/05/07/mvvm-light-v3-on-nuget-now-with-wp7-support.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installing the full toolkit (binaries, templates, snippets)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Right now the installation process is still manual as described at &lt;a href="http://www.galasoft.ch/mvvm/installing/manually/" class="externalLink"&gt;http://www.galasoft.ch/mvvm/installing/manually/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. This will change soon with an automated installer.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Creating your first application&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;To create an application in Visual Studio: &lt;a href="http://www.galasoft.ch/mvvm/creating/" class="externalLink"&gt;http://www.galasoft.ch/mvvm/creating/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;To create an application in Blend: &lt;a href="http://www.galasoft.ch/mvvm/creatingblend/" class="externalLink"&gt;http://www.galasoft.ch/mvvm/creatingblend/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Understanding MVVM&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;To start with MVVM and understand the basics, see my MIX10 session, available in video at &lt;a href="http://live.visitmix.com/Archive#VideoList" class="externalLink"&gt;http://live.visitmix.com/Archive#VideoList&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (scroll down to EX14). A slightly longer version (including a Windows Phone 7 demo) is available at &lt;a href="http://channel9.msdn.com/posts/kreekman/TechDays-2010-Understanding-the-Model-View-ViewModel-pattern/" class="externalLink"&gt;http://channel9.msdn.com/posts/kreekman/TechDays-2010-Understanding-the-Model-View-ViewModel-pattern/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A Deep Dive session is going to take place at MIX11 (April 2011), stay tuned for more information.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Getting started with MVVM Light Toolkit&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A good &amp;quot;primer&amp;quot; series by Jesse Liberty: &lt;a href="http://jesseliberty.com/2011/01/04/wpfs-mvvm-light-toolkit-soup-to-nuts-part-i/" class="externalLink"&gt;http://jesseliberty.com/2011/01/04/wpfs-mvvm-light-toolkit-soup-to-nuts-part-i/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Another nice series by Chris Koenig, using MVVM Light: &lt;a href="http://chriskoenig.net/category/development/mvvm/" class="externalLink"&gt;http://chriskoenig.net/category/development/mvvm/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More articles&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There are a lot of articles written about the MVVM Light Toolkit: Info about new versions, documentation about specific components of MVVM Light, etc.&lt;br /&gt;For more information, please check &lt;a href="http://www.galasoft.ch/mvvm/#tutorials" class="externalLink"&gt;http://www.galasoft.ch/mvvm/#tutorials&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Thu, 01 Mar 2012 17:49:38 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20120301054938P</guid></item><item><title>Updated Wiki: Home</title><link>http://mvvmlight.codeplex.com/wikipage?version=16</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Project Description&lt;/h1&gt;The MVVM Light Toolkit is a set of components helping people to get started in the Model - View - ViewModel pattern in Silverlight and WPF. It is a light and pragmatic framework that contains only the essential components needed.&lt;br /&gt;
&lt;h1&gt;Get started&lt;/h1&gt;More information about the MVVM Light Toolkit can be found on &lt;a href="http://www.galasoft.ch/mvvm" class="externalLink"&gt;http://www.galasoft.ch/mvvm&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Get more info about MVVM&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Understanding the MVVM Pattern (MIX10 session)&lt;/li&gt;&lt;/ul&gt;
&lt;a href="http://www.galasoft.ch/mvvmvideo1" class="externalLink"&gt;http://www.galasoft.ch/mvvmvideo1&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Deep Dive MVVM (MIX11 session)&lt;/li&gt;&lt;/ul&gt;
&lt;a href="http://www.galasoft.ch/mvvmvideo2" class="externalLink"&gt;http://www.galasoft.ch/mvvmvideo2&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;Donate&lt;/h1&gt;If you are so enclined, you can &lt;a href="http://www.galasoft.ch/mvvm/donate" class="externalLink"&gt;donate to MVVM Light Toolkit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;Or, if you prefer, you can pay me a beer next time we&amp;#39;re in the same vicinity. Really, it is OK too :)&lt;br /&gt;
&lt;h1&gt;Latest news:&lt;/h1&gt;The latest news about MVVM Light are available from the MVVM feed on my blog at &lt;a href="http://blog.galasoft.ch/category/10201.aspx" class="externalLink"&gt;http://blog.galasoft.ch/category/10201.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;(&lt;a href="http://blog.galasoft.ch/lbugnion/category/10201.aspx/rss" class="externalLink"&gt;RSS feed&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;div class="rss"&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/10/03/mvvm-light-toolkit-for-windows-8-preview-mvvmlight-win8.aspx"&gt;MVVM Light Toolkit for Windows 8 (preview) #mvvmlight #win8&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Monday, October 03, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;I was very optimistic when I first saw Metro style apps coded in C# on Windows 8, because for the most part they are not much different than the well known XAML/C# pair on Silverlight or WPF. This led me to brag a bit about probably having a port of MVVM Light ready “in a few days”. Of course I didn’t take in account that I would have a great time the week after //build in Seattle, with fantastic weather and tons of friends to have dinner and conversations with. Needless to say, the few days turned out, in fact, to be a couple of weeks.&lt;/p&gt;  &lt;p&gt;Nonetheless, I am proud and happy to announce the availability of MVVM Light Toolkit for Windows 8. Let’s be clear, this is a preview version. All the unit tests are green for the selected components (there are a couple of components not ported yet, see the section below titled “Missing components”). However, a green unit test does not quite mean that the tested component is completely safe to use, so please be careful with that material and &lt;a href="mailto:laurent@galasoft.ch"&gt;send me your feedback if you find issues&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;Installation&lt;/h2&gt;  &lt;p&gt;MVVM Light for Windows 8 is a side-by-side install with the standard MVVM Light V3 or V4 beta. Simply &lt;a href="http://mvvmlight.codeplex.com/releases/view/74325"&gt;download and run the MSI from Codeplex&lt;/a&gt;. As usual, the last step of the installation performs a “/setup” of Visual Studio to actualize the project template cache, and unfortunately this last step can last very long. Please be patient and don’t cancel before the end! The installation process is very similar to that described on the &lt;a href="http://www.galasoft.ch/mvvm/installing"&gt;MVVM Light installation page&lt;/a&gt; (except that there is no NuGet installer for VS11 yet).&lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm7.static.flickr.com/6168/6207048445_7128fe2beb_o_d.png" /&gt;&lt;/p&gt;  &lt;p&gt;Note however that if you uninstall MVVM Light V3/V4b, but still want to keep MVVM Light for Win8, you may have to repair MVVM Light for Win8. Simply run the installer again and select “Repair”.&lt;/p&gt;  &lt;h2&gt;Ported components&lt;/h2&gt;  &lt;p&gt;Almost all MVVM Light components are also available in the Windows 8 version. The ported components are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;ObservableObject&lt;/strong&gt; including all ways to raise PropertyChanged. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;ViewModelBase&lt;/strong&gt; including all ways to raise PropertyChanged. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Messenger&lt;/strong&gt; including all message types except DialogMessage (see below). &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;RelayCommand&lt;/strong&gt; with and without parameter. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;SimpleIoc&lt;/strong&gt; which might well be the very first IOC container working on Windows 8. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;File, New Project&lt;/h3&gt;  &lt;p&gt;I also created a Metro style version of the MVVM Light project template. To create a new MVVM Light-powered Metro Style application, follow the steps:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Select the menu File, New, Project. &lt;/li&gt;    &lt;li&gt;In the New Project dialog, select the category Visual C# / Wndows Metro style and double click the MvvmLight (Win8) template. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;img src="http://farm7.static.flickr.com/6164/6207665952_cc8b895362_b_d.jpg" width="560" height="383" /&gt;&lt;/p&gt;  &lt;p&gt;The created application is a very simple MVVM application, very similar to the ones that get created in Silverlight, WPF or Windows Phone 7: it contains a model with IDataService, a dummy runtime implementation and a design time implementation. The ViewModelLocator is available and “wired” (using the SimpleIoc container) as well as a MainViewModel that is set as DataContext on the MainPage.&lt;/p&gt;  &lt;h2&gt;Missing components&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Skins&lt;/strong&gt;: There is a small change in the way that resource dictionaries are handled in Windows 8. I need to sort things out, so right now there is no “MainSkin.xaml” in the project template. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;DialogMessage&lt;/strong&gt;: This type is bugging me in V3/V4b because it is bringing the MessageBoxResult type into the ViewModel. I am looking at ways to make it better by converting the MessageBoxResult into a vanilla Boolean. In Windows 8, MessageBoxResult does not exist anymore (there is no MessageBox or popups of any kinds in Metro style apps). Consequently, the DialogMessage does not build, and I decided to just remove it for now. I will add it again when I refactor to the “vanilla” version. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;EventToCommand&lt;/strong&gt;: There are no Blend behaviors in Windows 8 yet (important word: &lt;strong&gt;yet&lt;/strong&gt;). I am looking at ways to have behaviors on Windows 8 before Blend 5 for XAML gets released. Stay tuned. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;DispatcherHelper&lt;/strong&gt;: The Dispatcher object has changed quite a lot in Windows 8, and I am looking at ways to keep the DispatcherHelper compatible with previous versions of MVVM Light by wrapping these differences. It shouldn’t be a big deal, but I want to give myself a little time to get it right (hopefully). &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Next steps&lt;/h2&gt;  &lt;p&gt;I intend to build a small sample application (very similar to the one I built for my MIX11 talk) to try the various components in real life conditions. This will of course be the topic of an upcoming blog post.&lt;/p&gt;  &lt;p&gt;I encourage everyone to try these components in Windows 8 preview, and please don’t be shy with your feedback!&lt;/p&gt;  &lt;p&gt;Cheers,    &lt;br /&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; left: 130px; top: -36px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-top-style: none; margin-bottom: -20px; height: 23px; width: 450px; border-bottom-style: none; overflow: hidden; border-right-style: none; border-left-style: none; margin-top: 7px" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/10/03/mvvm-light-toolkit-for-windows-8-preview-mvvmlight-win8.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/147166.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/25/breaking-change-raising-propertychanged-with-string.empty-in-winrt--windows.aspx"&gt;Breaking change: Raising PropertyChanged with string.Empty in WinRT / Windows 8&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, September 25, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;In the developer preview of Windows 8, I just noticed a breaking change in the way that data bindings react to the &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.data.inotifypropertychanged.propertychanged(v=VS.85).aspx"&gt;PropertyChanged&lt;/a&gt;&lt;/strong&gt; event.&lt;/p&gt;  &lt;p&gt;First a bit of background: Often, objects that are databound to the UI are simple data objects (also called ViewModels) that implement the &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.data.inotifypropertychanged(v=VS.85).aspx"&gt;INotifyPropertyChanged&lt;/a&gt;&lt;/strong&gt; interface. This interface is very simple and defines just one event, the PropertyChanged event, that needs to be raised by the ViewModel when one of its property changes. It is what makes the ViewModel “observable”. If a property of another object (typically a UI element) is data bound (through a Binding object, often set declaratively in XAML), then the value of the observing property will be synchronized to the value of the observable property.&lt;/p&gt;  &lt;p&gt;Raising the PropertyChanged event requires an instance of the &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.data.propertychangedeventargs(v=VS.85).aspx"&gt;PropertyChangedEventArgs&lt;/a&gt;&lt;/strong&gt; class, which takes a string as sole parameter of its constructor. The string to be passed is the name of the observable property.&lt;/p&gt;  &lt;h2&gt;Raising with string.Empty or null&lt;/h2&gt;  &lt;p&gt;In WPF and Silverlight, it is possible to raise the PropertyChanged event with an instance of the PropertyChangedEventArgs class constructed with string.Empty (or null) instead of an existing property’s name. When a PropertyChanged event is raised in this manner, the UI will re-query the value of each property of the ViewModel that is data bound to the UI. This is a convenient way to raise but one event and force the UI to update itself in response to cascading changes, for example. As such, this can be a good way to increase the performance of the application.&lt;/p&gt;  &lt;h2&gt;The breaking change in WinRT&lt;/h2&gt;  &lt;p&gt;However, while unit testing the version of &lt;a href="http://www.galasoft.ch/mvvm"&gt;MVVM Light&lt;/a&gt; for WinRT, I found out that raising the PropertyChanged event with an empty string or null does not update the bindings. I quickly coded a repro, and then coded the exact same code in Silverlight, and indeed the two applications do not react the same at all.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://galasoft.ch/blogs-all/Resources/20110925/INPCBreakingWinRT.zip"&gt;Metro – style repro&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://galasoft.ch/blogs-all/Resources/20110925/INPCBreakingSilverlight.zip"&gt;Expected behavior in Silverlight for comparison&lt;/a&gt;.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Hopefully this is only an oversight and this will be fixed in a future version. &lt;/p&gt;  &lt;p&gt;Cheers,   &lt;br /&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; left: 130px; top: -36px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-top-style: none; margin-bottom: -20px; height: 23px; width: 450px; border-bottom-style: none; overflow: hidden; border-right-style: none; border-left-style: none; margin-top: 7px" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/09/25/breaking-change-raising-propertychanged-with-string.empty-in-winrt--windows.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/147041.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/25/quick-tip-select-the-correct-inotifypropertychanged-in-windows-8.aspx"&gt;Quick tip: Select the correct INotifyPropertyChanged in Windows 8 / WinRT&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, September 25, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Microsoft loves MVVM and INotifyPropertyChanged so much that they included this very useful interface twice in the new WinRT framework. Unfortunately, only one of these is working correctly (and the other one is likely a bug, remnant from the past &lt;img class="wlEmoticon wlEmoticon-winkingsmile" style="border-top-style: none; border-bottom-style: none; border-right-style: none; border-left-style: none" alt="Winking smile" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/Windows-Live-Writer/Quick-tip-Select-the-correct-INotifyProp_1400B/wlEmoticon-winkingsmile_2.png" /&gt;)&lt;/p&gt;  &lt;p&gt;When implementing INotifyPropertyChanged, make sure that you select the correct one! The one you want to use is into &lt;strong&gt;Windows.UI.Xaml.Data&lt;/strong&gt;. The old one, the one you DON’T WANT is into System.ComponentModel (the same namespace it was in WPF and Silverlight). If you select the wrong one, the Bindings will not be updated and the UI will remain dead as a dead fish. &lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm7.static.flickr.com/6173/6182240057_d008054937_o_d.png" /&gt;&lt;/p&gt;  &lt;p&gt;I mentioned before that Microsoft took the “once in a lifetime” opportunity (well, 5-10 years is a lifetime in the world of computers) to clean up and rearrange classes within the framework. This is one of the signs right here. As for the System.ComponentModel.INotifyPropertyChanged, I guess it will be removed in a later release of the WinRT framework.&lt;/p&gt;  &lt;p&gt;Cheers,&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; left: 130px; top: -36px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-top-style: none; margin-bottom: -20px; height: 23px; width: 450px; border-bottom-style: none; overflow: hidden; border-right-style: none; border-left-style: none; margin-top: 7px" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/09/25/quick-tip-select-the-correct-inotifypropertychanged-in-windows-8.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/147038.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/25/detecting-design-mode-in-windows-8winrt.aspx"&gt;Detecting design mode in Windows 8/WinRT&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, September 25, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;One of the very useful features of the &lt;a href="http://www.galasoft.ch/mvvm"&gt;MVVM Light toolkit&lt;/a&gt; is to help with the creation of design time data, in order to give something to see on the design surface (Expression Blend, Visual Studio designer). This is especially useful when designing list controls such as ListBox, ComboBox, etc. Without design time data, these controls will remain empty, and the designer will not see what he is working on. This can cost a lot of time and cause frustration.&lt;/p&gt;  &lt;p&gt;Detecting design mode was always incompatible in WPF and in Silverlight.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In WPF, we use a rather complicated snippet: &lt;/li&gt; &lt;/ul&gt;  &lt;pre class="csharp" name="code"&gt;var prop = DesignerProperties.IsInDesignModeProperty;&lt;br /&gt;_isInDesignMode&lt;br /&gt;    = (bool)DependencyPropertyDescriptor&lt;br /&gt;                 .FromProperty(prop, typeof(FrameworkElement))&lt;br /&gt;                 .Metadata.DefaultValue;&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;In Silverlight, there is a convenient property: &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;_isInDesignMode = DesignerProperties.IsInDesignTool;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;In WinRT, &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.designmode.designmodeenabled(v=VS.85).aspx"&gt;we have to use yet another property&lt;/a&gt;: &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;_isInDesignMode &lt;br /&gt;    = Windows.ApplicationModel.DesignMode.DesignModeEnabled;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Abstracting the differences&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;These differences can make it difficult to share code between these environments. This is why the MVVM Light toolkit abstracts these and provides a convenient property on the ViewModelBase class:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;(within a ViewModel deriving from ViewModelBase):&lt;br /&gt;&lt;br /&gt;if (IsInDesignMode)&lt;br /&gt;{&lt;br /&gt;    // Create design time data&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;    // Create run time data&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;(within any class not deriving from ViewModelBase):&lt;br /&gt;&lt;br /&gt;if (ViewModelBase.IsInDesignModeStatic)&lt;br /&gt;{&lt;br /&gt;    // Create design time data&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;    // Create run time data&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Happy coding!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Laurent&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; left: 130px; top: -36px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;iframe style="border-top-style: none; margin-bottom: -20px; height: 23px; width: 450px; border-bottom-style: none; overflow: hidden; border-right-style: none; border-left-style: none; margin-top: 7px" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/09/25/detecting-design-mode-in-windows-8winrt.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/147036.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/20/quick-tip-adding-objects-in-resources.aspx"&gt;Quick tip: Adding objects in resources.&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Tuesday, September 20, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;If you are using MVVM-Light style ViewModel creation (often referred to as “view-first”), you might have noticed that you cannot build if you have an object in the view’s resources. It means that the code below does not compile.&lt;/p&gt;  &lt;pre class="xml" name="code"&gt;&amp;lt;UserControl.Resources&amp;gt;&lt;br /&gt;    &amp;lt;vm:MyViewModel x:Key="MyViewModel"&lt;br /&gt;                    xmlns:vm="using:Application1.ViewModel" /&amp;gt;&lt;br /&gt;&amp;lt;/UserControl.Resources&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;UserControl.DataContext&amp;gt;&lt;br /&gt;    &amp;lt;Binding Source="{StaticResource MyViewModel}" /&amp;gt;&lt;br /&gt;&amp;lt;/UserControl.DataContext&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I was told it is a bug that is being fixed, so no worries, the view-first way will still work! As a workaround, you can create the ViewModel in code behind and then save it into the resources, or simply assign it to the DataContext.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;partial class MainPage&lt;br /&gt;{&lt;br /&gt;    public MainPage()&lt;br /&gt;    {&lt;br /&gt;        InitializeComponent();&lt;br /&gt;        DataContext = new MyViewModel();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Of course this way is less blendable (meaning that Expression Blend will not be able to create the ViewModel and to show design time data if available. However, since we don’t have Expression Blend for XAML yet, it’s not that big a deal. Let’s hope that these small issues will be resolved soon.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; left: 130px; top: -36px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;iframe style="border-top-style: none; margin-bottom: -20px; height: 23px; width: 450px; border-bottom-style: none; overflow: hidden; border-right-style: none; border-left-style: none; margin-top: 7px" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/146949.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/12/mvvm-light-v4-beta1.aspx"&gt;MVVM Light V4 beta1&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Monday, September 12, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;This morning, I published MVVM Light V4 beta1 in the form of an MSI. The installation instructions are detailed on the &lt;a href="http://www.galasoft.ch/mvvm/installing/"&gt;MVVM Light installation page&lt;/a&gt;. Please make sure to &lt;a href="http://www.galasoft.ch/mvvm/cleaning/"&gt;uninstall previous versions&lt;/a&gt; before you install V4 beta1.&lt;/p&gt;  &lt;p&gt;There are &lt;a href="http://www.galasoft.ch/mvvm/installing/changes/"&gt;quite a few changes in this version&lt;/a&gt;, and I plan to blog about various features in the coming days. As usual, stay tuned!&lt;/p&gt;  &lt;h2&gt;Change log&lt;/h2&gt;  &lt;h3&gt;General changes&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Added &lt;a href="#XmlnsDefinitionAttribute"&gt;XmlnsDefinitionAttribute for GalaSoft.MvvmLight.Command&lt;/a&gt; in Extras assembly. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Setup&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;&lt;a href="http://www.galasoft.ch/mvvm/installing"&gt;Created an installer&lt;/a&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Messenger&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Fixed &lt;a href="http://mvvmlight.codeplex.com/workitem/7521"&gt;Issue #7521&lt;/a&gt;: race condition in Messenger.Default. &lt;/li&gt;    &lt;li&gt;Fixed &lt;a href="http://mvvmlight.codeplex.com/workitem/7539"&gt;Issue #7539&lt;/a&gt;: Messenger support for uncast objects. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;ViewModelBase&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Added support for RaisePropertyChanged(null) and RaisePropertyChanged(string.empty). A blog post about this will follow. &lt;/li&gt;    &lt;li&gt;Fixed &lt;a href="http://mvvmlight.codeplex.com/workitem/7520"&gt;Issue #7520&lt;/a&gt;: RaisePropertyChanged() fails in ReleaseBuild. This overload was removed because of the many issues, and replaced by the Set methods. &lt;/li&gt;    &lt;li&gt;Added Set(...) methods. A blog post about this will follow. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;RelayCommand&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Fixed &lt;a href="http://mvvmlight.codeplex.com/workitem/7522"&gt;Issue #7522&lt;/a&gt;: used deprecated Predicate instead of Func. &lt;/li&gt;    &lt;li&gt;Fixed &lt;a href="http://mvvmlight.codeplex.com/workitem/7534"&gt;Issue #7534&lt;/a&gt;: RelayCommand has security issue. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;SimpleIoc&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Implemented method IsRegistered&amp;lt;T&amp;gt;(). A blog post about this will follow. &lt;/li&gt;    &lt;li&gt;Fixed issue "Contains&amp;lt;T&amp;gt;() is returning true even if no instance was already instantiated". Contains&amp;lt;T&amp;gt;() only returns true if an instance is already created. IsRegistered&amp;lt;T&amp;gt;() returns true if the class has been registered with the IOC container. &lt;/li&gt;    &lt;li&gt;Fixed issue "Instances get created at registration already when registered with a key and a factory". Registering the instance does not execute the factory method yet. The method is only executed when the method GetInstance is called the first time. &lt;/li&gt;    &lt;li&gt;Fixed issue "Use the correct DLLs for CommonServiceLocator". The original DLLs from &lt;a href="http://commonservicelocator.codeplex.com"&gt;http://commonservicelocator.codeplex.com&lt;/a&gt; are now used everywhere. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;DispatcherHelper&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;The class was moved from GalaSoft.MvvmLight.Extras.dll into GalaSoft.MvvmLight.dll. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Project Templates&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;A couple of internal changes to the template's structure. &lt;/li&gt;    &lt;li&gt;Using the new slightly modified MVVM Light logo. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;ViewModelLocator Template&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Modified template to use SimpleIoc. &lt;/li&gt;    &lt;li&gt;A couple of internal changes to the template's structure. &lt;/li&gt;    &lt;li&gt;Using the new slightly modified MVVM Light logo. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;ViewModel Template&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;A couple of internal changes to the template's structure. &lt;/li&gt;    &lt;li&gt;Using the new slightly modified MVVM Light logo. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;View Template&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Fixed issue in XAML for WP7 and WP7.1 templates. &lt;/li&gt;    &lt;li&gt;A couple of internal changes to the template's structure. &lt;/li&gt;    &lt;li&gt;Using the new slightly modified MVVM Light logo. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;INPC snippet&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Setter in property is now public. &lt;/li&gt;    &lt;li&gt;Added $end$ marker. &lt;/li&gt;    &lt;li&gt;Added new snippets with various ways to call RaisePropertyChanged. &lt;/li&gt;    &lt;li&gt;Added a snippet using the new ViewModelBase.Set() method. &lt;/li&gt;    &lt;li&gt;A blog post will follow about all this. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;ViewModelLocator property snippet&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Added $end$ marker. &lt;/li&gt;    &lt;li&gt;Modified to use SimpleIoc. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Relay Command snippets&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Added code snippets for RelayCommands. A blog post about this will follow. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Details&lt;/h2&gt;  &lt;h3&gt;&lt;a id="XmlnsDefinitionAttribute"&gt;&lt;/a&gt;XmlnsDefinitionAttribute for GalaSoft.MvvmLight.Command in Extras assembly&lt;/h3&gt;  &lt;p&gt;Thanks to the addition of XmlnsDefinitionAttribute, you can simplify the inclusion of the MVVM Light EventToCommand action in XAML. See the before and after below:&lt;/p&gt;  &lt;pre class="xml" name="code"&gt;Before:&lt;br /&gt;&lt;br /&gt;&amp;lt;UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" &lt;br /&gt;             &lt;br /&gt;             xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.SL4"&lt;br /&gt;             &lt;br /&gt;             xmlns:cmd="http://www.galasoft.ch/mvvmlight" &lt;br /&gt;             x:Class="MvvmLight4.MainPage"&amp;gt;&lt;br /&gt;&lt;br /&gt;After:&lt;br /&gt;&lt;br /&gt;&amp;lt;UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" &lt;br /&gt;             xmlns:cmd="http://www.galasoft.ch/mvvmlight" &lt;br /&gt;             x:Class="MvvmLight4.MainPage"&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/09/12/mvvm-light-v4-beta1.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/146840.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/01/mvvm-light-v3-installer-for-non-english-systems.aspx"&gt;MVVM light V3 installer for non-English systems&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Thursday, September 01, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;After &lt;a href="http://www.galasoft.ch/mvvm/installing/index.html"&gt;I released the MVVM Light installer&lt;/a&gt;, I got a note saying that parts of the installation failed on non-English systems (in that case a German installation of Expression Blend and Visual Studio). Specifically, what failed was the code snippets on Visual Studio, and the project and item templates in Expression Blend.&lt;/p&gt;  &lt;p&gt;After investigating, it is correct that these two particular features of MVVM Light were installed to language-coded folders. Correcting the issue for Expression Blend was easy enough (Blend can also find project and item templates in the My Documents folder, under Expression\Blend 4\ItemTemplates and Expression\Blend 4\ProjectTemplates, which are language independent).&lt;/p&gt;  &lt;p&gt;Unfortunately it was not that easy for code snippets, so eventually I had to resort to a few custom actions in the installer. How annoying that we cannot install code snippets to a language-neutral folder!!&lt;/p&gt;  &lt;p&gt;Anyway, after a lot of efforts and even more testing, &lt;a href="http://www.galasoft.ch/mvvm/installing/index.html"&gt;I published a new version which corrects the previous issues&lt;/a&gt;. So now I can happily resume my efforts on V4 beta 1 which is nearing completion, and which will also come with a neat installer &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/Windows-Live-Writer/MVVM-light-V3-installer-for-non-English-_12C83/wlEmoticon-smile_2.png" /&gt;&lt;/p&gt;  &lt;p&gt;Happy coding,&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/09/01/mvvm-light-v3-installer-for-non-english-systems.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/146738.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/08/07/automated-installer-for-mvvm-light-v3.aspx"&gt;Automated installer for MVVM Light V3!&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Saturday, August 06, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;For a very (too) long time, the installation procedure for MVVM Light sucked. It involved downloading and unzipping files in various locations. Unfortunately, creating an automated installer is not completely trivial because of the variety of files that are getting installed: Binaries, Code Snippets, Project and Item Templates, all require different locations, and all that for VS2008, VS2010, Blend 4 and Silverlight 3, Silverlight 4, WPF3.5 SP1, WPF4, WP7.0 and now WP7.1 “Mango”.&lt;/p&gt;  &lt;p&gt;Thankfully, MVVM Light is taking advantage of a great community. First, &lt;a href="http://twitter.com/leonzandman"&gt;Leon Zandman&lt;/a&gt; initiated the project of an MSI for MVVM Light. Unfortunately, Leon was not able to complete this initiative, but &lt;a href="http://sharpgis.net/"&gt;the very helpful and capable Morten Nielsen&lt;/a&gt; created the installer in Wix. This gave me the occasion to learn Wix (I had only created setups with the Visual Studio setup project so far), and to tweak the installer. I am really grateful to Morten for his time!&lt;/p&gt;  &lt;p&gt;Yesterday, I &lt;a href="http://www.galasoft.ch/mvvm/installing/"&gt;published the automated installer for MVVM Light V3&lt;/a&gt;. This installer contains binaries, project and item template as well as code snippets for Silverlight 3, Silverlight 4, WPF3.5SP1, WPF4, Windows Phone 7.0 and Windows Phone 7.5 “Mango”. It allows you to develop in Visual Studio 2008, Visual Studio 2010, Expression Blend 4 and/or Visual Studio Express for Windows Phone.&lt;/p&gt;  &lt;div class="frame"&gt;&lt;strong&gt;Update:&lt;/strong&gt; There is a small issue with the installer &lt;strong&gt;for non-English installations (only!!)&lt;/strong&gt; of Visual Studio and Expression Blend. While most features install correctly, the &lt;strong&gt;code snippets in VS&lt;/strong&gt; and the &lt;strong&gt;templates in Blend&lt;/strong&gt; are not installed. We are working on a fix.&lt;/div&gt;  &lt;h2&gt;And then?&lt;/h2&gt;  &lt;p&gt;A lot of people asked me when MVVM Light V4 will be published. As I mentioned above, I will release a beta 1 very soon. Beta 1 means that the API should be reasonably stable. I do however have more things I want to fix, so I am also planning a beta 2 before I hit RTM. The goal with beta 2 is to let people test my fixes, just to make sure that I didn’t break anything (yes I do run quite a few unit tests in all available frameworks, but… &lt;a href="http://en.wikipedia.org/wiki/Errare_humanum_est#errare_humanum_est"&gt;errare humanum est&lt;/a&gt;!).&lt;/p&gt;  &lt;p&gt;It is really hard for me to give a precise timeline for those releases, because &lt;a href="http://www.identitymine.com"&gt;of work&lt;/a&gt;, a new house that we are moving to in August, &lt;a href="http://www.flickr.com/photos/lbugnion/5994256381/"&gt;my wonderful family&lt;/a&gt; who also requires some of my time here and there and my greedy Kindle 3 (just finished &lt;a href="http://www.amazon.com/Dance-Dragons-Book-Song-ebook/dp/B004XISI4A/ref=tmm_kin_title_0?ie=UTF8&amp;amp;m=APZETQFSWU1YM"&gt;A Dance with Dragons&lt;/a&gt;, that one was pretty amazing). However roughly put, it looks like this:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;MVVM Light V4 beta 1 before end of August. &lt;/li&gt;    &lt;li&gt;MVVM Light V4 beta 2 not too long after that. &lt;/li&gt;    &lt;li&gt;MVVM Light V4 RTM not too long after that &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/Windows-Live-Writer/Installing-MVVM-Light_9D5D/wlEmoticon-smile_2.png" /&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;More than ever, I am amazed and delighted at the great feedback I receive from the MVVM Light community. This is not a perfect product, but your continuous constructive feedback keeps me motivated to continue developing and making this toolkit better. Thanks for your fantastic support!&lt;/p&gt;  &lt;p&gt;Happy coding!&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/08/07/automated-installer-for-mvvm-light-v3.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/146449.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Sun, 23 Oct 2011 14:53:27 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20111023025327P</guid></item><item><title>Updated Wiki: Home</title><link>http://mvvmlight.codeplex.com/wikipage?version=15</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Project Description&lt;/h1&gt;The MVVM Light Toolkit is a set of components helping people to get started in the Model - View - ViewModel pattern in Silverlight and WPF. It is a light and pragmatic framework that contains only the essential components needed.&lt;br /&gt;
&lt;h1&gt;Get started&lt;/h1&gt;More information about the MVVM Light Toolkit can be found on &lt;a href="http://www.galasoft.ch/mvvm" class="externalLink"&gt;http://www.galasoft.ch/mvvm&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Get more info about MVVM&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Understanding the MVVM Pattern (MIX10 session)&lt;/li&gt;&lt;/ul&gt;
&lt;a href="http://www.galasoft.ch/mvvmvideo1" class="externalLink"&gt;http://www.galasoft.ch/mvvmvideo1&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Deep Dive MVVM (MIX11 session)&lt;/li&gt;&lt;/ul&gt;
&lt;a href="http://www.galasoft.ch/mvvmvideo1" class="externalLink"&gt;http://www.galasoft.ch/mvvmvideo1&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;Donate&lt;/h1&gt;If you are so enclined, you can &lt;a href="http://www.galasoft.ch/mvvm/donate" class="externalLink"&gt;donate to MVVM Light Toolkit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;Or, if you prefer, you can pay me a beer next time we&amp;#39;re in the same vicinity. Really, it is OK too :)&lt;br /&gt;
&lt;h1&gt;Latest news:&lt;/h1&gt;The latest news about MVVM Light are available from the MVVM feed on my blog at &lt;a href="http://blog.galasoft.ch/category/10201.aspx" class="externalLink"&gt;http://blog.galasoft.ch/category/10201.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;(&lt;a href="http://blog.galasoft.ch/lbugnion/category/10201.aspx/rss" class="externalLink"&gt;RSS feed&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;div class="rss"&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/10/03/mvvm-light-toolkit-for-windows-8-preview-mvvmlight-win8.aspx"&gt;MVVM Light Toolkit for Windows 8 (preview) #mvvmlight #win8&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Monday, October 03, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;I was very optimistic when I first saw Metro style apps coded in C# on Windows 8, because for the most part they are not much different than the well known XAML/C# pair on Silverlight or WPF. This led me to brag a bit about probably having a port of MVVM Light ready “in a few days”. Of course I didn’t take in account that I would have a great time the week after //build in Seattle, with fantastic weather and tons of friends to have dinner and conversations with. Needless to say, the few days turned out, in fact, to be a couple of weeks.&lt;/p&gt;  &lt;p&gt;Nonetheless, I am proud and happy to announce the availability of MVVM Light Toolkit for Windows 8. Let’s be clear, this is a preview version. All the unit tests are green for the selected components (there are a couple of components not ported yet, see the section below titled “Missing components”). However, a green unit test does not quite mean that the tested component is completely safe to use, so please be careful with that material and &lt;a href="mailto:laurent@galasoft.ch"&gt;send me your feedback if you find issues&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;Installation&lt;/h2&gt;  &lt;p&gt;MVVM Light for Windows 8 is a side-by-side install with the standard MVVM Light V3 or V4 beta. Simply &lt;a href="http://mvvmlight.codeplex.com/releases/view/74325"&gt;download and run the MSI from Codeplex&lt;/a&gt;. As usual, the last step of the installation performs a “/setup” of Visual Studio to actualize the project template cache, and unfortunately this last step can last very long. Please be patient and don’t cancel before the end! The installation process is very similar to that described on the &lt;a href="http://www.galasoft.ch/mvvm/installing"&gt;MVVM Light installation page&lt;/a&gt; (except that there is no NuGet installer for VS11 yet).&lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm7.static.flickr.com/6168/6207048445_7128fe2beb_o_d.png" /&gt;&lt;/p&gt;  &lt;p&gt;Note however that if you uninstall MVVM Light V3/V4b, but still want to keep MVVM Light for Win8, you may have to repair MVVM Light for Win8. Simply run the installer again and select “Repair”.&lt;/p&gt;  &lt;h2&gt;Ported components&lt;/h2&gt;  &lt;p&gt;Almost all MVVM Light components are also available in the Windows 8 version. The ported components are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;ObservableObject&lt;/strong&gt; including all ways to raise PropertyChanged. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;ViewModelBase&lt;/strong&gt; including all ways to raise PropertyChanged. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Messenger&lt;/strong&gt; including all message types except DialogMessage (see below). &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;RelayCommand&lt;/strong&gt; with and without parameter. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;SimpleIoc&lt;/strong&gt; which might well be the very first IOC container working on Windows 8. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;File, New Project&lt;/h3&gt;  &lt;p&gt;I also created a Metro style version of the MVVM Light project template. To create a new MVVM Light-powered Metro Style application, follow the steps:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Select the menu File, New, Project. &lt;/li&gt;    &lt;li&gt;In the New Project dialog, select the category Visual C# / Wndows Metro style and double click the MvvmLight (Win8) template. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;img src="http://farm7.static.flickr.com/6164/6207665952_cc8b895362_b_d.jpg" width="560" height="383" /&gt;&lt;/p&gt;  &lt;p&gt;The created application is a very simple MVVM application, very similar to the ones that get created in Silverlight, WPF or Windows Phone 7: it contains a model with IDataService, a dummy runtime implementation and a design time implementation. The ViewModelLocator is available and “wired” (using the SimpleIoc container) as well as a MainViewModel that is set as DataContext on the MainPage.&lt;/p&gt;  &lt;h2&gt;Missing components&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Skins&lt;/strong&gt;: There is a small change in the way that resource dictionaries are handled in Windows 8. I need to sort things out, so right now there is no “MainSkin.xaml” in the project template. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;DialogMessage&lt;/strong&gt;: This type is bugging me in V3/V4b because it is bringing the MessageBoxResult type into the ViewModel. I am looking at ways to make it better by converting the MessageBoxResult into a vanilla Boolean. In Windows 8, MessageBoxResult does not exist anymore (there is no MessageBox or popups of any kinds in Metro style apps). Consequently, the DialogMessage does not build, and I decided to just remove it for now. I will add it again when I refactor to the “vanilla” version. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;EventToCommand&lt;/strong&gt;: There are no Blend behaviors in Windows 8 yet (important word: &lt;strong&gt;yet&lt;/strong&gt;). I am looking at ways to have behaviors on Windows 8 before Blend 5 for XAML gets released. Stay tuned. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;DispatcherHelper&lt;/strong&gt;: The Dispatcher object has changed quite a lot in Windows 8, and I am looking at ways to keep the DispatcherHelper compatible with previous versions of MVVM Light by wrapping these differences. It shouldn’t be a big deal, but I want to give myself a little time to get it right (hopefully). &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Next steps&lt;/h2&gt;  &lt;p&gt;I intend to build a small sample application (very similar to the one I built for my MIX11 talk) to try the various components in real life conditions. This will of course be the topic of an upcoming blog post.&lt;/p&gt;  &lt;p&gt;I encourage everyone to try these components in Windows 8 preview, and please don’t be shy with your feedback!&lt;/p&gt;  &lt;p&gt;Cheers,    &lt;br /&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; left: 130px; top: -36px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-top-style: none; margin-bottom: -20px; height: 23px; width: 450px; border-bottom-style: none; overflow: hidden; border-right-style: none; border-left-style: none; margin-top: 7px" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/10/03/mvvm-light-toolkit-for-windows-8-preview-mvvmlight-win8.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/147166.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/25/breaking-change-raising-propertychanged-with-string.empty-in-winrt--windows.aspx"&gt;Breaking change: Raising PropertyChanged with string.Empty in WinRT / Windows 8&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, September 25, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;In the developer preview of Windows 8, I just noticed a breaking change in the way that data bindings react to the &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.data.inotifypropertychanged.propertychanged(v=VS.85).aspx"&gt;PropertyChanged&lt;/a&gt;&lt;/strong&gt; event.&lt;/p&gt;  &lt;p&gt;First a bit of background: Often, objects that are databound to the UI are simple data objects (also called ViewModels) that implement the &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.data.inotifypropertychanged(v=VS.85).aspx"&gt;INotifyPropertyChanged&lt;/a&gt;&lt;/strong&gt; interface. This interface is very simple and defines just one event, the PropertyChanged event, that needs to be raised by the ViewModel when one of its property changes. It is what makes the ViewModel “observable”. If a property of another object (typically a UI element) is data bound (through a Binding object, often set declaratively in XAML), then the value of the observing property will be synchronized to the value of the observable property.&lt;/p&gt;  &lt;p&gt;Raising the PropertyChanged event requires an instance of the &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.data.propertychangedeventargs(v=VS.85).aspx"&gt;PropertyChangedEventArgs&lt;/a&gt;&lt;/strong&gt; class, which takes a string as sole parameter of its constructor. The string to be passed is the name of the observable property.&lt;/p&gt;  &lt;h2&gt;Raising with string.Empty or null&lt;/h2&gt;  &lt;p&gt;In WPF and Silverlight, it is possible to raise the PropertyChanged event with an instance of the PropertyChangedEventArgs class constructed with string.Empty (or null) instead of an existing property’s name. When a PropertyChanged event is raised in this manner, the UI will re-query the value of each property of the ViewModel that is data bound to the UI. This is a convenient way to raise but one event and force the UI to update itself in response to cascading changes, for example. As such, this can be a good way to increase the performance of the application.&lt;/p&gt;  &lt;h2&gt;The breaking change in WinRT&lt;/h2&gt;  &lt;p&gt;However, while unit testing the version of &lt;a href="http://www.galasoft.ch/mvvm"&gt;MVVM Light&lt;/a&gt; for WinRT, I found out that raising the PropertyChanged event with an empty string or null does not update the bindings. I quickly coded a repro, and then coded the exact same code in Silverlight, and indeed the two applications do not react the same at all.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://galasoft.ch/blogs-all/Resources/20110925/INPCBreakingWinRT.zip"&gt;Metro – style repro&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://galasoft.ch/blogs-all/Resources/20110925/INPCBreakingSilverlight.zip"&gt;Expected behavior in Silverlight for comparison&lt;/a&gt;.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Hopefully this is only an oversight and this will be fixed in a future version. &lt;/p&gt;  &lt;p&gt;Cheers,   &lt;br /&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; left: 130px; top: -36px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-top-style: none; margin-bottom: -20px; height: 23px; width: 450px; border-bottom-style: none; overflow: hidden; border-right-style: none; border-left-style: none; margin-top: 7px" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/09/25/breaking-change-raising-propertychanged-with-string.empty-in-winrt--windows.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/147041.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/25/quick-tip-select-the-correct-inotifypropertychanged-in-windows-8.aspx"&gt;Quick tip: Select the correct INotifyPropertyChanged in Windows 8 / WinRT&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, September 25, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Microsoft loves MVVM and INotifyPropertyChanged so much that they included this very useful interface twice in the new WinRT framework. Unfortunately, only one of these is working correctly (and the other one is likely a bug, remnant from the past &lt;img class="wlEmoticon wlEmoticon-winkingsmile" style="border-top-style: none; border-bottom-style: none; border-right-style: none; border-left-style: none" alt="Winking smile" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/Windows-Live-Writer/Quick-tip-Select-the-correct-INotifyProp_1400B/wlEmoticon-winkingsmile_2.png" /&gt;)&lt;/p&gt;  &lt;p&gt;When implementing INotifyPropertyChanged, make sure that you select the correct one! The one you want to use is into &lt;strong&gt;Windows.UI.Xaml.Data&lt;/strong&gt;. The old one, the one you DON’T WANT is into System.ComponentModel (the same namespace it was in WPF and Silverlight). If you select the wrong one, the Bindings will not be updated and the UI will remain dead as a dead fish. &lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm7.static.flickr.com/6173/6182240057_d008054937_o_d.png" /&gt;&lt;/p&gt;  &lt;p&gt;I mentioned before that Microsoft took the “once in a lifetime” opportunity (well, 5-10 years is a lifetime in the world of computers) to clean up and rearrange classes within the framework. This is one of the signs right here. As for the System.ComponentModel.INotifyPropertyChanged, I guess it will be removed in a later release of the WinRT framework.&lt;/p&gt;  &lt;p&gt;Cheers,&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; left: 130px; top: -36px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-top-style: none; margin-bottom: -20px; height: 23px; width: 450px; border-bottom-style: none; overflow: hidden; border-right-style: none; border-left-style: none; margin-top: 7px" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/09/25/quick-tip-select-the-correct-inotifypropertychanged-in-windows-8.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/147038.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/25/detecting-design-mode-in-windows-8winrt.aspx"&gt;Detecting design mode in Windows 8/WinRT&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, September 25, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;One of the very useful features of the &lt;a href="http://www.galasoft.ch/mvvm"&gt;MVVM Light toolkit&lt;/a&gt; is to help with the creation of design time data, in order to give something to see on the design surface (Expression Blend, Visual Studio designer). This is especially useful when designing list controls such as ListBox, ComboBox, etc. Without design time data, these controls will remain empty, and the designer will not see what he is working on. This can cost a lot of time and cause frustration.&lt;/p&gt;  &lt;p&gt;Detecting design mode was always incompatible in WPF and in Silverlight.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In WPF, we use a rather complicated snippet: &lt;/li&gt; &lt;/ul&gt;  &lt;pre class="csharp" name="code"&gt;var prop = DesignerProperties.IsInDesignModeProperty;&lt;br /&gt;_isInDesignMode&lt;br /&gt;    = (bool)DependencyPropertyDescriptor&lt;br /&gt;                 .FromProperty(prop, typeof(FrameworkElement))&lt;br /&gt;                 .Metadata.DefaultValue;&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;In Silverlight, there is a convenient property: &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;_isInDesignMode = DesignerProperties.IsInDesignTool;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;In WinRT, &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.designmode.designmodeenabled(v=VS.85).aspx"&gt;we have to use yet another property&lt;/a&gt;: &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;_isInDesignMode &lt;br /&gt;    = Windows.ApplicationModel.DesignMode.DesignModeEnabled;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Abstracting the differences&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;These differences can make it difficult to share code between these environments. This is why the MVVM Light toolkit abstracts these and provides a convenient property on the ViewModelBase class:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;(within a ViewModel deriving from ViewModelBase):&lt;br /&gt;&lt;br /&gt;if (IsInDesignMode)&lt;br /&gt;{&lt;br /&gt;    // Create design time data&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;    // Create run time data&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;(within any class not deriving from ViewModelBase):&lt;br /&gt;&lt;br /&gt;if (ViewModelBase.IsInDesignModeStatic)&lt;br /&gt;{&lt;br /&gt;    // Create design time data&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;    // Create run time data&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Happy coding!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Laurent&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; left: 130px; top: -36px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;iframe style="border-top-style: none; margin-bottom: -20px; height: 23px; width: 450px; border-bottom-style: none; overflow: hidden; border-right-style: none; border-left-style: none; margin-top: 7px" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/09/25/detecting-design-mode-in-windows-8winrt.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/147036.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/20/quick-tip-adding-objects-in-resources.aspx"&gt;Quick tip: Adding objects in resources.&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Tuesday, September 20, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;If you are using MVVM-Light style ViewModel creation (often referred to as “view-first”), you might have noticed that you cannot build if you have an object in the view’s resources. It means that the code below does not compile.&lt;/p&gt;  &lt;pre class="xml" name="code"&gt;&amp;lt;UserControl.Resources&amp;gt;&lt;br /&gt;    &amp;lt;vm:MyViewModel x:Key="MyViewModel"&lt;br /&gt;                    xmlns:vm="using:Application1.ViewModel" /&amp;gt;&lt;br /&gt;&amp;lt;/UserControl.Resources&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;UserControl.DataContext&amp;gt;&lt;br /&gt;    &amp;lt;Binding Source="{StaticResource MyViewModel}" /&amp;gt;&lt;br /&gt;&amp;lt;/UserControl.DataContext&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I was told it is a bug that is being fixed, so no worries, the view-first way will still work! As a workaround, you can create the ViewModel in code behind and then save it into the resources, or simply assign it to the DataContext.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;partial class MainPage&lt;br /&gt;{&lt;br /&gt;    public MainPage()&lt;br /&gt;    {&lt;br /&gt;        InitializeComponent();&lt;br /&gt;        DataContext = new MyViewModel();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Of course this way is less blendable (meaning that Expression Blend will not be able to create the ViewModel and to show design time data if available. However, since we don’t have Expression Blend for XAML yet, it’s not that big a deal. Let’s hope that these small issues will be resolved soon.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; left: 130px; top: -36px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;iframe style="border-top-style: none; margin-bottom: -20px; height: 23px; width: 450px; border-bottom-style: none; overflow: hidden; border-right-style: none; border-left-style: none; margin-top: 7px" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/146949.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/12/mvvm-light-v4-beta1.aspx"&gt;MVVM Light V4 beta1&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Monday, September 12, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;This morning, I published MVVM Light V4 beta1 in the form of an MSI. The installation instructions are detailed on the &lt;a href="http://www.galasoft.ch/mvvm/installing/"&gt;MVVM Light installation page&lt;/a&gt;. Please make sure to &lt;a href="http://www.galasoft.ch/mvvm/cleaning/"&gt;uninstall previous versions&lt;/a&gt; before you install V4 beta1.&lt;/p&gt;  &lt;p&gt;There are &lt;a href="http://www.galasoft.ch/mvvm/installing/changes/"&gt;quite a few changes in this version&lt;/a&gt;, and I plan to blog about various features in the coming days. As usual, stay tuned!&lt;/p&gt;  &lt;h2&gt;Change log&lt;/h2&gt;  &lt;h3&gt;General changes&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Added &lt;a href="#XmlnsDefinitionAttribute"&gt;XmlnsDefinitionAttribute for GalaSoft.MvvmLight.Command&lt;/a&gt; in Extras assembly. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Setup&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;&lt;a href="http://www.galasoft.ch/mvvm/installing"&gt;Created an installer&lt;/a&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Messenger&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Fixed &lt;a href="http://mvvmlight.codeplex.com/workitem/7521"&gt;Issue #7521&lt;/a&gt;: race condition in Messenger.Default. &lt;/li&gt;    &lt;li&gt;Fixed &lt;a href="http://mvvmlight.codeplex.com/workitem/7539"&gt;Issue #7539&lt;/a&gt;: Messenger support for uncast objects. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;ViewModelBase&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Added support for RaisePropertyChanged(null) and RaisePropertyChanged(string.empty). A blog post about this will follow. &lt;/li&gt;    &lt;li&gt;Fixed &lt;a href="http://mvvmlight.codeplex.com/workitem/7520"&gt;Issue #7520&lt;/a&gt;: RaisePropertyChanged() fails in ReleaseBuild. This overload was removed because of the many issues, and replaced by the Set methods. &lt;/li&gt;    &lt;li&gt;Added Set(...) methods. A blog post about this will follow. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;RelayCommand&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Fixed &lt;a href="http://mvvmlight.codeplex.com/workitem/7522"&gt;Issue #7522&lt;/a&gt;: used deprecated Predicate instead of Func. &lt;/li&gt;    &lt;li&gt;Fixed &lt;a href="http://mvvmlight.codeplex.com/workitem/7534"&gt;Issue #7534&lt;/a&gt;: RelayCommand has security issue. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;SimpleIoc&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Implemented method IsRegistered&amp;lt;T&amp;gt;(). A blog post about this will follow. &lt;/li&gt;    &lt;li&gt;Fixed issue "Contains&amp;lt;T&amp;gt;() is returning true even if no instance was already instantiated". Contains&amp;lt;T&amp;gt;() only returns true if an instance is already created. IsRegistered&amp;lt;T&amp;gt;() returns true if the class has been registered with the IOC container. &lt;/li&gt;    &lt;li&gt;Fixed issue "Instances get created at registration already when registered with a key and a factory". Registering the instance does not execute the factory method yet. The method is only executed when the method GetInstance is called the first time. &lt;/li&gt;    &lt;li&gt;Fixed issue "Use the correct DLLs for CommonServiceLocator". The original DLLs from &lt;a href="http://commonservicelocator.codeplex.com"&gt;http://commonservicelocator.codeplex.com&lt;/a&gt; are now used everywhere. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;DispatcherHelper&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;The class was moved from GalaSoft.MvvmLight.Extras.dll into GalaSoft.MvvmLight.dll. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Project Templates&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;A couple of internal changes to the template's structure. &lt;/li&gt;    &lt;li&gt;Using the new slightly modified MVVM Light logo. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;ViewModelLocator Template&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Modified template to use SimpleIoc. &lt;/li&gt;    &lt;li&gt;A couple of internal changes to the template's structure. &lt;/li&gt;    &lt;li&gt;Using the new slightly modified MVVM Light logo. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;ViewModel Template&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;A couple of internal changes to the template's structure. &lt;/li&gt;    &lt;li&gt;Using the new slightly modified MVVM Light logo. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;View Template&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Fixed issue in XAML for WP7 and WP7.1 templates. &lt;/li&gt;    &lt;li&gt;A couple of internal changes to the template's structure. &lt;/li&gt;    &lt;li&gt;Using the new slightly modified MVVM Light logo. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;INPC snippet&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Setter in property is now public. &lt;/li&gt;    &lt;li&gt;Added $end$ marker. &lt;/li&gt;    &lt;li&gt;Added new snippets with various ways to call RaisePropertyChanged. &lt;/li&gt;    &lt;li&gt;Added a snippet using the new ViewModelBase.Set() method. &lt;/li&gt;    &lt;li&gt;A blog post will follow about all this. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;ViewModelLocator property snippet&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Added $end$ marker. &lt;/li&gt;    &lt;li&gt;Modified to use SimpleIoc. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Relay Command snippets&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Added code snippets for RelayCommands. A blog post about this will follow. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Details&lt;/h2&gt;  &lt;h3&gt;&lt;a id="XmlnsDefinitionAttribute"&gt;&lt;/a&gt;XmlnsDefinitionAttribute for GalaSoft.MvvmLight.Command in Extras assembly&lt;/h3&gt;  &lt;p&gt;Thanks to the addition of XmlnsDefinitionAttribute, you can simplify the inclusion of the MVVM Light EventToCommand action in XAML. See the before and after below:&lt;/p&gt;  &lt;pre class="xml" name="code"&gt;Before:&lt;br /&gt;&lt;br /&gt;&amp;lt;UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" &lt;br /&gt;             &lt;br /&gt;             xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.SL4"&lt;br /&gt;             &lt;br /&gt;             xmlns:cmd="http://www.galasoft.ch/mvvmlight" &lt;br /&gt;             x:Class="MvvmLight4.MainPage"&amp;gt;&lt;br /&gt;&lt;br /&gt;After:&lt;br /&gt;&lt;br /&gt;&amp;lt;UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" &lt;br /&gt;             xmlns:cmd="http://www.galasoft.ch/mvvmlight" &lt;br /&gt;             x:Class="MvvmLight4.MainPage"&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/09/12/mvvm-light-v4-beta1.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/146840.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/01/mvvm-light-v3-installer-for-non-english-systems.aspx"&gt;MVVM light V3 installer for non-English systems&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Thursday, September 01, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;After &lt;a href="http://www.galasoft.ch/mvvm/installing/index.html"&gt;I released the MVVM Light installer&lt;/a&gt;, I got a note saying that parts of the installation failed on non-English systems (in that case a German installation of Expression Blend and Visual Studio). Specifically, what failed was the code snippets on Visual Studio, and the project and item templates in Expression Blend.&lt;/p&gt;  &lt;p&gt;After investigating, it is correct that these two particular features of MVVM Light were installed to language-coded folders. Correcting the issue for Expression Blend was easy enough (Blend can also find project and item templates in the My Documents folder, under Expression\Blend 4\ItemTemplates and Expression\Blend 4\ProjectTemplates, which are language independent).&lt;/p&gt;  &lt;p&gt;Unfortunately it was not that easy for code snippets, so eventually I had to resort to a few custom actions in the installer. How annoying that we cannot install code snippets to a language-neutral folder!!&lt;/p&gt;  &lt;p&gt;Anyway, after a lot of efforts and even more testing, &lt;a href="http://www.galasoft.ch/mvvm/installing/index.html"&gt;I published a new version which corrects the previous issues&lt;/a&gt;. So now I can happily resume my efforts on V4 beta 1 which is nearing completion, and which will also come with a neat installer &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/Windows-Live-Writer/MVVM-light-V3-installer-for-non-English-_12C83/wlEmoticon-smile_2.png" /&gt;&lt;/p&gt;  &lt;p&gt;Happy coding,&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/09/01/mvvm-light-v3-installer-for-non-english-systems.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/146738.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/08/07/automated-installer-for-mvvm-light-v3.aspx"&gt;Automated installer for MVVM Light V3!&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Saturday, August 06, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;For a very (too) long time, the installation procedure for MVVM Light sucked. It involved downloading and unzipping files in various locations. Unfortunately, creating an automated installer is not completely trivial because of the variety of files that are getting installed: Binaries, Code Snippets, Project and Item Templates, all require different locations, and all that for VS2008, VS2010, Blend 4 and Silverlight 3, Silverlight 4, WPF3.5 SP1, WPF4, WP7.0 and now WP7.1 “Mango”.&lt;/p&gt;  &lt;p&gt;Thankfully, MVVM Light is taking advantage of a great community. First, &lt;a href="http://twitter.com/leonzandman"&gt;Leon Zandman&lt;/a&gt; initiated the project of an MSI for MVVM Light. Unfortunately, Leon was not able to complete this initiative, but &lt;a href="http://sharpgis.net/"&gt;the very helpful and capable Morten Nielsen&lt;/a&gt; created the installer in Wix. This gave me the occasion to learn Wix (I had only created setups with the Visual Studio setup project so far), and to tweak the installer. I am really grateful to Morten for his time!&lt;/p&gt;  &lt;p&gt;Yesterday, I &lt;a href="http://www.galasoft.ch/mvvm/installing/"&gt;published the automated installer for MVVM Light V3&lt;/a&gt;. This installer contains binaries, project and item template as well as code snippets for Silverlight 3, Silverlight 4, WPF3.5SP1, WPF4, Windows Phone 7.0 and Windows Phone 7.5 “Mango”. It allows you to develop in Visual Studio 2008, Visual Studio 2010, Expression Blend 4 and/or Visual Studio Express for Windows Phone.&lt;/p&gt;  &lt;div class="frame"&gt;&lt;strong&gt;Update:&lt;/strong&gt; There is a small issue with the installer &lt;strong&gt;for non-English installations (only!!)&lt;/strong&gt; of Visual Studio and Expression Blend. While most features install correctly, the &lt;strong&gt;code snippets in VS&lt;/strong&gt; and the &lt;strong&gt;templates in Blend&lt;/strong&gt; are not installed. We are working on a fix.&lt;/div&gt;  &lt;h2&gt;And then?&lt;/h2&gt;  &lt;p&gt;A lot of people asked me when MVVM Light V4 will be published. As I mentioned above, I will release a beta 1 very soon. Beta 1 means that the API should be reasonably stable. I do however have more things I want to fix, so I am also planning a beta 2 before I hit RTM. The goal with beta 2 is to let people test my fixes, just to make sure that I didn’t break anything (yes I do run quite a few unit tests in all available frameworks, but… &lt;a href="http://en.wikipedia.org/wiki/Errare_humanum_est#errare_humanum_est"&gt;errare humanum est&lt;/a&gt;!).&lt;/p&gt;  &lt;p&gt;It is really hard for me to give a precise timeline for those releases, because &lt;a href="http://www.identitymine.com"&gt;of work&lt;/a&gt;, a new house that we are moving to in August, &lt;a href="http://www.flickr.com/photos/lbugnion/5994256381/"&gt;my wonderful family&lt;/a&gt; who also requires some of my time here and there and my greedy Kindle 3 (just finished &lt;a href="http://www.amazon.com/Dance-Dragons-Book-Song-ebook/dp/B004XISI4A/ref=tmm_kin_title_0?ie=UTF8&amp;amp;m=APZETQFSWU1YM"&gt;A Dance with Dragons&lt;/a&gt;, that one was pretty amazing). However roughly put, it looks like this:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;MVVM Light V4 beta 1 before end of August. &lt;/li&gt;    &lt;li&gt;MVVM Light V4 beta 2 not too long after that. &lt;/li&gt;    &lt;li&gt;MVVM Light V4 RTM not too long after that &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/Windows-Live-Writer/Installing-MVVM-Light_9D5D/wlEmoticon-smile_2.png" /&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;More than ever, I am amazed and delighted at the great feedback I receive from the MVVM Light community. This is not a perfect product, but your continuous constructive feedback keeps me motivated to continue developing and making this toolkit better. Thanks for your fantastic support!&lt;/p&gt;  &lt;p&gt;Happy coding!&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/08/07/automated-installer-for-mvvm-light-v3.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/146449.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Sun, 23 Oct 2011 14:53:04 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20111023025304P</guid></item><item><title>Updated Wiki: Home</title><link>http://mvvmlight.codeplex.com/wikipage?version=14</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Project Description&lt;/h1&gt;The MVVM Light Toolkit is a set of components helping people to get started in the Model - View - ViewModel pattern in Silverlight and WPF. It is a light and pragmatic framework that contains only the essential components needed.&lt;br /&gt;
&lt;h1&gt;Get started&lt;/h1&gt;More information about the MVVM Light Toolkit can be found on &lt;a href="http://www.galasoft.ch/mvvm/getstarted" class="externalLink"&gt;http://www.galasoft.ch/mvvm/getstarted&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Get more info about MVVM&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Understanding the MVVM Pattern (MIX10 session)&lt;/li&gt;&lt;/ul&gt;
&lt;a href="http://www.galasoft.ch/mvvmvideo1" class="externalLink"&gt;http://www.galasoft.ch/mvvmvideo1&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Deep Dive MVVM (MIX11 session)&lt;/li&gt;&lt;/ul&gt;
&lt;a href="http://www.galasoft.ch/mvvmvideo1" class="externalLink"&gt;http://www.galasoft.ch/mvvmvideo1&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;Donate&lt;/h1&gt;If you are so enclined, you can &lt;a href="http://www.galasoft.ch/mvvm/donate" class="externalLink"&gt;donate to MVVM Light Toolkit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;Or, if you prefer, you can pay me a beer next time we&amp;#39;re in the same vicinity. Really, it is OK too :)&lt;br /&gt;
&lt;h1&gt;Latest news:&lt;/h1&gt;The latest news about MVVM Light are available from the MVVM feed on my blog at &lt;a href="http://blog.galasoft.ch/category/10201.aspx" class="externalLink"&gt;http://blog.galasoft.ch/category/10201.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;(&lt;a href="http://blog.galasoft.ch/lbugnion/category/10201.aspx/rss" class="externalLink"&gt;RSS feed&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;div class="rss"&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/10/03/mvvm-light-toolkit-for-windows-8-preview-mvvmlight-win8.aspx"&gt;MVVM Light Toolkit for Windows 8 (preview) #mvvmlight #win8&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Monday, October 03, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;I was very optimistic when I first saw Metro style apps coded in C# on Windows 8, because for the most part they are not much different than the well known XAML/C# pair on Silverlight or WPF. This led me to brag a bit about probably having a port of MVVM Light ready “in a few days”. Of course I didn’t take in account that I would have a great time the week after //build in Seattle, with fantastic weather and tons of friends to have dinner and conversations with. Needless to say, the few days turned out, in fact, to be a couple of weeks.&lt;/p&gt;  &lt;p&gt;Nonetheless, I am proud and happy to announce the availability of MVVM Light Toolkit for Windows 8. Let’s be clear, this is a preview version. All the unit tests are green for the selected components (there are a couple of components not ported yet, see the section below titled “Missing components”). However, a green unit test does not quite mean that the tested component is completely safe to use, so please be careful with that material and &lt;a href="mailto:laurent@galasoft.ch"&gt;send me your feedback if you find issues&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;Installation&lt;/h2&gt;  &lt;p&gt;MVVM Light for Windows 8 is a side-by-side install with the standard MVVM Light V3 or V4 beta. Simply &lt;a href="http://mvvmlight.codeplex.com/releases/view/74325"&gt;download and run the MSI from Codeplex&lt;/a&gt;. As usual, the last step of the installation performs a “/setup” of Visual Studio to actualize the project template cache, and unfortunately this last step can last very long. Please be patient and don’t cancel before the end! The installation process is very similar to that described on the &lt;a href="http://www.galasoft.ch/mvvm/installing"&gt;MVVM Light installation page&lt;/a&gt; (except that there is no NuGet installer for VS11 yet).&lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm7.static.flickr.com/6168/6207048445_7128fe2beb_o_d.png" /&gt;&lt;/p&gt;  &lt;p&gt;Note however that if you uninstall MVVM Light V3/V4b, but still want to keep MVVM Light for Win8, you may have to repair MVVM Light for Win8. Simply run the installer again and select “Repair”.&lt;/p&gt;  &lt;h2&gt;Ported components&lt;/h2&gt;  &lt;p&gt;Almost all MVVM Light components are also available in the Windows 8 version. The ported components are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;ObservableObject&lt;/strong&gt; including all ways to raise PropertyChanged. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;ViewModelBase&lt;/strong&gt; including all ways to raise PropertyChanged. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Messenger&lt;/strong&gt; including all message types except DialogMessage (see below). &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;RelayCommand&lt;/strong&gt; with and without parameter. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;SimpleIoc&lt;/strong&gt; which might well be the very first IOC container working on Windows 8. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;File, New Project&lt;/h3&gt;  &lt;p&gt;I also created a Metro style version of the MVVM Light project template. To create a new MVVM Light-powered Metro Style application, follow the steps:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Select the menu File, New, Project. &lt;/li&gt;    &lt;li&gt;In the New Project dialog, select the category Visual C# / Wndows Metro style and double click the MvvmLight (Win8) template. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;img src="http://farm7.static.flickr.com/6164/6207665952_cc8b895362_b_d.jpg" width="560" height="383" /&gt;&lt;/p&gt;  &lt;p&gt;The created application is a very simple MVVM application, very similar to the ones that get created in Silverlight, WPF or Windows Phone 7: it contains a model with IDataService, a dummy runtime implementation and a design time implementation. The ViewModelLocator is available and “wired” (using the SimpleIoc container) as well as a MainViewModel that is set as DataContext on the MainPage.&lt;/p&gt;  &lt;h2&gt;Missing components&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Skins&lt;/strong&gt;: There is a small change in the way that resource dictionaries are handled in Windows 8. I need to sort things out, so right now there is no “MainSkin.xaml” in the project template. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;DialogMessage&lt;/strong&gt;: This type is bugging me in V3/V4b because it is bringing the MessageBoxResult type into the ViewModel. I am looking at ways to make it better by converting the MessageBoxResult into a vanilla Boolean. In Windows 8, MessageBoxResult does not exist anymore (there is no MessageBox or popups of any kinds in Metro style apps). Consequently, the DialogMessage does not build, and I decided to just remove it for now. I will add it again when I refactor to the “vanilla” version. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;EventToCommand&lt;/strong&gt;: There are no Blend behaviors in Windows 8 yet (important word: &lt;strong&gt;yet&lt;/strong&gt;). I am looking at ways to have behaviors on Windows 8 before Blend 5 for XAML gets released. Stay tuned. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;DispatcherHelper&lt;/strong&gt;: The Dispatcher object has changed quite a lot in Windows 8, and I am looking at ways to keep the DispatcherHelper compatible with previous versions of MVVM Light by wrapping these differences. It shouldn’t be a big deal, but I want to give myself a little time to get it right (hopefully). &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Next steps&lt;/h2&gt;  &lt;p&gt;I intend to build a small sample application (very similar to the one I built for my MIX11 talk) to try the various components in real life conditions. This will of course be the topic of an upcoming blog post.&lt;/p&gt;  &lt;p&gt;I encourage everyone to try these components in Windows 8 preview, and please don’t be shy with your feedback!&lt;/p&gt;  &lt;p&gt;Cheers,    &lt;br /&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; left: 130px; top: -36px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-top-style: none; margin-bottom: -20px; height: 23px; width: 450px; border-bottom-style: none; overflow: hidden; border-right-style: none; border-left-style: none; margin-top: 7px" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/10/03/mvvm-light-toolkit-for-windows-8-preview-mvvmlight-win8.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/147166.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/25/breaking-change-raising-propertychanged-with-string.empty-in-winrt--windows.aspx"&gt;Breaking change: Raising PropertyChanged with string.Empty in WinRT / Windows 8&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, September 25, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;In the developer preview of Windows 8, I just noticed a breaking change in the way that data bindings react to the &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.data.inotifypropertychanged.propertychanged(v=VS.85).aspx"&gt;PropertyChanged&lt;/a&gt;&lt;/strong&gt; event.&lt;/p&gt;  &lt;p&gt;First a bit of background: Often, objects that are databound to the UI are simple data objects (also called ViewModels) that implement the &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.data.inotifypropertychanged(v=VS.85).aspx"&gt;INotifyPropertyChanged&lt;/a&gt;&lt;/strong&gt; interface. This interface is very simple and defines just one event, the PropertyChanged event, that needs to be raised by the ViewModel when one of its property changes. It is what makes the ViewModel “observable”. If a property of another object (typically a UI element) is data bound (through a Binding object, often set declaratively in XAML), then the value of the observing property will be synchronized to the value of the observable property.&lt;/p&gt;  &lt;p&gt;Raising the PropertyChanged event requires an instance of the &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.data.propertychangedeventargs(v=VS.85).aspx"&gt;PropertyChangedEventArgs&lt;/a&gt;&lt;/strong&gt; class, which takes a string as sole parameter of its constructor. The string to be passed is the name of the observable property.&lt;/p&gt;  &lt;h2&gt;Raising with string.Empty or null&lt;/h2&gt;  &lt;p&gt;In WPF and Silverlight, it is possible to raise the PropertyChanged event with an instance of the PropertyChangedEventArgs class constructed with string.Empty (or null) instead of an existing property’s name. When a PropertyChanged event is raised in this manner, the UI will re-query the value of each property of the ViewModel that is data bound to the UI. This is a convenient way to raise but one event and force the UI to update itself in response to cascading changes, for example. As such, this can be a good way to increase the performance of the application.&lt;/p&gt;  &lt;h2&gt;The breaking change in WinRT&lt;/h2&gt;  &lt;p&gt;However, while unit testing the version of &lt;a href="http://www.galasoft.ch/mvvm"&gt;MVVM Light&lt;/a&gt; for WinRT, I found out that raising the PropertyChanged event with an empty string or null does not update the bindings. I quickly coded a repro, and then coded the exact same code in Silverlight, and indeed the two applications do not react the same at all.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://galasoft.ch/blogs-all/Resources/20110925/INPCBreakingWinRT.zip"&gt;Metro – style repro&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://galasoft.ch/blogs-all/Resources/20110925/INPCBreakingSilverlight.zip"&gt;Expected behavior in Silverlight for comparison&lt;/a&gt;.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Hopefully this is only an oversight and this will be fixed in a future version. &lt;/p&gt;  &lt;p&gt;Cheers,   &lt;br /&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; left: 130px; top: -36px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-top-style: none; margin-bottom: -20px; height: 23px; width: 450px; border-bottom-style: none; overflow: hidden; border-right-style: none; border-left-style: none; margin-top: 7px" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/09/25/breaking-change-raising-propertychanged-with-string.empty-in-winrt--windows.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/147041.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/25/quick-tip-select-the-correct-inotifypropertychanged-in-windows-8.aspx"&gt;Quick tip: Select the correct INotifyPropertyChanged in Windows 8 / WinRT&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, September 25, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Microsoft loves MVVM and INotifyPropertyChanged so much that they included this very useful interface twice in the new WinRT framework. Unfortunately, only one of these is working correctly (and the other one is likely a bug, remnant from the past &lt;img class="wlEmoticon wlEmoticon-winkingsmile" style="border-top-style: none; border-bottom-style: none; border-right-style: none; border-left-style: none" alt="Winking smile" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/Windows-Live-Writer/Quick-tip-Select-the-correct-INotifyProp_1400B/wlEmoticon-winkingsmile_2.png" /&gt;)&lt;/p&gt;  &lt;p&gt;When implementing INotifyPropertyChanged, make sure that you select the correct one! The one you want to use is into &lt;strong&gt;Windows.UI.Xaml.Data&lt;/strong&gt;. The old one, the one you DON’T WANT is into System.ComponentModel (the same namespace it was in WPF and Silverlight). If you select the wrong one, the Bindings will not be updated and the UI will remain dead as a dead fish. &lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm7.static.flickr.com/6173/6182240057_d008054937_o_d.png" /&gt;&lt;/p&gt;  &lt;p&gt;I mentioned before that Microsoft took the “once in a lifetime” opportunity (well, 5-10 years is a lifetime in the world of computers) to clean up and rearrange classes within the framework. This is one of the signs right here. As for the System.ComponentModel.INotifyPropertyChanged, I guess it will be removed in a later release of the WinRT framework.&lt;/p&gt;  &lt;p&gt;Cheers,&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; left: 130px; top: -36px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-top-style: none; margin-bottom: -20px; height: 23px; width: 450px; border-bottom-style: none; overflow: hidden; border-right-style: none; border-left-style: none; margin-top: 7px" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/09/25/quick-tip-select-the-correct-inotifypropertychanged-in-windows-8.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/147038.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/25/detecting-design-mode-in-windows-8winrt.aspx"&gt;Detecting design mode in Windows 8/WinRT&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, September 25, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;One of the very useful features of the &lt;a href="http://www.galasoft.ch/mvvm"&gt;MVVM Light toolkit&lt;/a&gt; is to help with the creation of design time data, in order to give something to see on the design surface (Expression Blend, Visual Studio designer). This is especially useful when designing list controls such as ListBox, ComboBox, etc. Without design time data, these controls will remain empty, and the designer will not see what he is working on. This can cost a lot of time and cause frustration.&lt;/p&gt;  &lt;p&gt;Detecting design mode was always incompatible in WPF and in Silverlight.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In WPF, we use a rather complicated snippet: &lt;/li&gt; &lt;/ul&gt;  &lt;pre class="csharp" name="code"&gt;var prop = DesignerProperties.IsInDesignModeProperty;&lt;br /&gt;_isInDesignMode&lt;br /&gt;    = (bool)DependencyPropertyDescriptor&lt;br /&gt;                 .FromProperty(prop, typeof(FrameworkElement))&lt;br /&gt;                 .Metadata.DefaultValue;&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;In Silverlight, there is a convenient property: &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;_isInDesignMode = DesignerProperties.IsInDesignTool;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;In WinRT, &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.designmode.designmodeenabled(v=VS.85).aspx"&gt;we have to use yet another property&lt;/a&gt;: &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;_isInDesignMode &lt;br /&gt;    = Windows.ApplicationModel.DesignMode.DesignModeEnabled;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Abstracting the differences&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;These differences can make it difficult to share code between these environments. This is why the MVVM Light toolkit abstracts these and provides a convenient property on the ViewModelBase class:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;(within a ViewModel deriving from ViewModelBase):&lt;br /&gt;&lt;br /&gt;if (IsInDesignMode)&lt;br /&gt;{&lt;br /&gt;    // Create design time data&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;    // Create run time data&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;(within any class not deriving from ViewModelBase):&lt;br /&gt;&lt;br /&gt;if (ViewModelBase.IsInDesignModeStatic)&lt;br /&gt;{&lt;br /&gt;    // Create design time data&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;    // Create run time data&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Happy coding!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Laurent&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; left: 130px; top: -36px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;iframe style="border-top-style: none; margin-bottom: -20px; height: 23px; width: 450px; border-bottom-style: none; overflow: hidden; border-right-style: none; border-left-style: none; margin-top: 7px" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/09/25/detecting-design-mode-in-windows-8winrt.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/147036.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/20/quick-tip-adding-objects-in-resources.aspx"&gt;Quick tip: Adding objects in resources.&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Tuesday, September 20, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;If you are using MVVM-Light style ViewModel creation (often referred to as “view-first”), you might have noticed that you cannot build if you have an object in the view’s resources. It means that the code below does not compile.&lt;/p&gt;  &lt;pre class="xml" name="code"&gt;&amp;lt;UserControl.Resources&amp;gt;&lt;br /&gt;    &amp;lt;vm:MyViewModel x:Key="MyViewModel"&lt;br /&gt;                    xmlns:vm="using:Application1.ViewModel" /&amp;gt;&lt;br /&gt;&amp;lt;/UserControl.Resources&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;UserControl.DataContext&amp;gt;&lt;br /&gt;    &amp;lt;Binding Source="{StaticResource MyViewModel}" /&amp;gt;&lt;br /&gt;&amp;lt;/UserControl.DataContext&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I was told it is a bug that is being fixed, so no worries, the view-first way will still work! As a workaround, you can create the ViewModel in code behind and then save it into the resources, or simply assign it to the DataContext.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;partial class MainPage&lt;br /&gt;{&lt;br /&gt;    public MainPage()&lt;br /&gt;    {&lt;br /&gt;        InitializeComponent();&lt;br /&gt;        DataContext = new MyViewModel();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Of course this way is less blendable (meaning that Expression Blend will not be able to create the ViewModel and to show design time data if available. However, since we don’t have Expression Blend for XAML yet, it’s not that big a deal. Let’s hope that these small issues will be resolved soon.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; left: 130px; top: -36px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;iframe style="border-top-style: none; margin-bottom: -20px; height: 23px; width: 450px; border-bottom-style: none; overflow: hidden; border-right-style: none; border-left-style: none; margin-top: 7px" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/146949.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/12/mvvm-light-v4-beta1.aspx"&gt;MVVM Light V4 beta1&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Monday, September 12, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;This morning, I published MVVM Light V4 beta1 in the form of an MSI. The installation instructions are detailed on the &lt;a href="http://www.galasoft.ch/mvvm/installing/"&gt;MVVM Light installation page&lt;/a&gt;. Please make sure to &lt;a href="http://www.galasoft.ch/mvvm/cleaning/"&gt;uninstall previous versions&lt;/a&gt; before you install V4 beta1.&lt;/p&gt;  &lt;p&gt;There are &lt;a href="http://www.galasoft.ch/mvvm/installing/changes/"&gt;quite a few changes in this version&lt;/a&gt;, and I plan to blog about various features in the coming days. As usual, stay tuned!&lt;/p&gt;  &lt;h2&gt;Change log&lt;/h2&gt;  &lt;h3&gt;General changes&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Added &lt;a href="#XmlnsDefinitionAttribute"&gt;XmlnsDefinitionAttribute for GalaSoft.MvvmLight.Command&lt;/a&gt; in Extras assembly. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Setup&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;&lt;a href="http://www.galasoft.ch/mvvm/installing"&gt;Created an installer&lt;/a&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Messenger&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Fixed &lt;a href="http://mvvmlight.codeplex.com/workitem/7521"&gt;Issue #7521&lt;/a&gt;: race condition in Messenger.Default. &lt;/li&gt;    &lt;li&gt;Fixed &lt;a href="http://mvvmlight.codeplex.com/workitem/7539"&gt;Issue #7539&lt;/a&gt;: Messenger support for uncast objects. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;ViewModelBase&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Added support for RaisePropertyChanged(null) and RaisePropertyChanged(string.empty). A blog post about this will follow. &lt;/li&gt;    &lt;li&gt;Fixed &lt;a href="http://mvvmlight.codeplex.com/workitem/7520"&gt;Issue #7520&lt;/a&gt;: RaisePropertyChanged() fails in ReleaseBuild. This overload was removed because of the many issues, and replaced by the Set methods. &lt;/li&gt;    &lt;li&gt;Added Set(...) methods. A blog post about this will follow. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;RelayCommand&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Fixed &lt;a href="http://mvvmlight.codeplex.com/workitem/7522"&gt;Issue #7522&lt;/a&gt;: used deprecated Predicate instead of Func. &lt;/li&gt;    &lt;li&gt;Fixed &lt;a href="http://mvvmlight.codeplex.com/workitem/7534"&gt;Issue #7534&lt;/a&gt;: RelayCommand has security issue. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;SimpleIoc&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Implemented method IsRegistered&amp;lt;T&amp;gt;(). A blog post about this will follow. &lt;/li&gt;    &lt;li&gt;Fixed issue "Contains&amp;lt;T&amp;gt;() is returning true even if no instance was already instantiated". Contains&amp;lt;T&amp;gt;() only returns true if an instance is already created. IsRegistered&amp;lt;T&amp;gt;() returns true if the class has been registered with the IOC container. &lt;/li&gt;    &lt;li&gt;Fixed issue "Instances get created at registration already when registered with a key and a factory". Registering the instance does not execute the factory method yet. The method is only executed when the method GetInstance is called the first time. &lt;/li&gt;    &lt;li&gt;Fixed issue "Use the correct DLLs for CommonServiceLocator". The original DLLs from &lt;a href="http://commonservicelocator.codeplex.com"&gt;http://commonservicelocator.codeplex.com&lt;/a&gt; are now used everywhere. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;DispatcherHelper&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;The class was moved from GalaSoft.MvvmLight.Extras.dll into GalaSoft.MvvmLight.dll. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Project Templates&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;A couple of internal changes to the template's structure. &lt;/li&gt;    &lt;li&gt;Using the new slightly modified MVVM Light logo. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;ViewModelLocator Template&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Modified template to use SimpleIoc. &lt;/li&gt;    &lt;li&gt;A couple of internal changes to the template's structure. &lt;/li&gt;    &lt;li&gt;Using the new slightly modified MVVM Light logo. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;ViewModel Template&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;A couple of internal changes to the template's structure. &lt;/li&gt;    &lt;li&gt;Using the new slightly modified MVVM Light logo. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;View Template&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Fixed issue in XAML for WP7 and WP7.1 templates. &lt;/li&gt;    &lt;li&gt;A couple of internal changes to the template's structure. &lt;/li&gt;    &lt;li&gt;Using the new slightly modified MVVM Light logo. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;INPC snippet&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Setter in property is now public. &lt;/li&gt;    &lt;li&gt;Added $end$ marker. &lt;/li&gt;    &lt;li&gt;Added new snippets with various ways to call RaisePropertyChanged. &lt;/li&gt;    &lt;li&gt;Added a snippet using the new ViewModelBase.Set() method. &lt;/li&gt;    &lt;li&gt;A blog post will follow about all this. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;ViewModelLocator property snippet&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Added $end$ marker. &lt;/li&gt;    &lt;li&gt;Modified to use SimpleIoc. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Relay Command snippets&lt;/h3&gt;  &lt;ul class="squarelist"&gt;   &lt;li&gt;Added code snippets for RelayCommands. A blog post about this will follow. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Details&lt;/h2&gt;  &lt;h3&gt;&lt;a id="XmlnsDefinitionAttribute"&gt;&lt;/a&gt;XmlnsDefinitionAttribute for GalaSoft.MvvmLight.Command in Extras assembly&lt;/h3&gt;  &lt;p&gt;Thanks to the addition of XmlnsDefinitionAttribute, you can simplify the inclusion of the MVVM Light EventToCommand action in XAML. See the before and after below:&lt;/p&gt;  &lt;pre class="xml" name="code"&gt;Before:&lt;br /&gt;&lt;br /&gt;&amp;lt;UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" &lt;br /&gt;             &lt;br /&gt;             xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.SL4"&lt;br /&gt;             &lt;br /&gt;             xmlns:cmd="http://www.galasoft.ch/mvvmlight" &lt;br /&gt;             x:Class="MvvmLight4.MainPage"&amp;gt;&lt;br /&gt;&lt;br /&gt;After:&lt;br /&gt;&lt;br /&gt;&amp;lt;UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" &lt;br /&gt;             xmlns:cmd="http://www.galasoft.ch/mvvmlight" &lt;br /&gt;             x:Class="MvvmLight4.MainPage"&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/09/12/mvvm-light-v4-beta1.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/146840.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/09/01/mvvm-light-v3-installer-for-non-english-systems.aspx"&gt;MVVM light V3 installer for non-English systems&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Thursday, September 01, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;After &lt;a href="http://www.galasoft.ch/mvvm/installing/index.html"&gt;I released the MVVM Light installer&lt;/a&gt;, I got a note saying that parts of the installation failed on non-English systems (in that case a German installation of Expression Blend and Visual Studio). Specifically, what failed was the code snippets on Visual Studio, and the project and item templates in Expression Blend.&lt;/p&gt;  &lt;p&gt;After investigating, it is correct that these two particular features of MVVM Light were installed to language-coded folders. Correcting the issue for Expression Blend was easy enough (Blend can also find project and item templates in the My Documents folder, under Expression\Blend 4\ItemTemplates and Expression\Blend 4\ProjectTemplates, which are language independent).&lt;/p&gt;  &lt;p&gt;Unfortunately it was not that easy for code snippets, so eventually I had to resort to a few custom actions in the installer. How annoying that we cannot install code snippets to a language-neutral folder!!&lt;/p&gt;  &lt;p&gt;Anyway, after a lot of efforts and even more testing, &lt;a href="http://www.galasoft.ch/mvvm/installing/index.html"&gt;I published a new version which corrects the previous issues&lt;/a&gt;. So now I can happily resume my efforts on V4 beta 1 which is nearing completion, and which will also come with a neat installer &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/Windows-Live-Writer/MVVM-light-V3-installer-for-non-English-_12C83/wlEmoticon-smile_2.png" /&gt;&lt;/p&gt;  &lt;p&gt;Happy coding,&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/09/01/mvvm-light-v3-installer-for-non-english-systems.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/146738.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/08/07/automated-installer-for-mvvm-light-v3.aspx"&gt;Automated installer for MVVM Light V3!&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Saturday, August 06, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;For a very (too) long time, the installation procedure for MVVM Light sucked. It involved downloading and unzipping files in various locations. Unfortunately, creating an automated installer is not completely trivial because of the variety of files that are getting installed: Binaries, Code Snippets, Project and Item Templates, all require different locations, and all that for VS2008, VS2010, Blend 4 and Silverlight 3, Silverlight 4, WPF3.5 SP1, WPF4, WP7.0 and now WP7.1 “Mango”.&lt;/p&gt;  &lt;p&gt;Thankfully, MVVM Light is taking advantage of a great community. First, &lt;a href="http://twitter.com/leonzandman"&gt;Leon Zandman&lt;/a&gt; initiated the project of an MSI for MVVM Light. Unfortunately, Leon was not able to complete this initiative, but &lt;a href="http://sharpgis.net/"&gt;the very helpful and capable Morten Nielsen&lt;/a&gt; created the installer in Wix. This gave me the occasion to learn Wix (I had only created setups with the Visual Studio setup project so far), and to tweak the installer. I am really grateful to Morten for his time!&lt;/p&gt;  &lt;p&gt;Yesterday, I &lt;a href="http://www.galasoft.ch/mvvm/installing/"&gt;published the automated installer for MVVM Light V3&lt;/a&gt;. This installer contains binaries, project and item template as well as code snippets for Silverlight 3, Silverlight 4, WPF3.5SP1, WPF4, Windows Phone 7.0 and Windows Phone 7.5 “Mango”. It allows you to develop in Visual Studio 2008, Visual Studio 2010, Expression Blend 4 and/or Visual Studio Express for Windows Phone.&lt;/p&gt;  &lt;div class="frame"&gt;&lt;strong&gt;Update:&lt;/strong&gt; There is a small issue with the installer &lt;strong&gt;for non-English installations (only!!)&lt;/strong&gt; of Visual Studio and Expression Blend. While most features install correctly, the &lt;strong&gt;code snippets in VS&lt;/strong&gt; and the &lt;strong&gt;templates in Blend&lt;/strong&gt; are not installed. We are working on a fix.&lt;/div&gt;  &lt;h2&gt;And then?&lt;/h2&gt;  &lt;p&gt;A lot of people asked me when MVVM Light V4 will be published. As I mentioned above, I will release a beta 1 very soon. Beta 1 means that the API should be reasonably stable. I do however have more things I want to fix, so I am also planning a beta 2 before I hit RTM. The goal with beta 2 is to let people test my fixes, just to make sure that I didn’t break anything (yes I do run quite a few unit tests in all available frameworks, but… &lt;a href="http://en.wikipedia.org/wiki/Errare_humanum_est#errare_humanum_est"&gt;errare humanum est&lt;/a&gt;!).&lt;/p&gt;  &lt;p&gt;It is really hard for me to give a precise timeline for those releases, because &lt;a href="http://www.identitymine.com"&gt;of work&lt;/a&gt;, a new house that we are moving to in August, &lt;a href="http://www.flickr.com/photos/lbugnion/5994256381/"&gt;my wonderful family&lt;/a&gt; who also requires some of my time here and there and my greedy Kindle 3 (just finished &lt;a href="http://www.amazon.com/Dance-Dragons-Book-Song-ebook/dp/B004XISI4A/ref=tmm_kin_title_0?ie=UTF8&amp;amp;m=APZETQFSWU1YM"&gt;A Dance with Dragons&lt;/a&gt;, that one was pretty amazing). However roughly put, it looks like this:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;MVVM Light V4 beta 1 before end of August. &lt;/li&gt;    &lt;li&gt;MVVM Light V4 beta 2 not too long after that. &lt;/li&gt;    &lt;li&gt;MVVM Light V4 RTM not too long after that &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/Windows-Live-Writer/Installing-MVVM-Light_9D5D/wlEmoticon-smile_2.png" /&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;More than ever, I am amazed and delighted at the great feedback I receive from the MVVM Light community. This is not a perfect product, but your continuous constructive feedback keeps me motivated to continue developing and making this toolkit better. Thanks for your fantastic support!&lt;/p&gt;  &lt;p&gt;Happy coding!&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/08/07/automated-installer-for-mvvm-light-v3.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/146449.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Sun, 23 Oct 2011 14:52:31 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20111023025231P</guid></item><item><title>Updated Wiki: Home</title><link>http://mvvmlight.codeplex.com/wikipage?version=13</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Project Description&lt;/h1&gt;The MVVM Light Toolkit is a set of components helping people to get started in the Model - View - ViewModel pattern in Silverlight and WPF. It is a light and pragmatic framework that contains only the essential components needed.&lt;br /&gt;
&lt;h1&gt;Get started&lt;/h1&gt;More information about the MVVM Light Toolkit can be found on &lt;a href="http://www.galasoft.ch/mvvm/getstarted" class="externalLink"&gt;http://www.galasoft.ch/mvvm/getstarted&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Get more info about MVVM&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Understanding the MVVM Pattern (MIX10 session)&lt;/li&gt;&lt;/ul&gt;
&lt;a href="http://live.visitmix.com/MIX10/Sessions/EX14" class="externalLink"&gt;http://live.visitmix.com/MIX10/Sessions/EX14&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Deep Dive MVVM (MIX11 session, please vote for it!)&lt;/li&gt;&lt;/ul&gt;
&lt;a href="http://mvvmlight.codeplex.com/wikipage?title=http%3a%2f%2flive.visitmix.com%2fOpenCall%2fVote%2fSession%2f21&amp;referringTitle=Home"&gt;http&amp;#58;&amp;#47;&amp;#47;live.visitmix.com&amp;#47;OpenCall&amp;#47;Vote&amp;#47;Session&amp;#47;21&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;Donate&lt;/h1&gt;If you are so enclined, you can &lt;a href="http://www.galasoft.ch/mvvm/donate" class="externalLink"&gt;donate to MVVM Light Toolkit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;Or, if you prefer, you can pay me a beer next time we&amp;#39;re in the same vicinity. Really, it is OK too :)&lt;br /&gt;
&lt;h1&gt;Latest news:&lt;/h1&gt;The latest news about MVVM Light are available from the MVVM feed on my blog at &lt;a href="http://blog.galasoft.ch/category/10201.aspx" class="externalLink"&gt;http://blog.galasoft.ch/category/10201.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;(RSS feed: &lt;a href="http://blog.galasoft.ch/lbugnion/category/10201.aspx/rss" class="externalLink"&gt;http://blog.galasoft.ch/lbugnion/category/10201.aspx/rss&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;div class="rss"&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/06/15/proposing-a-new-relaycommand-snippet-for-mvvm-light-v4.aspx"&gt;Proposing a new RelayCommand snippet for MVVM Light V4&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Wednesday, June 15, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;In MVVM Light V4, I am proposing a new RelayCommand snippet, making it easier to declare and initialize a RelayCommand. I came up with a syntax that allows having the RelayCommand and its initialization in one convenient location.&lt;/p&gt;  &lt;p&gt;I am looking for feedback, so leave your comments below!!&lt;/p&gt;  &lt;h2&gt;RelayCommand&lt;/h2&gt;  &lt;p&gt;This is the code created by the code snippet after expansion, for a simple RelayCommand.&lt;/p&gt;  &lt;pre class="csharp" name="code"&gt;private RelayCommand _testCommand;&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Gets the TestCommand.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public RelayCommand TestCommand&lt;br /&gt;{&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;        return _testCommand ?? (_testCommand = new RelayCommand(&lt;br /&gt;            () =&amp;gt;&lt;br /&gt;            {&lt;br /&gt;                // Execute delegate&lt;br /&gt;                throw new NotImplementedException();&lt;br /&gt;            },&lt;br /&gt;            () =&amp;gt;&lt;br /&gt;            {&lt;br /&gt;                // CanExecute delegate&lt;br /&gt;                throw new NotImplementedException();&lt;br /&gt;            }));&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h2&gt;RelayCommand&amp;lt;T&amp;gt;&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This is the code created by the code snippet after expansion, for a generic RelayCommand (with parameter).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;private RelayCommand&amp;lt;string&amp;gt; _testAgainCommand;&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Gets the TestAgainCommand.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public RelayCommand&amp;lt;string&amp;gt; TestAgainCommand&lt;br /&gt;{&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;        return _testAgainCommand ?? (_testAgainCommand = new RelayCommand&amp;lt;string&amp;gt;(&lt;br /&gt;            p =&amp;gt;&lt;br /&gt;            {&lt;br /&gt;                // Execute delegate&lt;br /&gt;                throw new NotImplementedException();&lt;br /&gt;            },&lt;br /&gt;            p =&amp;gt;&lt;br /&gt;            {&lt;br /&gt;                // CanExecute delegate&lt;br /&gt;                throw new NotImplementedException();&lt;br /&gt;            }));&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Do you find this way of creating the RelayCommands convenient? This limits the number of key press to a minimum (the only parameters to enter are the attribute name, the command’s name and (in the case of the generic RelayCommand) the type of the parameter. Looking for feedback before I consolidate this for V4!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Happy coding!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Laurent&lt;/p&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;&lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/06/15/proposing-a-new-relaycommand-snippet-for-mvvm-light-v4.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/145872.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/05/24/mvvm-light-toolkit-patch-for-wp7-mango-beta.aspx"&gt;MVVM Light Toolkit patch for WP7 Mango Beta&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Tuesday, May 24, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;On Tuesday the 24th of May 2011, the &lt;a href="http://create.msdn.com/en-us/home/getting_started"&gt;new version of the Windows Phone 7 SDK&lt;/a&gt; codenamed “Mango” was released to the public in beta. This is a huge iteration with an extremely large number of new APIs. Most exciting, the version of the Silverlight framework now used in Windows Phone 7 is &lt;strong&gt;Silverlight 4&lt;/strong&gt;. Thanks to this, I was able to recompile the MVVM Light Toolkit for Windows Phone 7 based on the Silverlight 4 version. This is interesting because the Silverlight 3 version had a few hacks I had to build in to work around some limitations of the framework. Now in Silverlight 4, the code is leaner and cleaner.&lt;/p&gt;  &lt;p&gt;More details about the download and installation of the "Mango beta" path for MVVM Light &lt;a href="http://www.galasoft.ch/mvvm/installing/mangobeta"&gt;can be found here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Happy Mango coding!!&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; border-right-style: none; margin-top: 7px; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-left-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/lbugnion/archive/2011/05/24/mvvm-light-toolkit-patch-for-wp7-mango-beta.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/145516.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/05/20/is-your-application-powered-by-mvvmlight.aspx"&gt;Is your application powered by #mvvmlight?&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Friday, May 20, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;A couple of days ago I had the wonderful surprise to find &lt;a href="http://content.usatoday.com/communities/labs/post/2011/05/windows-phone-7-app-live/1"&gt;a mention (and a link!) to MVVM Light on USAToday.com&lt;/a&gt;. The article talks about the new USA Today app available for Windows Phone 7. MVVM Light is mentioned as well as JSON.NET just after the high quality of the development tools is mentioned:&lt;/p&gt;  &lt;div style="border-right-width: 2px; background: white; border-top-width: 2px; border-bottom-width: 2px; border-left-width: 2px" class="frame"&gt;&lt;em&gt;&lt;font style="background-color: #ffff00"&gt;&lt;/font&gt;&lt;/em&gt;&lt;em&gt;“That same high bar for tools extends into the community as well. &lt;/em&gt;&lt;a href="http://mvvmlight.codeplex.com/"&gt;&lt;em&gt;MVVM Light&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and JSON.Net were extremely useful moving past mundane tasks and instead getting to the business of building our app.” – &lt;a href="http://content.usatoday.com/topics/reporter/Tim+Carlson"&gt;Tim Carlson&lt;/a&gt;, USA TODAY&lt;/em&gt;&lt;em&gt;&lt;font style="background-color: #ffff00"&gt;&lt;/font&gt;&lt;/em&gt;&lt;/div&gt;  &lt;p&gt;This is of course fantastic, but it made me realize that I did not, until now, keep track of what applications (in Windows Phone 7 but also Silverlight and WPF) use MVVM Light to facilitate the development. &lt;/p&gt;  &lt;h2&gt;An appeal to MVVM Light users&lt;/h2&gt;  &lt;p&gt;In order to correct this, I would love to hear from you. Do you use MVVM Light? Did you publish an application (WP7, Silverlight, WPF) using the bits? If yes, do you mind answering the following optional questions:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;What is the name and homepage of your project? &lt;/li&gt;    &lt;li&gt;What framework is it? (WP7, Silverlight, WPF?) &lt;/li&gt;    &lt;li&gt;Do you allow me to use this info for promotion (on the MVVM Light Toolkit’s page, or in conferences)? (if you prefer me to keep this info confidential, you have my assurance that I will happily comply). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Feel free to answer in the comments below, or per email to &lt;strong&gt;&lt;a href="mailto:laurent@galasoft.ch"&gt;laurent@galasoft.ch&lt;/a&gt;&lt;/strong&gt;. This is, in advance, very much appreciated!&lt;/p&gt;  &lt;p&gt;Happy coding,    &lt;br /&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/05/20/is-your-application-powered-by-mvvmlight.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/145460.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/05/07/mvvm-light-v3-on-nuget-now-with-wp7-support.aspx"&gt;MVVM Light V3 on NuGet (now with WP7 support)&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Saturday, May 07, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;There was already a version of MVVM Light on &lt;a href="http://nuget.org"&gt;Nuget&lt;/a&gt; before. However the old version did not support Windows Phone 7. This is now corrected. Also the new version now adds a ViewModelLocator to your project and includes it in App.xaml.&lt;/p&gt;  &lt;h2&gt;What is NuGet?&lt;/h2&gt;  &lt;p&gt;NuGet is a mechanism allowing to add packages (assemblies, source code…) to an existing project. All versions of MVVM Light are supported (&lt;strong&gt;WPF3.5, WPF4, Silverlight 3, Silverlight 4, Windows Phone 7&lt;/strong&gt;).&lt;/p&gt;  &lt;p&gt;In order to install NuGet and learn more about this cool package manager, go to &lt;a href="http://nuget.org"&gt;http://nuget.org&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Finding and installing MVVM Light with NuGet&lt;/h2&gt;  &lt;p&gt;To find MVVM Light in NuGet, follow the steps:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Open your project in Visual Studio 2010. &lt;/li&gt;    &lt;li&gt;Right click on the References folder and select “Add Library Package Reference” from the context menu. &lt;/li&gt; &lt;/ul&gt; &lt;a title="Add Library Package Reference" href="http://www.flickr.com/photos/36917929@N06/5696049465"&gt;&lt;img title="" alt="Add Library Package Reference" src="http://farm3.static.flickr.com/2745/5696049465_4c5cbfbebd.jpg" width="452" height="148" /&gt;&lt;/a&gt;   &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Should that menu item be missing, you need to install the NuGet package manager. Go to &lt;a href="http://nuget.org"&gt;http://nuget.org&lt;/a&gt; and follow the indications.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In the “Search Online” field, enter “mvvmlight” and press Enter. &lt;/li&gt;    &lt;li&gt;Select the MVVM Light package and press the Install button. &lt;/li&gt; &lt;/ul&gt; &lt;a title="Snagit Capture for Flickr" href="http://www.flickr.com/photos/36917929@N06/5696059613"&gt;&lt;img src="http://farm6.static.flickr.com/5222/5696059613_e142b9fe43.jpg" width="500" height="281" /&gt;&lt;/a&gt;   &lt;p&gt;After these steps, the following changes have been made to your project:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A “packages” folder was added with the following libraries. Note that this folder is added to the root of the project structure and does not appear in the Solution Explorer.      &lt;ul&gt;       &lt;li&gt;The MVVM Light DLLs: GalaSoft.MvvmLight and GalaSoft.MvvmLight.Extras. &lt;/li&gt;        &lt;li&gt;The referenced System.Windows.Interactivity.dll, needed by the GalaSoft.MvvmLight.Extras assembly. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;A ViewModel folder was added with two additional classes:      &lt;ul&gt;       &lt;li&gt;ViewModelLocator.cs &lt;/li&gt;        &lt;li&gt;MainViewModel.cs &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;The App.xaml file was modified with the addition of the ViewModelLocator as global resource. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Binding the DataContext in XAML&lt;/h3&gt;  &lt;p&gt;With the new file structure, the ViewModelLocator is exposed in App.xaml (global resources) and can be used as the source of the DataContext bindings.&lt;/p&gt;  &lt;p&gt;The MainViewModel that has also been added to the project is exposed in the ViewModelLocator as a property. for more details about this architecture, please refer to &lt;a href="http://channel9.msdn.com/events/MIX/MIX10/EX14"&gt;Understanding the MVVM pattern&lt;/a&gt; and &lt;a href="http://channel9.msdn.com/events/mix/mix11/OPN03"&gt;Deep Dive MVVM&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; In case you do not need the MainViewModel in your project, feel free to remove this class.&lt;/p&gt;  &lt;p&gt;In order to use the MainViewModel as the DataContext of the MainPage or MainWindow, use the following steps:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Open MainPage.xaml or MainWindow.xaml. &lt;/li&gt;    &lt;li&gt;Add the following line to the opening tag of the MainPage/MainWindow: &lt;/li&gt; &lt;/ul&gt;  &lt;pre class="brush: xml;"&gt;DataContext="{Binding Main, Source={StaticResource Locator}}"&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;From now on, the DataContext of the MainPage/MainWindow is set to the instance of MainViewModel exposed by the ViewModelLocator. These steps can be repeated at will with different views/viewmodels pairs.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Binding the DataContext in Blend&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The DataContext can also be databound visually in Expression Blend with the following steps.&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Open your project in Blend. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Build the application. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Open MainPage/MainWindow. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;In the Objects and Timeline panel, select the UserControl. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;In the Properties panel, select the DataContext property (in the Common Properties section). &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Click on the small Advanced options peg right of the property field and select Data Binding from the context menu. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;&lt;a title="Advanced options peg" href="http://www.flickr.com/photos/36917929@N06/5696690247"&gt;&lt;img title="" alt="Advanced options peg" src="http://farm6.static.flickr.com/5069/5696690247_f50d755e3f.jpg" width="295" height="148" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="Data binding menu item" href="http://www.flickr.com/photos/36917929@N06/5697268356"&gt;&lt;img title="" alt="Data binding menu item" src="http://farm3.static.flickr.com/2421/5697268356_b4b6edf31e.jpg" width="207" height="303" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;In the Data Binding editor, select the Data Field tab and the Locator data source. &lt;strong&gt;Note:&lt;/strong&gt; If you don’t see the Locator field, you need to build the project. &lt;/li&gt;
&lt;/ul&gt;
&lt;a title="Selecting the Locator field" href="http://www.flickr.com/photos/36917929@N06/5696700379"&gt;&lt;img title="" alt="Selecting the Locator field" src="http://farm3.static.flickr.com/2650/5696700379_9133c71c08.jpg" width="310" height="161" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;In the Fields area, expand the ViewModelLocator and select the Main property. Then press OK to close the Data Binding editor. &lt;/li&gt;
&lt;/ul&gt;
&lt;a title="Selecting the Main property" href="http://www.flickr.com/photos/36917929@N06/5697281848"&gt;&lt;img title="" alt="Selecting the Main property" src="http://farm3.static.flickr.com/2505/5697281848_db3f8b223d.jpg" width="290" height="88" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;h2&gt;Installing without the ViewModel folder (libraries only)&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Some users prefer to work without a ViewModelLocator, and are only interested in the MVVM Light assemblies. Unfortunately there is not really a way to specify options when using NuGet. So I created a different “barebone” package, named “MvvmLightLibs” which contains only the libraries and nothing else. To install this “barebone” version, follow the steps above, but select “&lt;strong&gt;MvvmLightLibs&lt;/strong&gt;” instead of MvvmLight.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Installing from the command line&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;There is also a way to use NuGet without Visual Studio, from the command line. &lt;a href="http://kintespace.com/rasxlog/?p=2598"&gt;A good description is available on this blog&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Tell me what you think!&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I am very interested to know what you guys think of the experience with NuGet. Please let me know if you like it!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/lbugnion/archive/2011/05/07/mvvm-light-v3-on-nuget-now-with-wp7-support.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/145233.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/04/14/mvvm-light-v4-preview-3-bl16-mix11-edition-mvvmlight.aspx"&gt;MVVM Light V4 preview 3 (BL16, MIX11 edition!!) #mvvmlight&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Thursday, April 14, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;At MIX11, I am releasing a new preview of MVVM Light version 4. This new preview contains one small change and one large change.&lt;/p&gt;  &lt;h2&gt;ObservableObject replaces NotifyPropertyChanged&lt;/h2&gt;  &lt;p&gt;In the previous preview, I introduced a new class named NotifyPropertyChanged. However, I got a few suggestions to rename this class to &lt;strong&gt;ObservableObject&lt;/strong&gt;, which is indeed a better name. In BL16, NotifyPropertyChanged was deleted and replaced by ObservableObject. Nothing else changes, just the name.&lt;/p&gt;  &lt;p&gt;ObservableObject is a very simple implementation of INotifyPropertyChanged suitable for data objects (in the Model, typically) that need to raise the PropertyChanged event, but that are not quite ViewModels. In my MIX11 session, I demo a usage of ObservableObject to build an application using JSON. In WCF, we don’t really need ObservableObject, since all the generated proxies will automatically implement INotifyPropertyChanged.&lt;/p&gt;  &lt;p&gt;We have:&lt;/p&gt; &lt;a title="Inheritance diagram" href="http://www.flickr.com/photos/36917929@N06/5602714681"&gt;&lt;img src="http://farm5.static.flickr.com/4110/5602714681_5263044218.jpg" width="274" height="281" /&gt;&lt;/a&gt;   &lt;h2&gt;Introducing SimpleIoc, a simple IOC container&lt;/h2&gt;  &lt;p&gt;Last year at MIX10, I did a demo using the Unity IOC container. This helper simplifies the creation and the resolution of services and of the ViewModels, and allows for a cleaner syntax in the ViewModelLocator. Since then, I have tried a multitude of variants for the ViewModelLocator class, and I still came back, over and over again, to the same idea: using an IOC container to do the bulk of the work.&lt;/p&gt;  &lt;p&gt;However, I did not want to settle on a given IOC container. There are so many of them, each with specific features, and each with an army of followers &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/Windows-Live-Writer/72a9eb60a78a_E155/wlEmoticon-smile_2.png" /&gt; so instead… I created my own. Well, to be honest I inspired myself strongly from &lt;a href="http://msmvps.com/blogs/vcsjones/archive/2010/11/25/a-really-super-light-and-simple-ioc-container-for-windows-phone-7.aspx"&gt;an existing simple IOC implementation&lt;/a&gt;, and I extended it with features that are super useful when working with ViewModels. Also a source of inspiration, the &lt;a href="http://simpleservicelocator.codeplex.com/"&gt;SimpleServiceLocator available on Codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;A more complete article dedicated to the SimpleIoc class in MVVM Light V4 will follow. Also, my MIX11 session “&lt;a href="http://blog.galasoft.ch/archive/2011/04/13/deep-dive-mvvm-samples-mix11-deepdivemvvm.aspx"&gt;Deep Dive MVVM&lt;/a&gt;” features the SimpleIoc in the samples. The session’s recording is available at &lt;a title="http://channel9.msdn.com/Events/MIX/MIX11/OPN03" href="http://channel9.msdn.com/Events/MIX/MIX11/OPN03"&gt;http://channel9.msdn.com/Events/MIX/MIX11/OPN03&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Cheers,&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/04/14/mvvm-light-v4-preview-3-bl16-mix11-edition-mvvmlight.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/144875.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/04/13/deep-dive-mvvm-samples-mix11-deepdivemvvm.aspx"&gt;Deep Dive MVVM samples #mix11 #deepdivemvvm&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Wednesday, April 13, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Here is the sample code I demoed in my MIX11 session “Deep Dive MVVM”. Please &lt;a href="http://www.galasoft.ch/mvvm/resources/Samples/MIX11-DeepDiveMvvm-Samples.zip"&gt;download the Zip file&lt;/a&gt;, and then unblock it in Windows Explorer by right-clicking it, and then selecting Properties. If you see an “Unblock” button, please click it. You can then extract the content of the Zip file on your hard drive.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.galasoft.ch/mvvm/resources/Samples/MIX11Final_BUGNION_OPN04.pptx"&gt;The slides are also available for download&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;Last year’s session&lt;/h2&gt;  &lt;p&gt;To fully understand this session, an understanding of what MVVM is should be available. I recommend the following links:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;“&lt;a href="http://channel9.msdn.com/Events/MIX/MIX10/EX14"&gt;Understanding the MVVM pattern&lt;/a&gt;” is the session I presented at MIX10. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/03/16/sample-code-for-my-mix10-talk-online.aspx"&gt;Sample code&lt;/a&gt; for “Understanding the MVVM pattern”. &lt;/li&gt;    &lt;li&gt;MVVM Light Toolkit “&lt;a href="http://www.galasoft.ch/mvvm/"&gt;Get Started&lt;/a&gt;” page. &lt;/li&gt;    &lt;li&gt;MVVM Light Toolkit &lt;a href="http://mvvmlight.codeplex.com/"&gt;on Codeplex&lt;/a&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;This year’s session&lt;/h2&gt;  &lt;p&gt;The video of Deep Dive MVVM is already available for download (awesome job, MIX team). &lt;a href="http://channel9.msdn.com/Events/MIX/MIX11/OPN03"&gt;Go to the MIX website&lt;/a&gt; to download it in various formats, or stream it.&lt;/p&gt;  &lt;h2&gt;Prerequisites&lt;/h2&gt;  &lt;p&gt;To execute the samples, you should have &lt;a href="http://www.microsoft.com/visualstudio/en-us/"&gt;Visual Studio 2010&lt;/a&gt; as well as the &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce"&gt;Windows Phone 7 tools&lt;/a&gt; installed.&lt;/p&gt;  &lt;h2&gt;Snippets&lt;/h2&gt;  &lt;p&gt;For your convenience, I added the snippets of code that I was dragging/dropping from the Toolbox during the session. The file “snippets.txt” is included inside the ZIP file.&lt;/p&gt;  &lt;h2&gt;00 JsonDemo – Start&lt;/h2&gt;  &lt;p&gt;This is the start state, which will compile and run fine, but without the added functionality we built in during the session.&lt;/p&gt;  &lt;h2&gt;01 JsonDemo - After wiring up&lt;/h2&gt;  &lt;p&gt;This is the state of the application after the first demo, where all the objects are wired up and connected, and the message is sent from the MasterViewModel to the DetailsViewModel. We also added the IsOlderThanMeIndicatorVisibility property and connected it to the corresponding Rectangle in the DataTemplate (in the MasterView).&lt;/p&gt;  &lt;h2&gt;02 JsonDemo – Behaviors&lt;/h2&gt;  &lt;p&gt;This is the state after adding the “please wait” animation, the states and connecting the MasterViewModel’s IsBusy property to the GoToStateAction and ControlStoryboardAction instances through the DataTrigger. In Windows Phone 7, we added some code behind to replicate the functionality.&lt;/p&gt;  &lt;h2&gt;03 JsonDemo - WP7 DialogService&lt;/h2&gt;  &lt;p&gt;In this section we added a view service, the IDialogService, to the WP7 application and implemented it to display a custom message box. In SL4, the functionality is also available although no custom message box was made, so the fallback MessageBox is used instead.&lt;/p&gt;  &lt;h2&gt;04 NavigationDemo&lt;/h2&gt;  &lt;p&gt;This section introduces another view service, the INavigationService with one implementation in Silverlight 4 and one for Windows Phone 7.&lt;/p&gt;  &lt;h2&gt;05 JsonDemo - Unit test&lt;/h2&gt;  &lt;p&gt;In this last section, we add unit tests (with mock, well precisely with stubs!) to the Silverlight 4 and to the Windows Phone 7 applications. This is the final state of the demo.&lt;/p&gt;  &lt;p&gt;I hope that this session was helpful, and that it will help you build awesome MVVM applications!&lt;/p&gt;  &lt;p&gt;Happy coding,&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/04/13/deep-dive-mvvm-samples-mix11-deepdivemvvm.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/144843.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/03/24/my-mvvm-talkrsquos-material-is-online-uktechdays.aspx"&gt;My MVVM talk&amp;rsquo;s material is online (#uktechdays)&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Thursday, March 24, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Quick announcement: I just had the extreme pleasure to talk at the UK TechDays online conference (organized over LiveMeeting) and had about 100 persons in the session, thanks to all for allowing me to talk to you about MVVM!&lt;/p&gt;  &lt;p&gt;I just &lt;a href="https://cid-40cffde85f1ab56a.office.live.com/browse.aspx/Presentations"&gt;pushed the whole sample code as well as the slides to a SkyDrive folder&lt;/a&gt;, so feel free to download and experiment.&lt;/p&gt;  &lt;p&gt;And don’t forget:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A &lt;a href="http://www.galasoft.ch/mvvmvideo1"&gt;recording of session with similar material but with 30 minutes more time&lt;/a&gt; for additional samples is online for your viewing pleasure. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/events/MIX/MIX11/OPN03"&gt;Deep Dive MVVM at MIX11&lt;/a&gt; will go much deeper and show advanced samples around MVVM, view services, unit testing a VM, and more. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The session was recorded, and I will announce in this space when it is online for your (re-)viewing pleasure.&lt;/p&gt;  &lt;p&gt;Cheers,&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/03/24/my-mvvm-talkrsquos-material-is-online-uktechdays.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/144507.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/03/20/building-mvvm-light-from-codeplex.aspx"&gt;Building MVVM Light from Codeplex&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, March 20, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;I just published an article describing how to get the source code from Codeplex, build it, unit test it, get all the DLLs and install them to replace a previously installed version. It’s not very complicated, but it is good to have this information in one location.&lt;/p&gt;  &lt;p&gt;The article is available at &lt;a href="http://www.galasoft.ch/mvvm/building/"&gt;http://www.galasoft.ch/mvvm/building/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Happy coding!&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/03/20/building-mvvm-light-from-codeplex.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/144451.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Mon, 08 Aug 2011 08:31:11 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110808083111A</guid></item><item><title>Updated Wiki: Home</title><link>http://mvvmlight.codeplex.com/wikipage?version=12</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Project Description&lt;/h1&gt;The MVVM Light Toolkit is a set of components helping people to get started in the Model - View - ViewModel pattern in Silverlight and WPF. It is a light and pragmatic framework that contains only the essential components needed.&lt;br /&gt;
&lt;h1&gt;Get started&lt;/h1&gt;More information about the MVVM Light Toolkit can be found on &lt;a href="http://www.galasoft.ch/mvvm/getstarted" class="externalLink"&gt;http://www.galasoft.ch/mvvm/getstarted&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Get more info about MVVM&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Understanding the MVVM Pattern (MIX10 session)&lt;/li&gt;&lt;/ul&gt;
&lt;a href="http://live.visitmix.com/MIX10/Sessions/EX14" class="externalLink"&gt;http://live.visitmix.com/MIX10/Sessions/EX14&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Deep Dive MVVM (MIX11 session, please vote for it!)&lt;/li&gt;&lt;/ul&gt;
&lt;a href="http://mvvmlight.codeplex.com/wikipage?title=http%3a%2f%2flive.visitmix.com%2fOpenCall%2fVote%2fSession%2f21&amp;referringTitle=Home"&gt;http&amp;#58;&amp;#47;&amp;#47;live.visitmix.com&amp;#47;OpenCall&amp;#47;Vote&amp;#47;Session&amp;#47;21&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;Donate&lt;/h1&gt;If you are so enclined, you can &lt;a href="http://www.galasoft.ch/mvvm/donate" class="externalLink"&gt;donate to MVVM Light Toolkit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;Or, if you prefer, you can pay me a beer next time we&amp;#39;re in the same vicinity. Really, it is OK too :)&lt;br /&gt;
&lt;h1&gt;Latest news:&lt;/h1&gt;The latest news about MVVM Light are available from the MVVM feed on my blog at &lt;a href="http://blog.galasoft.ch/category/10201.aspx" class="externalLink"&gt;http://blog.galasoft.ch/category/10201.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;div class="rss"&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/06/15/proposing-a-new-relaycommand-snippet-for-mvvm-light-v4.aspx"&gt;Proposing a new RelayCommand snippet for MVVM Light V4&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Wednesday, June 15, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;In MVVM Light V4, I am proposing a new RelayCommand snippet, making it easier to declare and initialize a RelayCommand. I came up with a syntax that allows having the RelayCommand and its initialization in one convenient location.&lt;/p&gt;  &lt;p&gt;I am looking for feedback, so leave your comments below!!&lt;/p&gt;  &lt;h2&gt;RelayCommand&lt;/h2&gt;  &lt;p&gt;This is the code created by the code snippet after expansion, for a simple RelayCommand.&lt;/p&gt;  &lt;pre class="csharp" name="code"&gt;private RelayCommand _testCommand;&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Gets the TestCommand.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public RelayCommand TestCommand&lt;br /&gt;{&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;        return _testCommand ?? (_testCommand = new RelayCommand(&lt;br /&gt;            () =&amp;gt;&lt;br /&gt;            {&lt;br /&gt;                // Execute delegate&lt;br /&gt;                throw new NotImplementedException();&lt;br /&gt;            },&lt;br /&gt;            () =&amp;gt;&lt;br /&gt;            {&lt;br /&gt;                // CanExecute delegate&lt;br /&gt;                throw new NotImplementedException();&lt;br /&gt;            }));&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h2&gt;RelayCommand&amp;lt;T&amp;gt;&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This is the code created by the code snippet after expansion, for a generic RelayCommand (with parameter).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;private RelayCommand&amp;lt;string&amp;gt; _testAgainCommand;&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Gets the TestAgainCommand.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public RelayCommand&amp;lt;string&amp;gt; TestAgainCommand&lt;br /&gt;{&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;        return _testAgainCommand ?? (_testAgainCommand = new RelayCommand&amp;lt;string&amp;gt;(&lt;br /&gt;            p =&amp;gt;&lt;br /&gt;            {&lt;br /&gt;                // Execute delegate&lt;br /&gt;                throw new NotImplementedException();&lt;br /&gt;            },&lt;br /&gt;            p =&amp;gt;&lt;br /&gt;            {&lt;br /&gt;                // CanExecute delegate&lt;br /&gt;                throw new NotImplementedException();&lt;br /&gt;            }));&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Do you find this way of creating the RelayCommands convenient? This limits the number of key press to a minimum (the only parameters to enter are the attribute name, the command’s name and (in the case of the generic RelayCommand) the type of the parameter. Looking for feedback before I consolidate this for V4!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Happy coding!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Laurent&lt;/p&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;&lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/06/15/proposing-a-new-relaycommand-snippet-for-mvvm-light-v4.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/145872.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/05/24/mvvm-light-toolkit-patch-for-wp7-mango-beta.aspx"&gt;MVVM Light Toolkit patch for WP7 Mango Beta&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Tuesday, May 24, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;On Tuesday the 24th of May 2011, the &lt;a href="http://create.msdn.com/en-us/home/getting_started"&gt;new version of the Windows Phone 7 SDK&lt;/a&gt; codenamed “Mango” was released to the public in beta. This is a huge iteration with an extremely large number of new APIs. Most exciting, the version of the Silverlight framework now used in Windows Phone 7 is &lt;strong&gt;Silverlight 4&lt;/strong&gt;. Thanks to this, I was able to recompile the MVVM Light Toolkit for Windows Phone 7 based on the Silverlight 4 version. This is interesting because the Silverlight 3 version had a few hacks I had to build in to work around some limitations of the framework. Now in Silverlight 4, the code is leaner and cleaner.&lt;/p&gt;  &lt;p&gt;More details about the download and installation of the "Mango beta" path for MVVM Light &lt;a href="http://www.galasoft.ch/mvvm/installing/mangobeta"&gt;can be found here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Happy Mango coding!!&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; border-right-style: none; margin-top: 7px; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-left-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/lbugnion/archive/2011/05/24/mvvm-light-toolkit-patch-for-wp7-mango-beta.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/145516.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/05/20/is-your-application-powered-by-mvvmlight.aspx"&gt;Is your application powered by #mvvmlight?&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Friday, May 20, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;A couple of days ago I had the wonderful surprise to find &lt;a href="http://content.usatoday.com/communities/labs/post/2011/05/windows-phone-7-app-live/1"&gt;a mention (and a link!) to MVVM Light on USAToday.com&lt;/a&gt;. The article talks about the new USA Today app available for Windows Phone 7. MVVM Light is mentioned as well as JSON.NET just after the high quality of the development tools is mentioned:&lt;/p&gt;  &lt;div style="border-right-width: 2px; background: white; border-top-width: 2px; border-bottom-width: 2px; border-left-width: 2px" class="frame"&gt;&lt;em&gt;&lt;font style="background-color: #ffff00"&gt;&lt;/font&gt;&lt;/em&gt;&lt;em&gt;“That same high bar for tools extends into the community as well. &lt;/em&gt;&lt;a href="http://mvvmlight.codeplex.com/"&gt;&lt;em&gt;MVVM Light&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and JSON.Net were extremely useful moving past mundane tasks and instead getting to the business of building our app.” – &lt;a href="http://content.usatoday.com/topics/reporter/Tim+Carlson"&gt;Tim Carlson&lt;/a&gt;, USA TODAY&lt;/em&gt;&lt;em&gt;&lt;font style="background-color: #ffff00"&gt;&lt;/font&gt;&lt;/em&gt;&lt;/div&gt;  &lt;p&gt;This is of course fantastic, but it made me realize that I did not, until now, keep track of what applications (in Windows Phone 7 but also Silverlight and WPF) use MVVM Light to facilitate the development. &lt;/p&gt;  &lt;h2&gt;An appeal to MVVM Light users&lt;/h2&gt;  &lt;p&gt;In order to correct this, I would love to hear from you. Do you use MVVM Light? Did you publish an application (WP7, Silverlight, WPF) using the bits? If yes, do you mind answering the following optional questions:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;What is the name and homepage of your project? &lt;/li&gt;    &lt;li&gt;What framework is it? (WP7, Silverlight, WPF?) &lt;/li&gt;    &lt;li&gt;Do you allow me to use this info for promotion (on the MVVM Light Toolkit’s page, or in conferences)? (if you prefer me to keep this info confidential, you have my assurance that I will happily comply). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Feel free to answer in the comments below, or per email to &lt;strong&gt;&lt;a href="mailto:laurent@galasoft.ch"&gt;laurent@galasoft.ch&lt;/a&gt;&lt;/strong&gt;. This is, in advance, very much appreciated!&lt;/p&gt;  &lt;p&gt;Happy coding,    &lt;br /&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/05/20/is-your-application-powered-by-mvvmlight.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/145460.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/05/07/mvvm-light-v3-on-nuget-now-with-wp7-support.aspx"&gt;MVVM Light V3 on NuGet (now with WP7 support)&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Saturday, May 07, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;There was already a version of MVVM Light on &lt;a href="http://nuget.org"&gt;Nuget&lt;/a&gt; before. However the old version did not support Windows Phone 7. This is now corrected. Also the new version now adds a ViewModelLocator to your project and includes it in App.xaml.&lt;/p&gt;  &lt;h2&gt;What is NuGet?&lt;/h2&gt;  &lt;p&gt;NuGet is a mechanism allowing to add packages (assemblies, source code…) to an existing project. All versions of MVVM Light are supported (&lt;strong&gt;WPF3.5, WPF4, Silverlight 3, Silverlight 4, Windows Phone 7&lt;/strong&gt;).&lt;/p&gt;  &lt;p&gt;In order to install NuGet and learn more about this cool package manager, go to &lt;a href="http://nuget.org"&gt;http://nuget.org&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Finding and installing MVVM Light with NuGet&lt;/h2&gt;  &lt;p&gt;To find MVVM Light in NuGet, follow the steps:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Open your project in Visual Studio 2010. &lt;/li&gt;    &lt;li&gt;Right click on the References folder and select “Add Library Package Reference” from the context menu. &lt;/li&gt; &lt;/ul&gt; &lt;a title="Add Library Package Reference" href="http://www.flickr.com/photos/36917929@N06/5696049465"&gt;&lt;img title="" alt="Add Library Package Reference" src="http://farm3.static.flickr.com/2745/5696049465_4c5cbfbebd.jpg" width="452" height="148" /&gt;&lt;/a&gt;   &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Should that menu item be missing, you need to install the NuGet package manager. Go to &lt;a href="http://nuget.org"&gt;http://nuget.org&lt;/a&gt; and follow the indications.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In the “Search Online” field, enter “mvvmlight” and press Enter. &lt;/li&gt;    &lt;li&gt;Select the MVVM Light package and press the Install button. &lt;/li&gt; &lt;/ul&gt; &lt;a title="Snagit Capture for Flickr" href="http://www.flickr.com/photos/36917929@N06/5696059613"&gt;&lt;img src="http://farm6.static.flickr.com/5222/5696059613_e142b9fe43.jpg" width="500" height="281" /&gt;&lt;/a&gt;   &lt;p&gt;After these steps, the following changes have been made to your project:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A “packages” folder was added with the following libraries. Note that this folder is added to the root of the project structure and does not appear in the Solution Explorer.      &lt;ul&gt;       &lt;li&gt;The MVVM Light DLLs: GalaSoft.MvvmLight and GalaSoft.MvvmLight.Extras. &lt;/li&gt;        &lt;li&gt;The referenced System.Windows.Interactivity.dll, needed by the GalaSoft.MvvmLight.Extras assembly. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;A ViewModel folder was added with two additional classes:      &lt;ul&gt;       &lt;li&gt;ViewModelLocator.cs &lt;/li&gt;        &lt;li&gt;MainViewModel.cs &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;The App.xaml file was modified with the addition of the ViewModelLocator as global resource. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Binding the DataContext in XAML&lt;/h3&gt;  &lt;p&gt;With the new file structure, the ViewModelLocator is exposed in App.xaml (global resources) and can be used as the source of the DataContext bindings.&lt;/p&gt;  &lt;p&gt;The MainViewModel that has also been added to the project is exposed in the ViewModelLocator as a property. for more details about this architecture, please refer to &lt;a href="http://channel9.msdn.com/events/MIX/MIX10/EX14"&gt;Understanding the MVVM pattern&lt;/a&gt; and &lt;a href="http://channel9.msdn.com/events/mix/mix11/OPN03"&gt;Deep Dive MVVM&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; In case you do not need the MainViewModel in your project, feel free to remove this class.&lt;/p&gt;  &lt;p&gt;In order to use the MainViewModel as the DataContext of the MainPage or MainWindow, use the following steps:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Open MainPage.xaml or MainWindow.xaml. &lt;/li&gt;    &lt;li&gt;Add the following line to the opening tag of the MainPage/MainWindow: &lt;/li&gt; &lt;/ul&gt;  &lt;pre class="brush: xml;"&gt;DataContext="{Binding Main, Source={StaticResource Locator}}"&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;From now on, the DataContext of the MainPage/MainWindow is set to the instance of MainViewModel exposed by the ViewModelLocator. These steps can be repeated at will with different views/viewmodels pairs.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Binding the DataContext in Blend&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The DataContext can also be databound visually in Expression Blend with the following steps.&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Open your project in Blend. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Build the application. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Open MainPage/MainWindow. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;In the Objects and Timeline panel, select the UserControl. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;In the Properties panel, select the DataContext property (in the Common Properties section). &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Click on the small Advanced options peg right of the property field and select Data Binding from the context menu. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;&lt;a title="Advanced options peg" href="http://www.flickr.com/photos/36917929@N06/5696690247"&gt;&lt;img title="" alt="Advanced options peg" src="http://farm6.static.flickr.com/5069/5696690247_f50d755e3f.jpg" width="295" height="148" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="Data binding menu item" href="http://www.flickr.com/photos/36917929@N06/5697268356"&gt;&lt;img title="" alt="Data binding menu item" src="http://farm3.static.flickr.com/2421/5697268356_b4b6edf31e.jpg" width="207" height="303" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;In the Data Binding editor, select the Data Field tab and the Locator data source. &lt;strong&gt;Note:&lt;/strong&gt; If you don’t see the Locator field, you need to build the project. &lt;/li&gt;
&lt;/ul&gt;
&lt;a title="Selecting the Locator field" href="http://www.flickr.com/photos/36917929@N06/5696700379"&gt;&lt;img title="" alt="Selecting the Locator field" src="http://farm3.static.flickr.com/2650/5696700379_9133c71c08.jpg" width="310" height="161" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;In the Fields area, expand the ViewModelLocator and select the Main property. Then press OK to close the Data Binding editor. &lt;/li&gt;
&lt;/ul&gt;
&lt;a title="Selecting the Main property" href="http://www.flickr.com/photos/36917929@N06/5697281848"&gt;&lt;img title="" alt="Selecting the Main property" src="http://farm3.static.flickr.com/2505/5697281848_db3f8b223d.jpg" width="290" height="88" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;h2&gt;Installing without the ViewModel folder (libraries only)&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Some users prefer to work without a ViewModelLocator, and are only interested in the MVVM Light assemblies. Unfortunately there is not really a way to specify options when using NuGet. So I created a different “barebone” package, named “MvvmLightLibs” which contains only the libraries and nothing else. To install this “barebone” version, follow the steps above, but select “&lt;strong&gt;MvvmLightLibs&lt;/strong&gt;” instead of MvvmLight.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Installing from the command line&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;There is also a way to use NuGet without Visual Studio, from the command line. &lt;a href="http://kintespace.com/rasxlog/?p=2598"&gt;A good description is available on this blog&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Tell me what you think!&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I am very interested to know what you guys think of the experience with NuGet. Please let me know if you like it!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/lbugnion/archive/2011/05/07/mvvm-light-v3-on-nuget-now-with-wp7-support.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/145233.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/04/14/mvvm-light-v4-preview-3-bl16-mix11-edition-mvvmlight.aspx"&gt;MVVM Light V4 preview 3 (BL16, MIX11 edition!!) #mvvmlight&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Thursday, April 14, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;At MIX11, I am releasing a new preview of MVVM Light version 4. This new preview contains one small change and one large change.&lt;/p&gt;  &lt;h2&gt;ObservableObject replaces NotifyPropertyChanged&lt;/h2&gt;  &lt;p&gt;In the previous preview, I introduced a new class named NotifyPropertyChanged. However, I got a few suggestions to rename this class to &lt;strong&gt;ObservableObject&lt;/strong&gt;, which is indeed a better name. In BL16, NotifyPropertyChanged was deleted and replaced by ObservableObject. Nothing else changes, just the name.&lt;/p&gt;  &lt;p&gt;ObservableObject is a very simple implementation of INotifyPropertyChanged suitable for data objects (in the Model, typically) that need to raise the PropertyChanged event, but that are not quite ViewModels. In my MIX11 session, I demo a usage of ObservableObject to build an application using JSON. In WCF, we don’t really need ObservableObject, since all the generated proxies will automatically implement INotifyPropertyChanged.&lt;/p&gt;  &lt;p&gt;We have:&lt;/p&gt; &lt;a title="Inheritance diagram" href="http://www.flickr.com/photos/36917929@N06/5602714681"&gt;&lt;img src="http://farm5.static.flickr.com/4110/5602714681_5263044218.jpg" width="274" height="281" /&gt;&lt;/a&gt;   &lt;h2&gt;Introducing SimpleIoc, a simple IOC container&lt;/h2&gt;  &lt;p&gt;Last year at MIX10, I did a demo using the Unity IOC container. This helper simplifies the creation and the resolution of services and of the ViewModels, and allows for a cleaner syntax in the ViewModelLocator. Since then, I have tried a multitude of variants for the ViewModelLocator class, and I still came back, over and over again, to the same idea: using an IOC container to do the bulk of the work.&lt;/p&gt;  &lt;p&gt;However, I did not want to settle on a given IOC container. There are so many of them, each with specific features, and each with an army of followers &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/Windows-Live-Writer/72a9eb60a78a_E155/wlEmoticon-smile_2.png" /&gt; so instead… I created my own. Well, to be honest I inspired myself strongly from &lt;a href="http://msmvps.com/blogs/vcsjones/archive/2010/11/25/a-really-super-light-and-simple-ioc-container-for-windows-phone-7.aspx"&gt;an existing simple IOC implementation&lt;/a&gt;, and I extended it with features that are super useful when working with ViewModels. Also a source of inspiration, the &lt;a href="http://simpleservicelocator.codeplex.com/"&gt;SimpleServiceLocator available on Codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;A more complete article dedicated to the SimpleIoc class in MVVM Light V4 will follow. Also, my MIX11 session “&lt;a href="http://blog.galasoft.ch/archive/2011/04/13/deep-dive-mvvm-samples-mix11-deepdivemvvm.aspx"&gt;Deep Dive MVVM&lt;/a&gt;” features the SimpleIoc in the samples. The session’s recording is available at &lt;a title="http://channel9.msdn.com/Events/MIX/MIX11/OPN03" href="http://channel9.msdn.com/Events/MIX/MIX11/OPN03"&gt;http://channel9.msdn.com/Events/MIX/MIX11/OPN03&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Cheers,&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/04/14/mvvm-light-v4-preview-3-bl16-mix11-edition-mvvmlight.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/144875.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/04/13/deep-dive-mvvm-samples-mix11-deepdivemvvm.aspx"&gt;Deep Dive MVVM samples #mix11 #deepdivemvvm&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Wednesday, April 13, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Here is the sample code I demoed in my MIX11 session “Deep Dive MVVM”. Please &lt;a href="http://www.galasoft.ch/mvvm/resources/Samples/MIX11-DeepDiveMvvm-Samples.zip"&gt;download the Zip file&lt;/a&gt;, and then unblock it in Windows Explorer by right-clicking it, and then selecting Properties. If you see an “Unblock” button, please click it. You can then extract the content of the Zip file on your hard drive.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.galasoft.ch/mvvm/resources/Samples/MIX11Final_BUGNION_OPN04.pptx"&gt;The slides are also available for download&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;Last year’s session&lt;/h2&gt;  &lt;p&gt;To fully understand this session, an understanding of what MVVM is should be available. I recommend the following links:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;“&lt;a href="http://channel9.msdn.com/Events/MIX/MIX10/EX14"&gt;Understanding the MVVM pattern&lt;/a&gt;” is the session I presented at MIX10. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/03/16/sample-code-for-my-mix10-talk-online.aspx"&gt;Sample code&lt;/a&gt; for “Understanding the MVVM pattern”. &lt;/li&gt;    &lt;li&gt;MVVM Light Toolkit “&lt;a href="http://www.galasoft.ch/mvvm/"&gt;Get Started&lt;/a&gt;” page. &lt;/li&gt;    &lt;li&gt;MVVM Light Toolkit &lt;a href="http://mvvmlight.codeplex.com/"&gt;on Codeplex&lt;/a&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;This year’s session&lt;/h2&gt;  &lt;p&gt;The video of Deep Dive MVVM is already available for download (awesome job, MIX team). &lt;a href="http://channel9.msdn.com/Events/MIX/MIX11/OPN03"&gt;Go to the MIX website&lt;/a&gt; to download it in various formats, or stream it.&lt;/p&gt;  &lt;h2&gt;Prerequisites&lt;/h2&gt;  &lt;p&gt;To execute the samples, you should have &lt;a href="http://www.microsoft.com/visualstudio/en-us/"&gt;Visual Studio 2010&lt;/a&gt; as well as the &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce"&gt;Windows Phone 7 tools&lt;/a&gt; installed.&lt;/p&gt;  &lt;h2&gt;Snippets&lt;/h2&gt;  &lt;p&gt;For your convenience, I added the snippets of code that I was dragging/dropping from the Toolbox during the session. The file “snippets.txt” is included inside the ZIP file.&lt;/p&gt;  &lt;h2&gt;00 JsonDemo – Start&lt;/h2&gt;  &lt;p&gt;This is the start state, which will compile and run fine, but without the added functionality we built in during the session.&lt;/p&gt;  &lt;h2&gt;01 JsonDemo - After wiring up&lt;/h2&gt;  &lt;p&gt;This is the state of the application after the first demo, where all the objects are wired up and connected, and the message is sent from the MasterViewModel to the DetailsViewModel. We also added the IsOlderThanMeIndicatorVisibility property and connected it to the corresponding Rectangle in the DataTemplate (in the MasterView).&lt;/p&gt;  &lt;h2&gt;02 JsonDemo – Behaviors&lt;/h2&gt;  &lt;p&gt;This is the state after adding the “please wait” animation, the states and connecting the MasterViewModel’s IsBusy property to the GoToStateAction and ControlStoryboardAction instances through the DataTrigger. In Windows Phone 7, we added some code behind to replicate the functionality.&lt;/p&gt;  &lt;h2&gt;03 JsonDemo - WP7 DialogService&lt;/h2&gt;  &lt;p&gt;In this section we added a view service, the IDialogService, to the WP7 application and implemented it to display a custom message box. In SL4, the functionality is also available although no custom message box was made, so the fallback MessageBox is used instead.&lt;/p&gt;  &lt;h2&gt;04 NavigationDemo&lt;/h2&gt;  &lt;p&gt;This section introduces another view service, the INavigationService with one implementation in Silverlight 4 and one for Windows Phone 7.&lt;/p&gt;  &lt;h2&gt;05 JsonDemo - Unit test&lt;/h2&gt;  &lt;p&gt;In this last section, we add unit tests (with mock, well precisely with stubs!) to the Silverlight 4 and to the Windows Phone 7 applications. This is the final state of the demo.&lt;/p&gt;  &lt;p&gt;I hope that this session was helpful, and that it will help you build awesome MVVM applications!&lt;/p&gt;  &lt;p&gt;Happy coding,&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/04/13/deep-dive-mvvm-samples-mix11-deepdivemvvm.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/144843.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/03/24/my-mvvm-talkrsquos-material-is-online-uktechdays.aspx"&gt;My MVVM talk&amp;rsquo;s material is online (#uktechdays)&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Thursday, March 24, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Quick announcement: I just had the extreme pleasure to talk at the UK TechDays online conference (organized over LiveMeeting) and had about 100 persons in the session, thanks to all for allowing me to talk to you about MVVM!&lt;/p&gt;  &lt;p&gt;I just &lt;a href="https://cid-40cffde85f1ab56a.office.live.com/browse.aspx/Presentations"&gt;pushed the whole sample code as well as the slides to a SkyDrive folder&lt;/a&gt;, so feel free to download and experiment.&lt;/p&gt;  &lt;p&gt;And don’t forget:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A &lt;a href="http://www.galasoft.ch/mvvmvideo1"&gt;recording of session with similar material but with 30 minutes more time&lt;/a&gt; for additional samples is online for your viewing pleasure. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/events/MIX/MIX11/OPN03"&gt;Deep Dive MVVM at MIX11&lt;/a&gt; will go much deeper and show advanced samples around MVVM, view services, unit testing a VM, and more. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The session was recorded, and I will announce in this space when it is online for your (re-)viewing pleasure.&lt;/p&gt;  &lt;p&gt;Cheers,&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/03/24/my-mvvm-talkrsquos-material-is-online-uktechdays.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/144507.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2011/03/20/building-mvvm-light-from-codeplex.aspx"&gt;Building MVVM Light from Codeplex&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, March 20, 2011&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;I just published an article describing how to get the source code from Codeplex, build it, unit test it, get all the DLLs and install them to replace a previously installed version. It’s not very complicated, but it is good to have this information in one location.&lt;/p&gt;  &lt;p&gt;The article is available at &lt;a href="http://www.galasoft.ch/mvvm/building/"&gt;http://www.galasoft.ch/mvvm/building/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Happy coding!&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; margin-top: 7px; border-left-style: none; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-right-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2011/03/20/building-mvvm-light-from-codeplex.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;img src="http://blog.galasoft.ch/aggbug/144451.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Mon, 08 Aug 2011 08:29:47 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110808082947A</guid></item><item><title>Updated Wiki: Documentation</title><link>http://mvvmlight.codeplex.com/documentation?version=4</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Building the code&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In order to get the latest source code from the Source Code section, build it, unit test it, and get the latest DLLs installed, check this article:&lt;br /&gt;&lt;a href="http://www.galasoft.ch/mvvm/building/" class="externalLink"&gt;http://www.galasoft.ch/mvvm/building/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installing the binaries with NuGet&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You can add MVVM Light to an existing Windows Presentation Foundation (3.5 or 4), Silverlight (3 or 4) or to a Windows Phone (7 or 7.1 beta) project with the help of the NuGet package manager. For more information, visit &lt;a href="http://blog.galasoft.ch/archive/2011/05/07/mvvm-light-v3-on-nuget-now-with-wp7-support.aspx" class="externalLink"&gt;http://blog.galasoft.ch/archive/2011/05/07/mvvm-light-v3-on-nuget-now-with-wp7-support.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installing the full toolkit (binaries, templates, snippets)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Right now the installation process is still manual as described at &lt;a href="http://www.galasoft.ch/mvvm/installing/manually/" class="externalLink"&gt;http://www.galasoft.ch/mvvm/installing/manually/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. This will change soon with an automated installer.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Creating your first application&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;To create an application in Visual Studio: &lt;a href="http://www.galasoft.ch/mvvm/creating/" class="externalLink"&gt;http://www.galasoft.ch/mvvm/creating/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;To create an application in Blend: &lt;a href="http://www.galasoft.ch/mvvm/creatingblend/" class="externalLink"&gt;http://www.galasoft.ch/mvvm/creatingblend/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Understanding MVVM&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;To start with MVVM and understand the basics, see my MIX10 session, available in video at &lt;a href="http://live.visitmix.com/Archive#VideoList" class="externalLink"&gt;http://live.visitmix.com/Archive#VideoList&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (scroll down to EX14). A slightly longer version (including a Windows Phone 7 demo) is available at &lt;a href="http://channel9.msdn.com/posts/kreekman/TechDays-2010-Understanding-the-Model-View-ViewModel-pattern/" class="externalLink"&gt;http://channel9.msdn.com/posts/kreekman/TechDays-2010-Understanding-the-Model-View-ViewModel-pattern/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A Deep Dive session is going to take place at MIX11 (April 2011), stay tuned for more information.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Getting started with MVVM Light Toolkit&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A good &amp;quot;primer&amp;quot; series by Jesse Liberty: &lt;a href="http://jesseliberty.com/2011/01/04/wpfs-mvvm-light-toolkit-soup-to-nuts-part-i/" class="externalLink"&gt;http://jesseliberty.com/2011/01/04/wpfs-mvvm-light-toolkit-soup-to-nuts-part-i/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Another nice series by Chris Koenig, using MVVM Light: &lt;a href="http://chriskoenig.net/category/development/mvvm/" class="externalLink"&gt;http://chriskoenig.net/category/development/mvvm/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More articles&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There are a lot of articles written about the MVVM Light Toolkit: Info about new versions, documentation about specific components of MVVM Light, etc.&lt;br /&gt;For more information, please check &lt;a href="http://www.galasoft.ch/mvvm/#tutorials" class="externalLink"&gt;http://www.galasoft.ch/mvvm/#tutorials&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Sat, 25 Jun 2011 20:29:05 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20110625082905P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://mvvmlight.codeplex.com/documentation?version=3</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Building the code&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In order to get the latest source code from the Source Code section, build it, unit test it, and get the latest DLLs installed, check this article:&lt;br /&gt;&lt;a href="http://www.galasoft.ch/mvvm/building/" class="externalLink"&gt;http://www.galasoft.ch/mvvm/building/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installing the toolkit&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Right now the installation process is still manual as described at &lt;a href="http://www.galasoft.ch/mvvm/installing/manually/" class="externalLink"&gt;http://www.galasoft.ch/mvvm/installing/manually/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. This will change soon with an automated installer.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Creating your first application&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;To create an application in Visual Studio: &lt;a href="http://www.galasoft.ch/mvvm/creating/" class="externalLink"&gt;http://www.galasoft.ch/mvvm/creating/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;To create an application in Blend: &lt;a href="http://www.galasoft.ch/mvvm/creatingblend/" class="externalLink"&gt;http://www.galasoft.ch/mvvm/creatingblend/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Understanding MVVM&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;To start with MVVM and understand the basics, see my MIX10 session, available in video at &lt;a href="http://live.visitmix.com/Archive#VideoList" class="externalLink"&gt;http://live.visitmix.com/Archive#VideoList&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (scroll down to EX14). A slightly longer version (including a Windows Phone 7 demo) is available at &lt;a href="http://channel9.msdn.com/posts/kreekman/TechDays-2010-Understanding-the-Model-View-ViewModel-pattern/" class="externalLink"&gt;http://channel9.msdn.com/posts/kreekman/TechDays-2010-Understanding-the-Model-View-ViewModel-pattern/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A Deep Dive session is going to take place at MIX11 (April 2011), stay tuned for more information.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Getting started with MVVM Light Toolkit&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A good &amp;quot;primer&amp;quot; series by Jesse Liberty: &lt;a href="http://jesseliberty.com/2011/01/04/wpfs-mvvm-light-toolkit-soup-to-nuts-part-i/" class="externalLink"&gt;http://jesseliberty.com/2011/01/04/wpfs-mvvm-light-toolkit-soup-to-nuts-part-i/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Another nice series by Chris Koenig, using MVVM Light: &lt;a href="http://chriskoenig.net/category/development/mvvm/" class="externalLink"&gt;http://chriskoenig.net/category/development/mvvm/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More articles&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There are a lot of articles written about the MVVM Light Toolkit: Info about new versions, documentation about specific components of MVVM Light, etc.&lt;br /&gt;For more information, please check &lt;a href="http://www.galasoft.ch/mvvm/#tutorials" class="externalLink"&gt;http://www.galasoft.ch/mvvm/#tutorials&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Sun, 20 Mar 2011 16:34:23 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20110320043423P</guid></item><item><title>Updated Wiki: Home</title><link>http://mvvmlight.codeplex.com/wikipage?version=11</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Project Description&lt;/h1&gt;The MVVM Light Toolkit is a set of components helping people to get started in the Model - View - ViewModel pattern in Silverlight and WPF. It is a light and pragmatic framework that contains only the essential components needed.&lt;br /&gt;
&lt;h1&gt;Get started&lt;/h1&gt;More information about the MVVM Light Toolkit can be found on &lt;a href="http://www.galasoft.ch/mvvm/getstarted" class="externalLink"&gt;http://www.galasoft.ch/mvvm/getstarted&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Get more info about MVVM&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Understanding the MVVM Pattern (MIX10 session)&lt;/li&gt;&lt;/ul&gt;
&lt;a href="http://live.visitmix.com/MIX10/Sessions/EX14" class="externalLink"&gt;http://live.visitmix.com/MIX10/Sessions/EX14&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Deep Dive MVVM (MIX11 session, please vote for it!)&lt;/li&gt;&lt;/ul&gt;
&lt;a href="http://mvvmlight.codeplex.com/wikipage?title=http%3a%2f%2flive.visitmix.com%2fOpenCall%2fVote%2fSession%2f21&amp;referringTitle=Home"&gt;http&amp;#58;&amp;#47;&amp;#47;live.visitmix.com&amp;#47;OpenCall&amp;#47;Vote&amp;#47;Session&amp;#47;21&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;Donate&lt;/h1&gt;If you are so enclined, you can &lt;a href="http://www.galasoft.ch/mvvm/donate" class="externalLink"&gt;donate to MVVM Light Toolkit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;Or, if you prefer, you can pay me a beer next time we&amp;#39;re in the same vicinity. Really, it is OK too :)&lt;br /&gt;
&lt;h1&gt;Latest news:&lt;/h1&gt;&lt;div class="rss"&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/11/13/back-from-teched-europe-2010-berlin-tee10.aspx"&gt;Back from TechEd Europe 2010 (Berlin) #tee10&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Saturday, November 13, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;I spent this week in Berlin in company of about 5000+ other geeks at Microsoft’s TechEd Europe. I had experienced the conference for a very short time last year as I spent just 2 days helping on the Silverlight booth at the Technical Learning Center. This year however I was invited to give two talks and participate in a panel of experts.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Taking Advantage of Microsoft Expression Blend to Build Silverlight 4 Applications:&lt;/strong&gt;&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;This session went pretty well even though it was at 6PM on Tuesday. The room was not 100% full but with about 120 people it was very good for that late hour. Of course I wish I could touch *all* developers and encourage them to try Expression Blend, but I guess I need to be patient &lt;img class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/Windows-Live-Writer/16d309471ae5_10674/wlEmoticon-winkingsmile_2.png" /&gt; The talk was to show “where Blend really shines”, i.e. what you can do with Blend that you cannot do with Visual Studio (or much less efficiently). I had samples showing simple things (tweaking/copying gradients for instance) but also more complex ones (animations, visual states, resource management, etc). The feedback has been great, and I hope that everyone learned something.&lt;/p&gt;
&lt;ul&gt;&lt;br /&gt;    &lt;li&gt;The &lt;a href="http://www.slideshare.net/lbugnion/taking-advantage-of-microsoft-expression-blend-to-build-silverlight-4-applications"&gt;slides for this session are here&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;The &lt;a href="http://www.galasoft.ch/blogs-all/resources/2010111301/TakingAdvantageOfBlendSample.zip"&gt;small app built in Blend is here&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;The session video can be seen below, and &lt;a href="http://www.msteched.com/2010/Europe/WEB302"&gt;can be downloaded too&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;strong&gt;Silverlight Experts Roundtable:&lt;/strong&gt;&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;This was a fun session. Being there with Pete Brown and Gill Cleeren (and under the moderation of Katrien De Graeve) was really neat. We all found the questions interesting and practice oriented.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I am not 100% sure if the session was recorded or not (I believe it wasn’t). Watch this space and I will post a link if it becomes available.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Your Questions on MVVM (Model-View-ViewModel) Answered:&lt;/strong&gt;&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;This was an interactive session, where I was asked to present a short intro to MVVM, and then to turn to the audience for questions. Usually, the European audiences are very shy with questions (not even mentioning that a session at 9AM on the last day of a conference… you know…) but I have to say I was super happy with the way it went. I had 90 people in the room, and the audience was very active! They started asking questions before I was even done with the theory (of course the prospect of getting one copy of Silverlight 4 Unleashed for the first question asked certainly made them very eager &lt;img class="wlEmoticon wlEmoticon-smile" alt="Smile" style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/Windows-Live-Writer/16d309471ae5_10674/wlEmoticon-smile_2.png" /&gt;). I was able to show most of the demo code I had prepared, as I had kind of anticipated the questions that would come. I was almost shocked when I checked the clock for the very first time during the session and saw I only had 7 minutes left!! &lt;br /&gt;&lt;br /&gt;&lt;em&gt;Side note: One person commented that I sounded a bit like a MVVM evangelist instead of underlining the bad sides of MVVM. Like every pattern, MVVM has pros and cons. I was however guided by the audience in that particular session, and no-one asked about negative aspects. For this particular person, I encourage you to watch my MIX10 session where this question is answered.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;&lt;br /&gt;    &lt;li&gt;The &lt;a href="http://www.slideshare.net/lbugnion/your-questions-on-mvvm-answered"&gt;slides for this session are here&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;The &lt;a href="http://www.galasoft.ch/blogs-all/resources/2010111301/Mvvm/"&gt;samples can be downloaded here&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;I am not 100% sure if the session was recorded or not (I believe it wasn’t). Watch this space and I will post a link if it becomes available.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt; &lt;/h3&gt;
&lt;h3&gt;Note about the CustomersManager sample&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;To run this sample, you need to follow the steps:&lt;/p&gt;
&lt;ol&gt;&lt;br /&gt;    &lt;li&gt;Open the solution named Customers. This is the WCF service.&lt;/li&gt;
    &lt;li&gt;In the Solution Explorer, right click the SVC file and select “View in Browser” from the context menu.&lt;/li&gt;
    &lt;li&gt;Then only you can open and start the CustomersManager solution.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Video: Taking advantage of Blend 4&lt;/h2&gt;&lt;br /&gt;&lt;object class="player" width="645" height="363" data="data:application/x-silverlight-2," type="application/x-silverlight-2"&gt;&lt;br /&gt;&lt;param name="source" value="http://www.msteched.com/ClientBin/players/VideoPlayer2009_03_27.xap" /&gt;&lt;br /&gt;&lt;param name="initParams" value="m=http://ecn.channel9.msdn.com/o9/te/Europe/2010/wmv/web302.wmv,thumbnail=http://www.msteched.com/Skins/TechEdOnline/Styles/images/DefaultPlayerBackground.png,autohide=true,showembed=true" /&gt;&lt;br /&gt;&lt;param name="background" value="#00000000" /&gt;&lt;br /&gt;&lt;param name="minRuntimeVersion" value="3.0.50106.0" /&gt;&lt;br /&gt;&lt;param name="windowless" value="true" /&gt;&lt;br /&gt;&lt;param name="enableGPUAcceleration" value="true" /&gt;&lt;br /&gt;&lt;param name="autoUpgrade" value="true" /&gt;&lt;a style="text-decoration: none" href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;amp;v=3.0.50106.0"&gt;&lt;img alt="Get Microsoft Silverlight" style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" src="http://www.msteched.com/Skins/TechEdOnline/Styles/images/NoSilverlight.jpg" /&gt; &lt;/a&gt;&lt;/object&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;&lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2010/11/13/back-from-teched-europe-2010-berlin-tee10.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no" style="border-bottom-style: none; border-right-style: none; margin-top: 7px; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-left-style: none; overflow: hidden"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=142702"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=142702" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/142702.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/10/26/microsoft-shape.aspx"&gt;Microsoft Shape&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Tuesday, October 26, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Today I have been invited by Microsoft Switzerland to present three of our awesome Windows Phone 7 applications on stage at their yearly Shape conference. It was a great moment, and I felt super proud to show the IMDb app, the Twitter app and the SBB Mobile app. The response was excellent, I didn’t have one single demo effect, was able to stream a movie preview live from the IMDb app, to show most features of the Twitter app, to load a timetable and purchase a ticket from the SBB app, and all this in slightly more than 10 minutes! How cool is that??&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The two former apps (IMDb and Twitter) are already available from the marketplace:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="Twitter for Windows Phone 7" href="http://www.flickr.com/photos/36917929@N06/5118674126"&gt;&lt;img width="338" height="251" alt="" src="http://farm2.static.flickr.com/1155/5118674126_b6e0d4b1b8.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="IMDb for Windows Phone 7" href="http://www.flickr.com/photos/36917929@N06/5118074077"&gt;&lt;img width="344" height="252" alt="" src="http://farm2.static.flickr.com/1079/5118074077_619d4a4397.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The SBB Mobile app is not available yet, but it is in the process of submission and it should be ready very soon for download. All the three apps are free!&lt;/p&gt;
&lt;h2&gt;WCF RIA Services demo&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;I also talked about WCF RIA Services, and here are the promised code samples:&lt;/p&gt;
&lt;ul&gt;&lt;br /&gt;    &lt;li&gt;The &lt;a href="http://www.galasoft.ch/blogs-all/resources/20101026/MyNorthwind.zip"&gt;full WCF RIA Services sample&lt;/a&gt;, with Customizing columns, Executing CRUD, Displaying messages, Validating, Filtering, Enhancing the UX, Paging, Showing errors, Reconciling data, Printing, Copy/paste, Running out of the browser...&lt;/li&gt;
    &lt;li&gt;The &lt;a href="http://www.galasoft.ch/blogs-all/resources/20101026/MyNorthwind.OOB.zip"&gt;same sample modified to run out-of-the-browser&lt;/a&gt; (OOB).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once downloaded, right click on the zip file, select Properties, and if you see an Unblock button on the General tab, click it!. Then only extract the content.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.slideshare.net/lbugnion/silverlight-for-line-of-business"&gt;The slides are here&lt;/a&gt;. The session was recorded and will be posted on Microsoft servers soon (stay tuned for more info!!)&lt;/p&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;&lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2010/10/26/microsoft-shape.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no" style="border-bottom-style: none; border-right-style: none; margin-top: 7px; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-left-style: none; overflow: hidden"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=142457"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=142457" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/142457.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/10/26/adding-a-viewmodellocator-and-merged-dictionaries-to-app.xaml.aspx"&gt;Adding a ViewModelLocator and Merged Dictionaries to App.xaml&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Tuesday, October 26, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;I guess this is one of these places where using Blend is an advantage… since I do these operations mostly with the help of the tool, the XAML is generated and I don’t need to think about it too much.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There is a trick when you add objects (for example Styles or a ViewModelLocator) to App.xaml when it already has merged resource dictionaries. The syntax is a bit convoluted, so here we go:&lt;/p&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&lt;br /&gt;&amp;lt;Application.Resources&amp;gt;&lt;br /&gt;    &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;        &amp;lt;ResourceDictionary.MergedDictionaries&amp;gt;&lt;br /&gt;            &amp;lt;ResourceDictionary Source="Skins/Brushes.xaml"/&amp;gt;&lt;br /&gt;        &amp;lt;/ResourceDictionary.MergedDictionaries&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;vm:ViewModelLocator x:Key="Locator"&lt;br /&gt;                                d:IsDataSource="True" /&amp;gt;&lt;br /&gt;    &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;&amp;lt;/Application.Resources&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;font face="Verdana" style="background-color: #ffffff"&gt;So yeah, the trick is to put the ViewModelLocator (or any other object for that matter) &lt;strong&gt;within&lt;/strong&gt; the ResourceDictionary tag… &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;HTH,&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Laurent&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;&lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2010/10/26/adding-a-viewmodellocator-and-merged-dictionaries-to-app.xaml.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no" style="border-bottom-style: none; border-right-style: none; margin-top: 7px; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-left-style: none; overflow: hidden"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=142456"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=142456" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/142456.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/07/22/mvvm-light-hotfix-for-windows-phone-7-developer-tools-beta.aspx"&gt;MVVM Light Hotfix for Windows Phone 7 developer tools beta&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Thursday, July 22, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/WindowsLiveWriter/MVVMLightHotfixforWindowsPhone7developer_8F5D/4084199726_d1cc8527aa_o%5B1%5D_2.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="4084199726_d1cc8527aa_o[1]" border="0" alt="4084199726_d1cc8527aa_o[1]" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/WindowsLiveWriter/MVVMLightHotfixforWindowsPhone7developer_8F5D/4084199726_d1cc8527aa_o%5B1%5D_thumb.png" width="244" height="210" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is a hotfix to correct the issues with the MVVM Light templates for Windows Phone 7.&lt;/p&gt;  &lt;h2&gt;Who is it for?&lt;/h2&gt;  &lt;p&gt;Use this hotfix if (and only if):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You have &lt;a href="http://www.galasoft.ch/mvvm/installing/manually/" target="_blank"&gt;MVVM Light Toolkit V3 SP1&lt;/a&gt; installed. &lt;/li&gt;    &lt;li&gt;You are using the new developer tools beta for Windows Phone 7. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Why a hotfix?&lt;/h2&gt;  &lt;p&gt;The hotifx is needed because of changes in the Microsoft Windows Phone 7 assemblies (regrouping of classes in different namespaces and/or different assemblies) as well as some other changes (manifest structure, etc). The MVVM Light assemblies do not need any update however, and continue to work as expected with the new release.&lt;/p&gt;  &lt;h2&gt;How to install?&lt;/h2&gt;  &lt;p&gt;The installation process is described at &lt;a href="http://www.galasoft.ch/mvvm/installing/hotfix20100719/"&gt;http://www.galasoft.ch/mvvm/installing/hotfix20100719/&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Note about Blend:&lt;/h2&gt;  &lt;p&gt;At the moment, Blend for Windows Phone beta seems unable to load custom template. I have a pending question with Microsoft to try and clear this up. Right now, the workaround is to create the MVVM Light application for Windows Phone 7 in Visual Studio, and then to open it in Blend for Windows Phone beta.&lt;/p&gt;  &lt;p&gt;Happy coding!&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt;       &lt;br /&gt;&lt;iframe style="border-bottom-style: none; border-right-style: none; margin-top: 7px; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-left-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2010/07/22/mvvm-light-hotfix-for-windows-phone-7-developer-tools-beta.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="allowtransparency" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=141032"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=141032" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/141032.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/05/19/handling-datagrid.selecteditems-in-an-mvvm-friendly-manner.aspx"&gt;Handling DataGrid.SelectedItems in an MVVM-friendly manner&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Wednesday, May 19, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;An interesting question from one of the MVVM Light users today:&lt;/p&gt; &lt;p&gt;&lt;em&gt;Is there an MVVM-friendly way to get a DataGrid’s SelectedItems into the ViewModel?&lt;/em&gt;&lt;/p&gt; &lt;p&gt;The issue there is as old as the DataGrid (that’s not very old but still): SelectedItem (singular) is a DependencyProperty and can be databound to a property in the ViewModel. SelectedItems (plural) is not a DependencyProperty.&lt;/p&gt; &lt;p&gt;Thankfully the answer is very simple: Use EventToCommand to call a Command in the ViewModel, and pass the SelectedItems collection as parameter. For example, if the command in the ViewModel is declared as follows:&lt;/p&gt;&lt;pre class="csharp" name="code"&gt;public RelayCommand&amp;lt;IList&amp;gt; SelectionChangedCommand&lt;br /&gt;{&lt;br /&gt;    get;&lt;br /&gt;    private set;&lt;br /&gt;}&lt;/pre&gt;&lt;font face="Verdana"&gt;and (in the MainViewModel constructor):&lt;/font&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre class="csharp" name="code"&gt;SelectionChangedCommand = new RelayCommand&amp;lt;IList&amp;gt;(&lt;br /&gt;    items =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        if (items == null)&lt;br /&gt;        {&lt;br /&gt;            NumberOfItemsSelected = 0;&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        NumberOfItemsSelected = items.Count;&lt;br /&gt;    });&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Then the XAML markup becomes:&lt;/p&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;sdk:DataGrid x:Name="MyDataGrid"&lt;br /&gt;                ItemsSource="{Binding Items}"&amp;gt;&lt;br /&gt;    &amp;lt;i:Interaction.Triggers&amp;gt;&lt;br /&gt;        &amp;lt;i:EventTrigger EventName="SelectionChanged"&amp;gt;&lt;br /&gt;            &amp;lt;cmd:EventToCommand&lt;br /&gt;                Command="{Binding SelectionChangedCommand}"&lt;br /&gt;                CommandParameter="{Binding SelectedItems,&lt;br /&gt;                    ElementName=MyDataGrid}" /&amp;gt;&lt;br /&gt;        &amp;lt;/i:EventTrigger&amp;gt;&lt;br /&gt;    &amp;lt;/i:Interaction.Triggers&amp;gt;&lt;br /&gt;&amp;lt;/sdk:DataGrid&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;I slapped &lt;a href="http://www.galasoft.ch/mvvm/resources/Samples/MVVMFriendlySelectedItems.zip"&gt;a quick sample and published it here&lt;/a&gt; (VS2010, SL4 but the concept works in SL3 and WPF too).&lt;/p&gt;&lt;a title="Snagit Capture for Flickr" href="http://www.flickr.com/photos/36917929@N06/4622423670"&gt;&lt;img src="http://farm4.static.flickr.com/3352/4622423670_52531ccc80.jpg" width="294" height="299" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;Cheers!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Laurent&lt;/p&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;&lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;iframe style="border-bottom-style: none; border-right-style: none; margin-top: 7px; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-left-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2010/05/19/handling-datagrid.selecteditems-in-an-mvvm-friendly-manner.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139950"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139950" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139950.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/04/18/crowdsourcing-mvvm-light-toolkit-support.aspx"&gt;Crowdsourcing MVVM Light Toolkit support&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, April 18, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;a title="MVVM Light loves StackOverflow" href="http://www.flickr.com/photos/36917929@N06/4532075259"&gt;&lt;img src="http://farm3.static.flickr.com/2764/4532075259_65f2ee2925.jpg" width="488" height="110" /&gt;&lt;/a&gt;   &lt;p&gt;Considering the number of emails that are sent to me asking for support for MVVM Light toolkit, I find myself unable to answer all of them in sufficient time to make me feel good.&lt;/p&gt;  &lt;p&gt;In consequence, I started to send the following message in response to support queries, either per email or on the &lt;a href="http://mvvmlight.codeplex.com/Thread/List.aspx"&gt;MVVM Light Codeplex discussion page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Hi,&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;I am doing my best to answer all the questions as fast as possible. I receive a lot of them, however, and cannot reply to everyone fast enough to make me happy.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Due to this, I would like to encourage you to post your question on StackOverflow, and tag it with the tag mvvm-light.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;StackOverflow is an awesome site where tons of developers help others with their technical question.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://stackoverflow.com/questions/tagged/mvvm-light"&gt;&lt;em&gt;http://stackoverflow.com/questions/tagged/mvvm-light&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;I will monitor this tag on the StackOverflow website and do my best to answer questions. The advantage of StackOverflow over the Codeplex discussion is the sheer number of qualified developers able to help you with your questions, the visibility of the question itself, and the whole StackOverflow infrastructure (reputation, up- or down-vote, comments, etc)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Thanks!&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Laurent&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;Bug reports&lt;/h2&gt;  &lt;p&gt;Regarding bug reports, feel free to continue to &lt;a href="http://mvvmlight.codeplex.com/Thread/List.aspx"&gt;send them to the Codeplex site&lt;/a&gt; (preferred), or to me directly.&lt;/p&gt;  &lt;p&gt;I hope that this will help all support queries to be answered faster, and with the great quality for which the StackOverflow users are known!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139345"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139345" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139345.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/04/18/small-change-in-mvvm-light-toolkit-templates-for-blend-4.aspx"&gt;Small change in MVVM Light Toolkit templates for Blend 4 RC&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, April 18, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Ah, the joy of new releases… You will find that the MVVM Light Toolkit works fine with Visual Studio 2010 RTM and Blend 4 RC except for a few adjustments:&lt;/p&gt; &lt;h2&gt;Blend templates&lt;/h2&gt; &lt;p&gt;The path to the Expression Blend 4 project templates changed. If you start Expression Blend 4 RC now, you will likely not see the MVVM Light templates in the New Project dialog. &lt;/p&gt; &lt;p&gt; &lt;a title="20100403003" href="http://www.flickr.com/photos/36917929@N06/4487801224/"&gt;&lt;img border="0" alt="20100403003" src="http://farm5.static.flickr.com/4024/4487801224_969620cafd.jpg" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;New Project dialog with MVVM Light&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;To restore the templates, follow the steps:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Open Windows Explorer  &lt;/li&gt;&lt;li&gt;Navigate to C:\Users\[username]\Documents\Expression (or simply type My Documents in Windows Explorer and then open the Expression folder). &lt;/li&gt;&lt;li&gt;Change the name of the “Blend 4 beta” folder into “Blend 4”.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;That’s it, you should now see the templates in the New Project dialog in Blend 4.&lt;/p&gt; &lt;p&gt; Note that since the new name is “Blend 4”, I hope that I won’t need to do the same exercise when Blend 4 RTM is released!&lt;/p&gt; &lt;h2&gt;Windows Phone 7 templates&lt;/h2&gt; &lt;h2&gt;&lt;/h2&gt; &lt;p&gt;Since the Windows Phone 7 tools are not ready yet for Visual Studio 2010 RTM and Blend 4 RC, the templates in the Silverlight for Windows Phone folders will not work. You will get an error if you try to create a new such project in the newly released environment.&lt;/p&gt; &lt;p&gt;I hesitated to remove these templates from the current packages, but honestly that is a lot of trouble for a very short time before the tools for Windows Phone 7 are released (note: I don’t have any information as to when these tools will be released). In the mean time, just don’t create a WinPhone7 application.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Reminder: If you want to write code for Windows Phone 7, you need to keep the Visual Studio 2010 RC as well as Expression Blend 4 beta.&lt;/strong&gt;&lt;/p&gt; &lt;h2&gt;&lt;/h2&gt; &lt;p&gt;&lt;/p&gt; &lt;h2&gt;Updated package&lt;/h2&gt; &lt;p&gt;I uploaded an update to the Blend 4 templates. It is available like before on the “&lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;Install manually&lt;/a&gt;” page and on &lt;a href="http://mvvmlight.codeplex.com/releases/view/43831"&gt;the Codeplex page&lt;/a&gt;.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div style="margin-bottom: -1em"&gt; &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt; &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139339"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139339" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139339.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/04/09/using-commands-with-applicationbarmenuitem-and-applicationbarbutton-in-windows-phone-7.aspx"&gt;Using commands with ApplicationBarMenuItem and ApplicationBarButton in Windows Phone 7&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Friday, April 09, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Unfortunately, in the current version of the Windows Phone 7 Silverlight framework, it is not possible to attach any command on the ApplicationBarMenuItem and ApplicationBarButton controls. These two controls appear in the Application Bar, for example with the following markup:&lt;/p&gt;  &lt;pre class="xml" name="code"&gt;&amp;lt;phoneNavigation:PhoneApplicationPage.ApplicationBar&amp;gt;&lt;br /&gt;    &amp;lt;shell:ApplicationBar x:Name="MainPageApplicationBar"&amp;gt;&lt;br /&gt;        &amp;lt;shell:ApplicationBar.MenuItems&amp;gt;&lt;br /&gt;            &amp;lt;shell:ApplicationBarMenuItem &lt;br /&gt;                Text="Add City" /&amp;gt;&lt;br /&gt;            &amp;lt;shell:ApplicationBarMenuItem &lt;br /&gt;                Text="Add Country" /&amp;gt;&lt;br /&gt;        &amp;lt;/shell:ApplicationBar.MenuItems&amp;gt;&lt;br /&gt;        &amp;lt;shell:ApplicationBar.Buttons&amp;gt;&lt;br /&gt;            &amp;lt;shell:ApplicationBarIconButton &lt;br /&gt;                IconUri="/Resources/appbar.feature.video.rest.png" /&amp;gt;&lt;br /&gt;            &amp;lt;shell:ApplicationBarIconButton &lt;br /&gt;                IconUri="/Resources/appbar.feature.settings.rest.png" /&amp;gt;&lt;br /&gt;            &amp;lt;shell:ApplicationBarIconButton &lt;br /&gt;                IconUri="/Resources/appbar.refresh.rest.png" /&amp;gt;&lt;br /&gt;        &amp;lt;/shell:ApplicationBar.Buttons&amp;gt;&lt;br /&gt;    &amp;lt;/shell:ApplicationBar&amp;gt;&lt;br /&gt;&amp;lt;/phoneNavigation:PhoneApplicationPage.ApplicationBar&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This code will create the following UI:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="Application bar, collapsed" href="http://www.flickr.com/photos/36917929@N06/4505875943"&gt;&lt;img src="http://farm5.static.flickr.com/4054/4505875943_63225ac53f.jpg" width="431" height="247" /&gt;&lt;/a&gt;&lt;strong&gt;&lt;em&gt; &lt;br /&gt;      &lt;br /&gt;Application bar, collapsed&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="Application bar, expanded" href="http://www.flickr.com/photos/36917929@N06/4506512944"&gt;&lt;img src="http://farm5.static.flickr.com/4055/4506512944_5dcc2f5638.jpg" width="411" height="328" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;strong&gt;&lt;em&gt;Application bar, expanded&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;ApplicationBarItems are not, however, controls. A quick look in MSDN shows the following hierarchy for ApplicationBarMenuItem, for example:&lt;/p&gt;&lt;br /&gt;&lt;a title="ApplicationBarMenuItem class hierarchy" href="http://www.flickr.com/photos/36917929@N06/4505879571"&gt;&lt;img src="http://farm5.static.flickr.com/4031/4505879571_aff9307c12.jpg" width="344" height="61" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;p&gt;Unfortunately, this prevents all the mechanisms that are normally used to attach a Command (for example &lt;a href="http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx"&gt;a RelayCommand&lt;/a&gt;) to a control. For example, the attached behavior present in the class ButtonBaseExtension (from the Silverlight 3 version of the MVVM Light toolkit) can only be attached to a DependencyObject. Similarly, Blend behaviors (such as EventToCommand from the toolkit’s Extras library) needs a FrameworkElement to work.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Using code behind&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The alternative is to use code behind. &lt;a href="http://live.visitmix.com/MIX10/Sessions/EX14"&gt;As I said in my MIX10 talk&lt;/a&gt;, the MVVM police will &lt;strong&gt;not&lt;/strong&gt; take your family away if you use code behind (this quote was actually suggested to me by &lt;a href="http://twitter.com/gblock"&gt;Glenn Block&lt;/a&gt;); the code behind is there for a reason. In our case, invoking a command in the ViewModel requires the following code:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;In MainPage.xaml&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;shell:ApplicationBarMenuItem Text="My Menu 1"&lt;br /&gt;    Click="ApplicationBarMenuItemClick"/&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;In MainPage.xaml.cs&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;private void ApplicationBarMenuItemClick(&lt;br /&gt;    object sender, &lt;br /&gt;    System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;    var vm = DataContext as MainViewModel;&lt;br /&gt;    if (vm != null)&lt;br /&gt;    {&lt;br /&gt;        vm.MyCommand.Execute(null);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Resorting to code behind to bridge the gap between the View and the ViewModel is less elegant than using attached behaviors, either through an attached property or through a Blend behavior. It does, however, work fine. I don’t have any information if future changes in the Windows Phone 7 Application Bar API will make this easier. In the mean time, I would recommend using code behind instead.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139171"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139171" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139171.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Tue, 25 Jan 2011 06:48:46 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110125064846A</guid></item><item><title>Updated Wiki: Home</title><link>http://mvvmlight.codeplex.com/wikipage?version=10</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Project Description&lt;/h1&gt;The MVVM Light Toolkit is a set of components helping people to get started in the Model - View - ViewModel pattern in Silverlight and WPF. It is a light and pragmatic framework that contains only the essential components needed.&lt;br /&gt;
&lt;h1&gt;Get started&lt;/h1&gt;More information about the MVVM Light Toolkit can be found on &lt;a href="http://www.galasoft.ch/mvvm/getstarted" class="externalLink"&gt;http://www.galasoft.ch/mvvm/getstarted&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Donate&lt;/h1&gt;
If you are so enclined, you can &lt;a href="http://www.galasoft.ch/mvvm/donate" class="externalLink"&gt;donate to MVVM Light Toolkit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;Or, if you prefer, you can pay me a beer next time we&amp;#39;re in the same vicinity. Really, it is OK too :)&lt;br /&gt;
&lt;h1&gt;Latest news:&lt;/h1&gt;&lt;div class="rss"&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/05/19/handling-datagrid.selecteditems-in-an-mvvm-friendly-manner.aspx"&gt;Handling DataGrid.SelectedItems in an MVVM-friendly manner&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Wednesday, May 19, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;An interesting question from one of the MVVM Light users today:&lt;/p&gt; &lt;p&gt;&lt;em&gt;Is there an MVVM-friendly way to get a DataGrid’s SelectedItems into the ViewModel?&lt;/em&gt;&lt;/p&gt; &lt;p&gt;The issue there is as old as the DataGrid (that’s not very old but still): SelectedItem (singular) is a DependencyProperty and can be databound to a property in the ViewModel. SelectedItems (plural) is not a DependencyProperty.&lt;/p&gt; &lt;p&gt;Thankfully the answer is very simple: Use EventToCommand to call a Command in the ViewModel, and pass the SelectedItems collection as parameter. For example, if the command in the ViewModel is declared as follows:&lt;/p&gt;&lt;pre class="csharp" name="code"&gt;public RelayCommand&amp;lt;IList&amp;gt; SelectionChangedCommand&lt;br /&gt;{&lt;br /&gt;    get;&lt;br /&gt;    private set;&lt;br /&gt;}&lt;/pre&gt;&lt;font face="Verdana"&gt;and (in the MainViewModel constructor):&lt;/font&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre class="csharp" name="code"&gt;SelectionChangedCommand = new RelayCommand&amp;lt;IList&amp;gt;(&lt;br /&gt;    items =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        if (items == null)&lt;br /&gt;        {&lt;br /&gt;            NumberOfItemsSelected = 0;&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        NumberOfItemsSelected = items.Count;&lt;br /&gt;    });&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Then the XAML markup becomes:&lt;/p&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;sdk:DataGrid x:Name="MyDataGrid"&lt;br /&gt;                ItemsSource="{Binding Items}"&amp;gt;&lt;br /&gt;    &amp;lt;i:Interaction.Triggers&amp;gt;&lt;br /&gt;        &amp;lt;i:EventTrigger EventName="SelectionChanged"&amp;gt;&lt;br /&gt;            &amp;lt;cmd:EventToCommand&lt;br /&gt;                Command="{Binding SelectionChangedCommand}"&lt;br /&gt;                CommandParameter="{Binding SelectedItems,&lt;br /&gt;                    ElementName=MyDataGrid}" /&amp;gt;&lt;br /&gt;        &amp;lt;/i:EventTrigger&amp;gt;&lt;br /&gt;    &amp;lt;/i:Interaction.Triggers&amp;gt;&lt;br /&gt;&amp;lt;/sdk:DataGrid&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;I slapped &lt;a href="http://www.galasoft.ch/mvvm/resources/Samples/MVVMFriendlySelectedItems.zip"&gt;a quick sample and published it here&lt;/a&gt; (VS2010, SL4 but the concept works in SL3 and WPF too).&lt;/p&gt;&lt;a title="Snagit Capture for Flickr" href="http://www.flickr.com/photos/36917929@N06/4622423670"&gt;&lt;img src="http://farm4.static.flickr.com/3352/4622423670_52531ccc80.jpg" width="294" height="299" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;Cheers!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Laurent&lt;/p&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;&lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;br /&gt;&lt;iframe style="border-bottom-style: none; border-right-style: none; margin-top: 7px; width: 450px; border-top-style: none; margin-bottom: -20px; height: 23px; border-left-style: none; overflow: hidden" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.galasoft.ch/archive/2010/05/19/handling-datagrid.selecteditems-in-an-mvvm-friendly-manner.aspx&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;colorscheme=light" frameborder="0" allowtransparency="" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139950"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139950" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139950.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/04/18/crowdsourcing-mvvm-light-toolkit-support.aspx"&gt;Crowdsourcing MVVM Light Toolkit support&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, April 18, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;a title="MVVM Light loves StackOverflow" href="http://www.flickr.com/photos/36917929@N06/4532075259"&gt;&lt;img src="http://farm3.static.flickr.com/2764/4532075259_65f2ee2925.jpg" width="488" height="110" /&gt;&lt;/a&gt;   &lt;p&gt;Considering the number of emails that are sent to me asking for support for MVVM Light toolkit, I find myself unable to answer all of them in sufficient time to make me feel good.&lt;/p&gt;  &lt;p&gt;In consequence, I started to send the following message in response to support queries, either per email or on the &lt;a href="http://mvvmlight.codeplex.com/Thread/List.aspx"&gt;MVVM Light Codeplex discussion page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Hi,&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;I am doing my best to answer all the questions as fast as possible. I receive a lot of them, however, and cannot reply to everyone fast enough to make me happy.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Due to this, I would like to encourage you to post your question on StackOverflow, and tag it with the tag mvvm-light.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;StackOverflow is an awesome site where tons of developers help others with their technical question.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://stackoverflow.com/questions/tagged/mvvm-light"&gt;&lt;em&gt;http://stackoverflow.com/questions/tagged/mvvm-light&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;I will monitor this tag on the StackOverflow website and do my best to answer questions. The advantage of StackOverflow over the Codeplex discussion is the sheer number of qualified developers able to help you with your questions, the visibility of the question itself, and the whole StackOverflow infrastructure (reputation, up- or down-vote, comments, etc)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Thanks!&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Laurent&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;Bug reports&lt;/h2&gt;  &lt;p&gt;Regarding bug reports, feel free to continue to &lt;a href="http://mvvmlight.codeplex.com/Thread/List.aspx"&gt;send them to the Codeplex site&lt;/a&gt; (preferred), or to me directly.&lt;/p&gt;  &lt;p&gt;I hope that this will help all support queries to be answered faster, and with the great quality for which the StackOverflow users are known!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139345"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139345" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139345.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/04/18/small-change-in-mvvm-light-toolkit-templates-for-blend-4.aspx"&gt;Small change in MVVM Light Toolkit templates for Blend 4 RC&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, April 18, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Ah, the joy of new releases… You will find that the MVVM Light Toolkit works fine with Visual Studio 2010 RTM and Blend 4 RC except for a few adjustments:&lt;/p&gt; &lt;h2&gt;Blend templates&lt;/h2&gt; &lt;p&gt;The path to the Expression Blend 4 project templates changed. If you start Expression Blend 4 RC now, you will likely not see the MVVM Light templates in the New Project dialog. &lt;/p&gt; &lt;p&gt; &lt;a title="20100403003" href="http://www.flickr.com/photos/36917929@N06/4487801224/"&gt;&lt;img border="0" alt="20100403003" src="http://farm5.static.flickr.com/4024/4487801224_969620cafd.jpg" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;New Project dialog with MVVM Light&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;To restore the templates, follow the steps:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Open Windows Explorer  &lt;/li&gt;&lt;li&gt;Navigate to C:\Users\[username]\Documents\Expression (or simply type My Documents in Windows Explorer and then open the Expression folder). &lt;/li&gt;&lt;li&gt;Change the name of the “Blend 4 beta” folder into “Blend 4”.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;That’s it, you should now see the templates in the New Project dialog in Blend 4.&lt;/p&gt; &lt;p&gt; Note that since the new name is “Blend 4”, I hope that I won’t need to do the same exercise when Blend 4 RTM is released!&lt;/p&gt; &lt;h2&gt;Windows Phone 7 templates&lt;/h2&gt; &lt;h2&gt;&lt;/h2&gt; &lt;p&gt;Since the Windows Phone 7 tools are not ready yet for Visual Studio 2010 RTM and Blend 4 RC, the templates in the Silverlight for Windows Phone folders will not work. You will get an error if you try to create a new such project in the newly released environment.&lt;/p&gt; &lt;p&gt;I hesitated to remove these templates from the current packages, but honestly that is a lot of trouble for a very short time before the tools for Windows Phone 7 are released (note: I don’t have any information as to when these tools will be released). In the mean time, just don’t create a WinPhone7 application.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Reminder: If you want to write code for Windows Phone 7, you need to keep the Visual Studio 2010 RC as well as Expression Blend 4 beta.&lt;/strong&gt;&lt;/p&gt; &lt;h2&gt;&lt;/h2&gt; &lt;p&gt;&lt;/p&gt; &lt;h2&gt;Updated package&lt;/h2&gt; &lt;p&gt;I uploaded an update to the Blend 4 templates. It is available like before on the “&lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;Install manually&lt;/a&gt;” page and on &lt;a href="http://mvvmlight.codeplex.com/releases/view/43831"&gt;the Codeplex page&lt;/a&gt;.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div style="margin-bottom: -1em"&gt; &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt; &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139339"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139339" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139339.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/04/09/using-commands-with-applicationbarmenuitem-and-applicationbarbutton-in-windows-phone-7.aspx"&gt;Using commands with ApplicationBarMenuItem and ApplicationBarButton in Windows Phone 7&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Friday, April 09, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Unfortunately, in the current version of the Windows Phone 7 Silverlight framework, it is not possible to attach any command on the ApplicationBarMenuItem and ApplicationBarButton controls. These two controls appear in the Application Bar, for example with the following markup:&lt;/p&gt;  &lt;pre class="xml" name="code"&gt;&amp;lt;phoneNavigation:PhoneApplicationPage.ApplicationBar&amp;gt;&lt;br /&gt;    &amp;lt;shell:ApplicationBar x:Name="MainPageApplicationBar"&amp;gt;&lt;br /&gt;        &amp;lt;shell:ApplicationBar.MenuItems&amp;gt;&lt;br /&gt;            &amp;lt;shell:ApplicationBarMenuItem &lt;br /&gt;                Text="Add City" /&amp;gt;&lt;br /&gt;            &amp;lt;shell:ApplicationBarMenuItem &lt;br /&gt;                Text="Add Country" /&amp;gt;&lt;br /&gt;        &amp;lt;/shell:ApplicationBar.MenuItems&amp;gt;&lt;br /&gt;        &amp;lt;shell:ApplicationBar.Buttons&amp;gt;&lt;br /&gt;            &amp;lt;shell:ApplicationBarIconButton &lt;br /&gt;                IconUri="/Resources/appbar.feature.video.rest.png" /&amp;gt;&lt;br /&gt;            &amp;lt;shell:ApplicationBarIconButton &lt;br /&gt;                IconUri="/Resources/appbar.feature.settings.rest.png" /&amp;gt;&lt;br /&gt;            &amp;lt;shell:ApplicationBarIconButton &lt;br /&gt;                IconUri="/Resources/appbar.refresh.rest.png" /&amp;gt;&lt;br /&gt;        &amp;lt;/shell:ApplicationBar.Buttons&amp;gt;&lt;br /&gt;    &amp;lt;/shell:ApplicationBar&amp;gt;&lt;br /&gt;&amp;lt;/phoneNavigation:PhoneApplicationPage.ApplicationBar&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This code will create the following UI:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="Application bar, collapsed" href="http://www.flickr.com/photos/36917929@N06/4505875943"&gt;&lt;img src="http://farm5.static.flickr.com/4054/4505875943_63225ac53f.jpg" width="431" height="247" /&gt;&lt;/a&gt;&lt;strong&gt;&lt;em&gt; &lt;br /&gt;      &lt;br /&gt;Application bar, collapsed&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="Application bar, expanded" href="http://www.flickr.com/photos/36917929@N06/4506512944"&gt;&lt;img src="http://farm5.static.flickr.com/4055/4506512944_5dcc2f5638.jpg" width="411" height="328" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;strong&gt;&lt;em&gt;Application bar, expanded&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;ApplicationBarItems are not, however, controls. A quick look in MSDN shows the following hierarchy for ApplicationBarMenuItem, for example:&lt;/p&gt;&lt;br /&gt;&lt;a title="ApplicationBarMenuItem class hierarchy" href="http://www.flickr.com/photos/36917929@N06/4505879571"&gt;&lt;img src="http://farm5.static.flickr.com/4031/4505879571_aff9307c12.jpg" width="344" height="61" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;p&gt;Unfortunately, this prevents all the mechanisms that are normally used to attach a Command (for example &lt;a href="http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx"&gt;a RelayCommand&lt;/a&gt;) to a control. For example, the attached behavior present in the class ButtonBaseExtension (from the Silverlight 3 version of the MVVM Light toolkit) can only be attached to a DependencyObject. Similarly, Blend behaviors (such as EventToCommand from the toolkit’s Extras library) needs a FrameworkElement to work.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Using code behind&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The alternative is to use code behind. &lt;a href="http://live.visitmix.com/MIX10/Sessions/EX14"&gt;As I said in my MIX10 talk&lt;/a&gt;, the MVVM police will &lt;strong&gt;not&lt;/strong&gt; take your family away if you use code behind (this quote was actually suggested to me by &lt;a href="http://twitter.com/gblock"&gt;Glenn Block&lt;/a&gt;); the code behind is there for a reason. In our case, invoking a command in the ViewModel requires the following code:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;In MainPage.xaml&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;shell:ApplicationBarMenuItem Text="My Menu 1"&lt;br /&gt;    Click="ApplicationBarMenuItemClick"/&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;In MainPage.xaml.cs&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;private void ApplicationBarMenuItemClick(&lt;br /&gt;    object sender, &lt;br /&gt;    System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;    var vm = DataContext as MainViewModel;&lt;br /&gt;    if (vm != null)&lt;br /&gt;    {&lt;br /&gt;        vm.MyCommand.Execute(null);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Resorting to code behind to bridge the gap between the View and the ViewModel is less elegant than using attached behaviors, either through an attached property or through a Blend behavior. It does, however, work fine. I don’t have any information if future changes in the Windows Phone 7 Application Bar API will make this easier. In the mean time, I would recommend using code behind instead.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139171"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139171" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139171.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/04/03/mvvm-light-toolkit-v3-sp1-for-windows-phone-7.aspx"&gt;MVVM Light Toolkit V3 SP1 for Windows Phone 7&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, April 04, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;He he I start to sound like Microsoft… Anyway… I just &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;released a service pack (SP1)&lt;/a&gt; for MVVM Light Toolkit V3.&lt;/p&gt;  &lt;h2&gt;Why?&lt;/h2&gt;  &lt;p&gt;Well mostly because I worked a bit more with the Windows Phone 7 tools that were released at MIX0, and I noticed a few things that could be better in the Windows Phone 7 template. Also, I only found out at MIX that you can actually install custom project templates for Visual Studio Express. For some reason I thought it was not possible.&lt;/p&gt;  &lt;p&gt;The best way to solve these issues is through a service pack, which consists of a few zip files. Simply follow the instructions on the “Installing Manually” page. You can go ahead and overwrite the files that were installed with V3, all the file structure and names are exactly the same.&lt;/p&gt;  &lt;h2&gt;What?&lt;/h2&gt;  &lt;p&gt;So what do you get in this service pack that was not already in V3? (for more info about what’s new in V3, check the What’s New page).&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Project and Item templates for &lt;strong&gt;Visual Studio 10 Express (phone edition)&lt;/strong&gt;. Unzip these files in your “My Documents” folder, and you can now create a new MVVM Light application in the WinPhone7 version of Visual Studio 2010 Express. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Signed assemblies&lt;/strong&gt;: All the assemblies are now signed, which is a requirement in certain build configurations. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;XML documentation files&lt;/strong&gt;: Thanks to Matt Casto for pinging me and reminding me that I had forgotten to include them (doh). &lt;/li&gt;    &lt;li&gt;New and improved &lt;strong&gt;Windows Phone 7 assemblies and templates&lt;/strong&gt;: This one deserves its own section (see below). &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;What was wrong with the old Silverlight 3 assemblies in Windows Phone 7 projects?&lt;/h2&gt;  &lt;p&gt;It was kind of weird. Functionality wise, it was working just right. However, if you noticed, the EventToCommand behavior was not visible in the Assets tab of Expression Blend, under Behaviors, where it should normally have been.&lt;/p&gt;  &lt;p&gt;The reason was that even though the Windows Phone 7 is using Silverlight 3, the System.Windows.Interactivity that Blend was expecting is the version that is normally used in Silverlight 4. Yeah, I know, it’s weird.&lt;/p&gt;  &lt;p&gt;This led me to create a specific version of these assemblies for the phone. The assemblies are located into &lt;strong&gt;C:\Program Files\Laurent Bugnion (GalaSoft)\Mvvm Light Toolkit\Binaries\WP7&lt;/strong&gt;. There are 3 DLLs:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;GalaSoft.MvvmLight.WP7.dll with RelayCommand, Messenger and ViewModelBase &lt;/li&gt;    &lt;li&gt;GalaSoft.MvvmLight.Extras.WP7.dll with EventToCommand and DispatcherHelper &lt;/li&gt;    &lt;li&gt;System.Windows.Interactivity.dll which is the same DLL installed in the Blend SDK, and which is needed for the EventToCommand behavior to work. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Happy coding!&lt;/h2&gt;  &lt;p&gt;That’s all! Download and install the service pack according to the instructions on the Installation page, and create your first MVVM Light application for the phone (a blog post will follow later with more details).&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139077"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139077" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139077.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/04/02/sample-code-and-slides-for-my-techdays10-belgium-talks.aspx"&gt;Sample code and slides for my TechDays10 (Belgium) talks&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Friday, April 02, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;The &lt;a href="http://www.galasoft.ch/blogs-all/Resources/MIX10/MIX10-MVVM-Samples.zip"&gt;source code for my MVVM talk&lt;/a&gt; titled “Understanding the MVVM Pattern” given at TechDays 2010 in Antwerpen, Belgium, is available online. It is actually the same code than the MIX10 one, but I added the Windows Phone 7 MVVM Light application (available in the folder titled “Mix10.MvvmDemo2-End”.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; before unpacking the zip file, you should right click on it, and select properties / Unblock.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I also published the slides for my two talks:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.slideshare.net/lbugnion/understanding-the-mvvm-pattern-techdays-belgium"&gt;Understanding the MVVM Pattern&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.slideshare.net/lbugnion/a-day-in-the-life-of-a-wpfsl-integrator"&gt;A day in the life of a WPF/SL integrator&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As far as I know, the videos will be online soon, stay tuned and I will announce when it is the case.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Get Started page for the MVVM Light Toolkit&lt;/strong&gt;: &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;http://www.galasoft.ch/mvvm/getstarted&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139062"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139062" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139062.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/03/16/sample-code-for-my-mix10-talk-online.aspx"&gt;Sample code for my #mix10 talk online&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Tuesday, March 16, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;I just saw that the video for my MIX10 session is online already! Impressive work, MIX10 team. I also published the sample code on my web server, so here are the links:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://ecn.channel9.msdn.com/o9/mix/10/pptx/EX14.pptx"&gt;Powerpoint slides&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://live.visitmix.com/MIX10/Sessions/EX14"&gt;Video&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.MvvmDemo1Start.zip"&gt;MVVM Demo 1 (start)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.MvvmDemo1End.zip"&gt;MVVM Demo 1 (final)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.Command.zip"&gt;Command sample&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.RelayCommandSample.zip"&gt;RelayCommand sample&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.Messaging.zip"&gt;Messaging sample&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.MvvmDemo2Start.zip"&gt;MVVM Demo 2 (start)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.MvvmDemo2End.zip"&gt;MVVM Demo 2 (final)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit Version 3&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;It was a real pleasure and an amazing experience to have this talk and to get all the great feedback! Thanks all for coming, and as usual don’t hesitate to send your feedback!&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138561"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138561" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/138561.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/03/16/whatrsquos-new-in-mvvm-light-v3.aspx"&gt;What&amp;rsquo;s new in MVVM Light V3&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Tuesday, March 16, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;V3 of the MVVM Light Toolkit was released during MIX10, after quite a long alpha stage. This post lists the new features in MVVM Light V3.&lt;/p&gt;  &lt;h2&gt;Compatibility&lt;/h2&gt;  &lt;p&gt;MVVM Light Toolkit V3 can be installed for the following tools and framework versions:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Visual Studio 2008 SP1, Expression Blend 3      &lt;ul&gt;       &lt;li&gt;Windows Presentation Foundation 3.5 SP1 &lt;/li&gt;        &lt;li&gt;Silverlight 3 &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Visual Studio 2010 RC, Expression Blend 4 beta      &lt;ul&gt;       &lt;li&gt;Windows Presentation Foundation 3.5 SP1 &lt;/li&gt;        &lt;li&gt;Windows Presentation Foundation 4 RC &lt;/li&gt;        &lt;li&gt;Silverlight 3 &lt;/li&gt;        &lt;li&gt;Silverlight 4 RC &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;For more information about installing the MVVM Light Toolkit V3, &lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;please visit this page&lt;/a&gt;. For cleaning up existing installation, &lt;a href="http://www.galasoft.ch/mvvm/cleaning/"&gt;see this page&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;New in V3 RTM&lt;/h2&gt;  &lt;p&gt;The following features have been added &lt;strong&gt;after&lt;/strong&gt; V3 alpha3:&lt;/p&gt;  &lt;h3&gt;Project template for the Windows Phone 7 series (Silverlight)&lt;/h3&gt;  &lt;p&gt;This new template allows you to create a new MVVM Light application in Visual Studio 2010 RC and to run it in the Windows Phone 7 series emulator. This template uses the Silverlight 3 version of the MVVM Light Toolkit V3. At this time, only the essentials features of the GalaSoft.MvvmLight.dll assembly are supported on the phone.&lt;/p&gt;  &lt;h2&gt;New in V3 alpha3&lt;/h2&gt;  &lt;p&gt;The following features have been added &lt;strong&gt;after&lt;/strong&gt; V3 alpha2:&lt;/p&gt;  &lt;h3&gt;New logo&lt;/h3&gt;  &lt;p&gt;An awesome logo has been designed for MVVM Light by Philippe Schutz.&lt;/p&gt;  &lt;h3&gt;DispatcherHelper class (in GalaSoft.MvvmLight.Extras.dll)&lt;/h3&gt;  &lt;p&gt;This class is useful when you work on multi-threaded WPF or Silverlight applications.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Initializing:&lt;/strong&gt; The DispatcherHelper class must be initialized in the UI thread. For example, you can initialize the class in a Silverlight application’s Application_Startup event handler, or in the WPF application’s static App constructor (in App.xaml).&lt;/p&gt;  &lt;pre class="csharp" name="code"&gt;// Initializing in Silverlight (in App.xaml)&lt;br /&gt;&lt;br /&gt;private void Application_Startup(&lt;br /&gt;    object sender,&lt;br /&gt;    StartupEventArgs e)&lt;br /&gt;{&lt;br /&gt;    RootVisual = new MainPage();&lt;br /&gt;    DispatcherHelper.Initialize();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Initializing in WPF (in App.xaml)&lt;br /&gt;&lt;br /&gt;static App()&lt;br /&gt;{&lt;br /&gt;    DispatcherHelper.Initialize();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Verifying if a property exists&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The ViewModelBase.RaisePropertyChanged method now checks if a given property name exists on the ViewModel class, and throws an exception if that property cannot be found. This is useful to detect typos in a property name, for example during a refactoring. Note that the check is only done in DEBUG mode.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Replacing IDisposable with ICleanup&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The IDisposable implementation in the ViewModelBase class has been marked obsolete. Instead, the ICleanup interface (and its Cleanup method) has been added. Implementing IDisposable in a ViewModel is still possible, but must be done explicitly. IDisposable in ViewModelBase was a bad practice, because it supposes that the ViewModel is garbage collected after Dispose is called. instead, the Cleanup method does not have such expectation.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The ViewModelLocator class (created when an MVVM Light project template is used in Visual Studio or Expression Blend) exposes a static Cleanup method, which should in turn call each ViewModel’s Cleanup method. The ViewModel is free to override the Cleanup method if local cleanup must be performed.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Passing EventArgs to command with EventToCommand&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The EventToCommand class is used to bind any event to an ICommand (typically on the ViewModel). In this case, it can be useful to pass the event’s EventArgs parameter to the command in the ViewModel. For example, for the MouseEnter event, you can pass the MouseEventArgs to a RelayCommand&amp;lt;MouseEventArgs&amp;gt; as shown in the next listings.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Note: Bringing UI specific classes (such as EventArgs) into the ViewModel reduces the testability of the ViewModel, and thus should be used with care.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Setting EventToCommand and PassEventArgsToCommand:&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;Grid x:Name="LayoutRoot"&amp;gt;&lt;br /&gt;    &amp;lt;i:Interaction.Triggers&amp;gt;&lt;br /&gt;        &amp;lt;i:EventTrigger EventName="MouseEnter"&amp;gt;&lt;br /&gt;            &amp;lt;cmd:EventToCommand Command="{Binding MyCommand}"&lt;br /&gt;                                PassEventArgsToCommand="True" /&amp;gt;&lt;br /&gt;        &amp;lt;/i:EventTrigger&amp;gt;&lt;br /&gt;    &amp;lt;/i:Interaction.Triggers&amp;gt;&lt;br /&gt;&amp;lt;/Grid&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Getting the EventArgs in the command&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public RelayCommand&amp;lt;MouseEventArgs&amp;gt; MyCommand&lt;br /&gt;{&lt;br /&gt;    get;&lt;br /&gt;    private set;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public MainViewModel()&lt;br /&gt;{&lt;br /&gt;    MyCommand = new RelayCommand&amp;lt;MouseEventArgs&amp;gt;(e =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        // e is of type MouseEventArgs&lt;br /&gt;    });&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Changes to templates&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Various changes have been made to project templates and item templates to make them more compatible with Silverlight 4 and to improve their visibility in Visual Studio and Expression Blend.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Bug corrections&lt;/h3&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;When a message is sent through the Messenger class using the method Messenger.Default.Send&amp;lt;T&amp;gt;(T message, object token), and the token is a simple value (for example int), the message was not sent correctly. This bug is now corrected. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;New in V3&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The following features have been added &lt;strong&gt;after&lt;/strong&gt; V2.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Sending messages with callback&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Certain classes have been added to the GalaSoft.MvvmLight.Messaging namespace, allowing sending a message and getting a callback from the recipient. These classes are:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;NotificationMessageWithCallback: Base class for messages with callback. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;NotificationMessageAction: A class with string notification, and a parameterless callback. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;NotificationMessageAction&amp;lt;T&amp;gt;: A class with string notification, and a callback with a parameter of type T. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;To send a message with callback, use the following code:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;var message = new NotificationMessageAction&amp;lt;bool&amp;gt;(&lt;br /&gt;    "Hello world",&lt;br /&gt;    callbackMessage =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        // This is the callback code&lt;br /&gt;        if (callbackMessage)&lt;br /&gt;        {&lt;br /&gt;            // ...&lt;br /&gt;        }&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;Messenger.Default.Send(message);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To register and receive a message with callback, use the following code:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;Messenger.Default.Register&amp;lt;NotificationMessageAction&amp;lt;bool&amp;gt;&amp;gt;(&lt;br /&gt;    this,&lt;br /&gt;    message =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        // Do something&lt;br /&gt;        &lt;br /&gt;        // Execute the callback&lt;br /&gt;        message.Execute(true);&lt;br /&gt;    });&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Messenger.Default can be overriden&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The Messenger.Default property can also be replaced, for example for unit testing purposes, by using the Messenger.OverrideDefault method. All the public methods of the Messenger class have been made virtual, and can be overridden in the test messenger class.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;&lt;/h3&gt;&lt;br /&gt;
&lt;h3&gt;Sending messages to interfaces&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In V2, it was possible to deliver messages targeted to instances of a given class. in V3 it is still possible, but in addition you can deliver a message to instances that implement a certain interface. The message will not be delivered to other recipients.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Use the overload Messenger.Default.Send&amp;lt;TMessage, TTarget&amp;gt;(TMessage message) where TTarget is, in fact, an interface (for example IDisposable). Of course the recipient must register to receive the type of message TMessage.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Sending messages with a token&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Messages can now be sent through the Messenger with a token.&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;To send a message with token, use the method overload Send&amp;lt;TMessage&amp;gt;(TMessage message, object token). &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;To receive a message with token, use the methods Register&amp;lt;TMessage&amp;gt;(object recipient, object token, Action&amp;lt;TMessage&amp;gt; action) or Register&amp;lt;TMessage&amp;gt;(object recipient, object token, bool receiveDerivedMessagesToo, Action&amp;lt;TMessage&amp;gt; action) &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;The token can be a simple value (int, string, etc…) or an instance of a class. The message is not delivered to recipients who registered with a different token, or with no token at all.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Renaming CommandMessage to NotificationMessage&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To avoid confusion with ICommand and RelayCommand, the CommandMessage class has been renamed to NotificationMessage. This message class can be used to deliver a notification (of type string) to a recipient.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;ViewModelBase constructor with IMessenger&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The ViewModelBase class now accepts an IMessenger parameter. If this constructor is used instead of the default empty constructor, the IMessenger passed as parameter will be used to broadcast a PropertyChangedMessage when the method RaisePropertyChanged&amp;lt;T&amp;gt;(string propertyName, T oldValue, T newValue, bool broadcast) is used.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the default ViewModelBase constructor is used, the Messenger.Default instance will be used instead.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;EventToCommand behavior&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The EventToCommand behavior has been added in V3. It can be used to bind any event of any FrameworkElement to any ICommand (for example a RelayCommand located in the ViewModel). More information about the EventToCommand behavior can be found &lt;a href="http://blog.galasoft.ch/archive/2009/11/05/mvvm-light-toolkit-v3-alpha-2-eventtocommand-behavior.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://blog.galasoft.ch/archive/2009/12/17/silverlight-4-dragampdrop-with-eventtocommand.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Updated the project templates to remove the sample application&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The project template has been updated to remove the sample application that was created every time that a new MVVM Light application was created in Visual Studio or Blend. This makes the creation of a new application easier, because you don’t need to remove code before you can start writing code.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Bug corrections&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Some bugs that were in Version 2 have been corrected:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;In some occasions, an exception could be thrown when a recipient was registered for a message at the same time as a message was received. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;New names for DLLs&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;If you upgrade an existing installation, you will need to change the reference to the DLLs in C:\Program Files\Laurent Bugnion (GalaSoft)\Mvvm Light Toolkit\Binaries. The assemblies have been moved, and the versions for Silverlight 4 and for WPF4 have been renamed, to avoid some confusion. It is now easier to make sure that you are using the correct DLL.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;WPF3.5SP1, Silverlight 3&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;When using the DLLs, make sure that you use the correct versions.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="DLLs for Silverlight 3" href="http://www.flickr.com/photos/36917929@N06/4433510284"&gt;&lt;img src="http://farm3.static.flickr.com/2715/4433510284_c49cf68ff6.jpg" width="500" height="329" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="DLLs for WPF 3.5 SP1" href="http://www.flickr.com/photos/36917929@N06/4433511944"&gt;&lt;img src="http://farm5.static.flickr.com/4003/4433511944_e2b18073e0.jpg" width="500" height="329" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;WPF4, Silverlight 4&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;When using the DLLs, make sure that you use the correct versions.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="DLLs for Silverlight 4" href="http://www.flickr.com/photos/36917929@N06/4432738407"&gt;&lt;img src="http://farm3.static.flickr.com/2763/4432738407_dc6ca4a537.jpg" width="500" height="329" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="DLL2 for WPF 4" href="http://www.flickr.com/photos/36917929@N06/4433514364"&gt;&lt;img src="http://farm5.static.flickr.com/4032/4433514364_9ab5031c83.jpg" width="500" height="329" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138557"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138557" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/138557.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Tue, 08 Jun 2010 10:29:35 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100608102935A</guid></item><item><title>Updated Wiki: Home</title><link>http://mvvmlight.codeplex.com/wikipage?version=9</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Project Description&lt;/h1&gt;The MVVM Light Toolkit is a set of components helping people to get started in the Model - View - ViewModel pattern in Silverlight and WPF. It is a light and pragmatic framework that contains only the essential components needed.&lt;br /&gt;
&lt;h1&gt;Get started&lt;/h1&gt;More information about the MVVM Light Toolkit can be found on &lt;a href="http://www.galasoft.ch/mvvm/getstarted" class="externalLink"&gt;http://www.galasoft.ch/mvvm/getstarted&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Latest news:&lt;/h1&gt;&lt;div class="rss"&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/04/18/crowdsourcing-mvvm-light-toolkit-support.aspx"&gt;Crowdsourcing MVVM Light Toolkit support&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, April 18, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;a title="MVVM Light loves StackOverflow" href="http://www.flickr.com/photos/36917929@N06/4532075259"&gt;&lt;img src="http://farm3.static.flickr.com/2764/4532075259_65f2ee2925.jpg" width="488" height="110" /&gt;&lt;/a&gt;   &lt;p&gt;Considering the number of emails that are sent to me asking for support for MVVM Light toolkit, I find myself unable to answer all of them in sufficient time to make me feel good.&lt;/p&gt;  &lt;p&gt;In consequence, I started to send the following message in response to support queries, either per email or on the &lt;a href="http://mvvmlight.codeplex.com/Thread/List.aspx"&gt;MVVM Light Codeplex discussion page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Hi,&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;I am doing my best to answer all the questions as fast as possible. I receive a lot of them, however, and cannot reply to everyone fast enough to make me happy.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Due to this, I would like to encourage you to post your question on StackOverflow, and tag it with the tag mvvm-light.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;StackOverflow is an awesome site where tons of developers help others with their technical question.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://stackoverflow.com/questions/tagged/mvvm-light"&gt;&lt;em&gt;http://stackoverflow.com/questions/tagged/mvvm-light&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;I will monitor this tag on the StackOverflow website and do my best to answer questions. The advantage of StackOverflow over the Codeplex discussion is the sheer number of qualified developers able to help you with your questions, the visibility of the question itself, and the whole StackOverflow infrastructure (reputation, up- or down-vote, comments, etc)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Thanks!&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Laurent&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;Bug reports&lt;/h2&gt;  &lt;p&gt;Regarding bug reports, feel free to continue to &lt;a href="http://mvvmlight.codeplex.com/Thread/List.aspx"&gt;send them to the Codeplex site&lt;/a&gt; (preferred), or to me directly.&lt;/p&gt;  &lt;p&gt;I hope that this will help all support queries to be answered faster, and with the great quality for which the StackOverflow users are known!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139345"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139345" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139345.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/04/18/small-change-in-mvvm-light-toolkit-templates-for-blend-4.aspx"&gt;Small change in MVVM Light Toolkit templates for Blend 4 RC&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, April 18, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Ah, the joy of new releases… You will find that the MVVM Light Toolkit works fine with Visual Studio 2010 RTM and Blend 4 RC except for a few adjustments:&lt;/p&gt; &lt;h2&gt;Blend templates&lt;/h2&gt; &lt;p&gt;The path to the Expression Blend 4 project templates changed. If you start Expression Blend 4 RC now, you will likely not see the MVVM Light templates in the New Project dialog. &lt;/p&gt; &lt;p&gt; &lt;a title="20100403003" href="http://www.flickr.com/photos/36917929@N06/4487801224/"&gt;&lt;img border="0" alt="20100403003" src="http://farm5.static.flickr.com/4024/4487801224_969620cafd.jpg" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;New Project dialog with MVVM Light&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;To restore the templates, follow the steps:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Open Windows Explorer  &lt;/li&gt;&lt;li&gt;Navigate to C:\Users\[username]\Documents\Expression (or simply type My Documents in Windows Explorer and then open the Expression folder). &lt;/li&gt;&lt;li&gt;Change the name of the “Blend 4 beta” folder into “Blend 4”.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;That’s it, you should now see the templates in the New Project dialog in Blend 4.&lt;/p&gt; &lt;p&gt; Note that since the new name is “Blend 4”, I hope that I won’t need to do the same exercise when Blend 4 RTM is released!&lt;/p&gt; &lt;h2&gt;Windows Phone 7 templates&lt;/h2&gt; &lt;h2&gt;&lt;/h2&gt; &lt;p&gt;Since the Windows Phone 7 tools are not ready yet for Visual Studio 2010 RTM and Blend 4 RC, the templates in the Silverlight for Windows Phone folders will not work. You will get an error if you try to create a new such project in the newly released environment.&lt;/p&gt; &lt;p&gt;I hesitated to remove these templates from the current packages, but honestly that is a lot of trouble for a very short time before the tools for Windows Phone 7 are released (note: I don’t have any information as to when these tools will be released). In the mean time, just don’t create a WinPhone7 application.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Reminder: If you want to write code for Windows Phone 7, you need to keep the Visual Studio 2010 RC as well as Expression Blend 4 beta.&lt;/strong&gt;&lt;/p&gt; &lt;h2&gt;&lt;/h2&gt; &lt;p&gt;&lt;/p&gt; &lt;h2&gt;Updated package&lt;/h2&gt; &lt;p&gt;I uploaded an update to the Blend 4 templates. It is available like before on the “&lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;Install manually&lt;/a&gt;” page and on &lt;a href="http://mvvmlight.codeplex.com/releases/view/43831"&gt;the Codeplex page&lt;/a&gt;.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div style="margin-bottom: -1em"&gt; &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt; &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139339"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139339" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139339.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/04/09/using-commands-with-applicationbarmenuitem-and-applicationbarbutton-in-windows-phone-7.aspx"&gt;Using commands with ApplicationBarMenuItem and ApplicationBarButton in Windows Phone 7&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Friday, April 09, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Unfortunately, in the current version of the Windows Phone 7 Silverlight framework, it is not possible to attach any command on the ApplicationBarMenuItem and ApplicationBarButton controls. These two controls appear in the Application Bar, for example with the following markup:&lt;/p&gt;  &lt;pre class="xml" name="code"&gt;&amp;lt;phoneNavigation:PhoneApplicationPage.ApplicationBar&amp;gt;&lt;br /&gt;    &amp;lt;shell:ApplicationBar x:Name="MainPageApplicationBar"&amp;gt;&lt;br /&gt;        &amp;lt;shell:ApplicationBar.MenuItems&amp;gt;&lt;br /&gt;            &amp;lt;shell:ApplicationBarMenuItem &lt;br /&gt;                Text="Add City" /&amp;gt;&lt;br /&gt;            &amp;lt;shell:ApplicationBarMenuItem &lt;br /&gt;                Text="Add Country" /&amp;gt;&lt;br /&gt;        &amp;lt;/shell:ApplicationBar.MenuItems&amp;gt;&lt;br /&gt;        &amp;lt;shell:ApplicationBar.Buttons&amp;gt;&lt;br /&gt;            &amp;lt;shell:ApplicationBarIconButton &lt;br /&gt;                IconUri="/Resources/appbar.feature.video.rest.png" /&amp;gt;&lt;br /&gt;            &amp;lt;shell:ApplicationBarIconButton &lt;br /&gt;                IconUri="/Resources/appbar.feature.settings.rest.png" /&amp;gt;&lt;br /&gt;            &amp;lt;shell:ApplicationBarIconButton &lt;br /&gt;                IconUri="/Resources/appbar.refresh.rest.png" /&amp;gt;&lt;br /&gt;        &amp;lt;/shell:ApplicationBar.Buttons&amp;gt;&lt;br /&gt;    &amp;lt;/shell:ApplicationBar&amp;gt;&lt;br /&gt;&amp;lt;/phoneNavigation:PhoneApplicationPage.ApplicationBar&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This code will create the following UI:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="Application bar, collapsed" href="http://www.flickr.com/photos/36917929@N06/4505875943"&gt;&lt;img src="http://farm5.static.flickr.com/4054/4505875943_63225ac53f.jpg" width="431" height="247" /&gt;&lt;/a&gt;&lt;strong&gt;&lt;em&gt; &lt;br /&gt;      &lt;br /&gt;Application bar, collapsed&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="Application bar, expanded" href="http://www.flickr.com/photos/36917929@N06/4506512944"&gt;&lt;img src="http://farm5.static.flickr.com/4055/4506512944_5dcc2f5638.jpg" width="411" height="328" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;strong&gt;&lt;em&gt;Application bar, expanded&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;ApplicationBarItems are not, however, controls. A quick look in MSDN shows the following hierarchy for ApplicationBarMenuItem, for example:&lt;/p&gt;&lt;br /&gt;&lt;a title="ApplicationBarMenuItem class hierarchy" href="http://www.flickr.com/photos/36917929@N06/4505879571"&gt;&lt;img src="http://farm5.static.flickr.com/4031/4505879571_aff9307c12.jpg" width="344" height="61" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;p&gt;Unfortunately, this prevents all the mechanisms that are normally used to attach a Command (for example &lt;a href="http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx"&gt;a RelayCommand&lt;/a&gt;) to a control. For example, the attached behavior present in the class ButtonBaseExtension (from the Silverlight 3 version of the MVVM Light toolkit) can only be attached to a DependencyObject. Similarly, Blend behaviors (such as EventToCommand from the toolkit’s Extras library) needs a FrameworkElement to work.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Using code behind&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The alternative is to use code behind. &lt;a href="http://live.visitmix.com/MIX10/Sessions/EX14"&gt;As I said in my MIX10 talk&lt;/a&gt;, the MVVM police will &lt;strong&gt;not&lt;/strong&gt; take your family away if you use code behind (this quote was actually suggested to me by &lt;a href="http://twitter.com/gblock"&gt;Glenn Block&lt;/a&gt;); the code behind is there for a reason. In our case, invoking a command in the ViewModel requires the following code:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;In MainPage.xaml&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;shell:ApplicationBarMenuItem Text="My Menu 1"&lt;br /&gt;    Click="ApplicationBarMenuItemClick"/&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;In MainPage.xaml.cs&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;private void ApplicationBarMenuItemClick(&lt;br /&gt;    object sender, &lt;br /&gt;    System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;    var vm = DataContext as MainViewModel;&lt;br /&gt;    if (vm != null)&lt;br /&gt;    {&lt;br /&gt;        vm.MyCommand.Execute(null);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Resorting to code behind to bridge the gap between the View and the ViewModel is less elegant than using attached behaviors, either through an attached property or through a Blend behavior. It does, however, work fine. I don’t have any information if future changes in the Windows Phone 7 Application Bar API will make this easier. In the mean time, I would recommend using code behind instead.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139171"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139171" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139171.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/04/03/mvvm-light-toolkit-v3-sp1-for-windows-phone-7.aspx"&gt;MVVM Light Toolkit V3 SP1 for Windows Phone 7&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, April 04, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;He he I start to sound like Microsoft… Anyway… I just &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;released a service pack (SP1)&lt;/a&gt; for MVVM Light Toolkit V3.&lt;/p&gt;  &lt;h2&gt;Why?&lt;/h2&gt;  &lt;p&gt;Well mostly because I worked a bit more with the Windows Phone 7 tools that were released at MIX0, and I noticed a few things that could be better in the Windows Phone 7 template. Also, I only found out at MIX that you can actually install custom project templates for Visual Studio Express. For some reason I thought it was not possible.&lt;/p&gt;  &lt;p&gt;The best way to solve these issues is through a service pack, which consists of a few zip files. Simply follow the instructions on the “Installing Manually” page. You can go ahead and overwrite the files that were installed with V3, all the file structure and names are exactly the same.&lt;/p&gt;  &lt;h2&gt;What?&lt;/h2&gt;  &lt;p&gt;So what do you get in this service pack that was not already in V3? (for more info about what’s new in V3, check the What’s New page).&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Project and Item templates for &lt;strong&gt;Visual Studio 10 Express (phone edition)&lt;/strong&gt;. Unzip these files in your “My Documents” folder, and you can now create a new MVVM Light application in the WinPhone7 version of Visual Studio 2010 Express. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Signed assemblies&lt;/strong&gt;: All the assemblies are now signed, which is a requirement in certain build configurations. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;XML documentation files&lt;/strong&gt;: Thanks to Matt Casto for pinging me and reminding me that I had forgotten to include them (doh). &lt;/li&gt;    &lt;li&gt;New and improved &lt;strong&gt;Windows Phone 7 assemblies and templates&lt;/strong&gt;: This one deserves its own section (see below). &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;What was wrong with the old Silverlight 3 assemblies in Windows Phone 7 projects?&lt;/h2&gt;  &lt;p&gt;It was kind of weird. Functionality wise, it was working just right. However, if you noticed, the EventToCommand behavior was not visible in the Assets tab of Expression Blend, under Behaviors, where it should normally have been.&lt;/p&gt;  &lt;p&gt;The reason was that even though the Windows Phone 7 is using Silverlight 3, the System.Windows.Interactivity that Blend was expecting is the version that is normally used in Silverlight 4. Yeah, I know, it’s weird.&lt;/p&gt;  &lt;p&gt;This led me to create a specific version of these assemblies for the phone. The assemblies are located into &lt;strong&gt;C:\Program Files\Laurent Bugnion (GalaSoft)\Mvvm Light Toolkit\Binaries\WP7&lt;/strong&gt;. There are 3 DLLs:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;GalaSoft.MvvmLight.WP7.dll with RelayCommand, Messenger and ViewModelBase &lt;/li&gt;    &lt;li&gt;GalaSoft.MvvmLight.Extras.WP7.dll with EventToCommand and DispatcherHelper &lt;/li&gt;    &lt;li&gt;System.Windows.Interactivity.dll which is the same DLL installed in the Blend SDK, and which is needed for the EventToCommand behavior to work. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Happy coding!&lt;/h2&gt;  &lt;p&gt;That’s all! Download and install the service pack according to the instructions on the Installation page, and create your first MVVM Light application for the phone (a blog post will follow later with more details).&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139077"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139077" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139077.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/04/02/sample-code-and-slides-for-my-techdays10-belgium-talks.aspx"&gt;Sample code and slides for my TechDays10 (Belgium) talks&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Friday, April 02, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;The &lt;a href="http://www.galasoft.ch/blogs-all/Resources/MIX10/MIX10-MVVM-Samples.zip"&gt;source code for my MVVM talk&lt;/a&gt; titled “Understanding the MVVM Pattern” given at TechDays 2010 in Antwerpen, Belgium, is available online. It is actually the same code than the MIX10 one, but I added the Windows Phone 7 MVVM Light application (available in the folder titled “Mix10.MvvmDemo2-End”.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; before unpacking the zip file, you should right click on it, and select properties / Unblock.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I also published the slides for my two talks:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.slideshare.net/lbugnion/understanding-the-mvvm-pattern-techdays-belgium"&gt;Understanding the MVVM Pattern&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.slideshare.net/lbugnion/a-day-in-the-life-of-a-wpfsl-integrator"&gt;A day in the life of a WPF/SL integrator&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As far as I know, the videos will be online soon, stay tuned and I will announce when it is the case.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Get Started page for the MVVM Light Toolkit&lt;/strong&gt;: &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;http://www.galasoft.ch/mvvm/getstarted&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139062"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139062" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139062.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/03/16/sample-code-for-my-mix10-talk-online.aspx"&gt;Sample code for my #mix10 talk online&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Tuesday, March 16, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;I just saw that the video for my MIX10 session is online already! Impressive work, MIX10 team. I also published the sample code on my web server, so here are the links:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://ecn.channel9.msdn.com/o9/mix/10/pptx/EX14.pptx"&gt;Powerpoint slides&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://live.visitmix.com/MIX10/Sessions/EX14"&gt;Video&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.MvvmDemo1Start.zip"&gt;MVVM Demo 1 (start)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.MvvmDemo1End.zip"&gt;MVVM Demo 1 (final)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.Command.zip"&gt;Command sample&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.RelayCommandSample.zip"&gt;RelayCommand sample&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.Messaging.zip"&gt;Messaging sample&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.MvvmDemo2Start.zip"&gt;MVVM Demo 2 (start)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.MvvmDemo2End.zip"&gt;MVVM Demo 2 (final)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit Version 3&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;It was a real pleasure and an amazing experience to have this talk and to get all the great feedback! Thanks all for coming, and as usual don’t hesitate to send your feedback!&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138561"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138561" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/138561.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/03/16/whatrsquos-new-in-mvvm-light-v3.aspx"&gt;What&amp;rsquo;s new in MVVM Light V3&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Tuesday, March 16, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;V3 of the MVVM Light Toolkit was released during MIX10, after quite a long alpha stage. This post lists the new features in MVVM Light V3.&lt;/p&gt;  &lt;h2&gt;Compatibility&lt;/h2&gt;  &lt;p&gt;MVVM Light Toolkit V3 can be installed for the following tools and framework versions:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Visual Studio 2008 SP1, Expression Blend 3      &lt;ul&gt;       &lt;li&gt;Windows Presentation Foundation 3.5 SP1 &lt;/li&gt;        &lt;li&gt;Silverlight 3 &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Visual Studio 2010 RC, Expression Blend 4 beta      &lt;ul&gt;       &lt;li&gt;Windows Presentation Foundation 3.5 SP1 &lt;/li&gt;        &lt;li&gt;Windows Presentation Foundation 4 RC &lt;/li&gt;        &lt;li&gt;Silverlight 3 &lt;/li&gt;        &lt;li&gt;Silverlight 4 RC &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;For more information about installing the MVVM Light Toolkit V3, &lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;please visit this page&lt;/a&gt;. For cleaning up existing installation, &lt;a href="http://www.galasoft.ch/mvvm/cleaning/"&gt;see this page&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;New in V3 RTM&lt;/h2&gt;  &lt;p&gt;The following features have been added &lt;strong&gt;after&lt;/strong&gt; V3 alpha3:&lt;/p&gt;  &lt;h3&gt;Project template for the Windows Phone 7 series (Silverlight)&lt;/h3&gt;  &lt;p&gt;This new template allows you to create a new MVVM Light application in Visual Studio 2010 RC and to run it in the Windows Phone 7 series emulator. This template uses the Silverlight 3 version of the MVVM Light Toolkit V3. At this time, only the essentials features of the GalaSoft.MvvmLight.dll assembly are supported on the phone.&lt;/p&gt;  &lt;h2&gt;New in V3 alpha3&lt;/h2&gt;  &lt;p&gt;The following features have been added &lt;strong&gt;after&lt;/strong&gt; V3 alpha2:&lt;/p&gt;  &lt;h3&gt;New logo&lt;/h3&gt;  &lt;p&gt;An awesome logo has been designed for MVVM Light by Philippe Schutz.&lt;/p&gt;  &lt;h3&gt;DispatcherHelper class (in GalaSoft.MvvmLight.Extras.dll)&lt;/h3&gt;  &lt;p&gt;This class is useful when you work on multi-threaded WPF or Silverlight applications.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Initializing:&lt;/strong&gt; The DispatcherHelper class must be initialized in the UI thread. For example, you can initialize the class in a Silverlight application’s Application_Startup event handler, or in the WPF application’s static App constructor (in App.xaml).&lt;/p&gt;  &lt;pre class="csharp" name="code"&gt;// Initializing in Silverlight (in App.xaml)&lt;br /&gt;&lt;br /&gt;private void Application_Startup(&lt;br /&gt;    object sender,&lt;br /&gt;    StartupEventArgs e)&lt;br /&gt;{&lt;br /&gt;    RootVisual = new MainPage();&lt;br /&gt;    DispatcherHelper.Initialize();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Initializing in WPF (in App.xaml)&lt;br /&gt;&lt;br /&gt;static App()&lt;br /&gt;{&lt;br /&gt;    DispatcherHelper.Initialize();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Verifying if a property exists&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The ViewModelBase.RaisePropertyChanged method now checks if a given property name exists on the ViewModel class, and throws an exception if that property cannot be found. This is useful to detect typos in a property name, for example during a refactoring. Note that the check is only done in DEBUG mode.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Replacing IDisposable with ICleanup&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The IDisposable implementation in the ViewModelBase class has been marked obsolete. Instead, the ICleanup interface (and its Cleanup method) has been added. Implementing IDisposable in a ViewModel is still possible, but must be done explicitly. IDisposable in ViewModelBase was a bad practice, because it supposes that the ViewModel is garbage collected after Dispose is called. instead, the Cleanup method does not have such expectation.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The ViewModelLocator class (created when an MVVM Light project template is used in Visual Studio or Expression Blend) exposes a static Cleanup method, which should in turn call each ViewModel’s Cleanup method. The ViewModel is free to override the Cleanup method if local cleanup must be performed.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Passing EventArgs to command with EventToCommand&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The EventToCommand class is used to bind any event to an ICommand (typically on the ViewModel). In this case, it can be useful to pass the event’s EventArgs parameter to the command in the ViewModel. For example, for the MouseEnter event, you can pass the MouseEventArgs to a RelayCommand&amp;lt;MouseEventArgs&amp;gt; as shown in the next listings.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Note: Bringing UI specific classes (such as EventArgs) into the ViewModel reduces the testability of the ViewModel, and thus should be used with care.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Setting EventToCommand and PassEventArgsToCommand:&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;Grid x:Name="LayoutRoot"&amp;gt;&lt;br /&gt;    &amp;lt;i:Interaction.Triggers&amp;gt;&lt;br /&gt;        &amp;lt;i:EventTrigger EventName="MouseEnter"&amp;gt;&lt;br /&gt;            &amp;lt;cmd:EventToCommand Command="{Binding MyCommand}"&lt;br /&gt;                                PassEventArgsToCommand="True" /&amp;gt;&lt;br /&gt;        &amp;lt;/i:EventTrigger&amp;gt;&lt;br /&gt;    &amp;lt;/i:Interaction.Triggers&amp;gt;&lt;br /&gt;&amp;lt;/Grid&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Getting the EventArgs in the command&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public RelayCommand&amp;lt;MouseEventArgs&amp;gt; MyCommand&lt;br /&gt;{&lt;br /&gt;    get;&lt;br /&gt;    private set;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public MainViewModel()&lt;br /&gt;{&lt;br /&gt;    MyCommand = new RelayCommand&amp;lt;MouseEventArgs&amp;gt;(e =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        // e is of type MouseEventArgs&lt;br /&gt;    });&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Changes to templates&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Various changes have been made to project templates and item templates to make them more compatible with Silverlight 4 and to improve their visibility in Visual Studio and Expression Blend.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Bug corrections&lt;/h3&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;When a message is sent through the Messenger class using the method Messenger.Default.Send&amp;lt;T&amp;gt;(T message, object token), and the token is a simple value (for example int), the message was not sent correctly. This bug is now corrected. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;New in V3&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The following features have been added &lt;strong&gt;after&lt;/strong&gt; V2.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Sending messages with callback&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Certain classes have been added to the GalaSoft.MvvmLight.Messaging namespace, allowing sending a message and getting a callback from the recipient. These classes are:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;NotificationMessageWithCallback: Base class for messages with callback. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;NotificationMessageAction: A class with string notification, and a parameterless callback. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;NotificationMessageAction&amp;lt;T&amp;gt;: A class with string notification, and a callback with a parameter of type T. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;To send a message with callback, use the following code:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;var message = new NotificationMessageAction&amp;lt;bool&amp;gt;(&lt;br /&gt;    "Hello world",&lt;br /&gt;    callbackMessage =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        // This is the callback code&lt;br /&gt;        if (callbackMessage)&lt;br /&gt;        {&lt;br /&gt;            // ...&lt;br /&gt;        }&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;Messenger.Default.Send(message);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To register and receive a message with callback, use the following code:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;Messenger.Default.Register&amp;lt;NotificationMessageAction&amp;lt;bool&amp;gt;&amp;gt;(&lt;br /&gt;    this,&lt;br /&gt;    message =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        // Do something&lt;br /&gt;        &lt;br /&gt;        // Execute the callback&lt;br /&gt;        message.Execute(true);&lt;br /&gt;    });&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Messenger.Default can be overriden&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The Messenger.Default property can also be replaced, for example for unit testing purposes, by using the Messenger.OverrideDefault method. All the public methods of the Messenger class have been made virtual, and can be overridden in the test messenger class.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;&lt;/h3&gt;&lt;br /&gt;
&lt;h3&gt;Sending messages to interfaces&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In V2, it was possible to deliver messages targeted to instances of a given class. in V3 it is still possible, but in addition you can deliver a message to instances that implement a certain interface. The message will not be delivered to other recipients.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Use the overload Messenger.Default.Send&amp;lt;TMessage, TTarget&amp;gt;(TMessage message) where TTarget is, in fact, an interface (for example IDisposable). Of course the recipient must register to receive the type of message TMessage.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Sending messages with a token&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Messages can now be sent through the Messenger with a token.&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;To send a message with token, use the method overload Send&amp;lt;TMessage&amp;gt;(TMessage message, object token). &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;To receive a message with token, use the methods Register&amp;lt;TMessage&amp;gt;(object recipient, object token, Action&amp;lt;TMessage&amp;gt; action) or Register&amp;lt;TMessage&amp;gt;(object recipient, object token, bool receiveDerivedMessagesToo, Action&amp;lt;TMessage&amp;gt; action) &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;The token can be a simple value (int, string, etc…) or an instance of a class. The message is not delivered to recipients who registered with a different token, or with no token at all.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Renaming CommandMessage to NotificationMessage&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To avoid confusion with ICommand and RelayCommand, the CommandMessage class has been renamed to NotificationMessage. This message class can be used to deliver a notification (of type string) to a recipient.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;ViewModelBase constructor with IMessenger&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The ViewModelBase class now accepts an IMessenger parameter. If this constructor is used instead of the default empty constructor, the IMessenger passed as parameter will be used to broadcast a PropertyChangedMessage when the method RaisePropertyChanged&amp;lt;T&amp;gt;(string propertyName, T oldValue, T newValue, bool broadcast) is used.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the default ViewModelBase constructor is used, the Messenger.Default instance will be used instead.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;EventToCommand behavior&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The EventToCommand behavior has been added in V3. It can be used to bind any event of any FrameworkElement to any ICommand (for example a RelayCommand located in the ViewModel). More information about the EventToCommand behavior can be found &lt;a href="http://blog.galasoft.ch/archive/2009/11/05/mvvm-light-toolkit-v3-alpha-2-eventtocommand-behavior.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://blog.galasoft.ch/archive/2009/12/17/silverlight-4-dragampdrop-with-eventtocommand.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Updated the project templates to remove the sample application&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The project template has been updated to remove the sample application that was created every time that a new MVVM Light application was created in Visual Studio or Blend. This makes the creation of a new application easier, because you don’t need to remove code before you can start writing code.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Bug corrections&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Some bugs that were in Version 2 have been corrected:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;In some occasions, an exception could be thrown when a recipient was registered for a message at the same time as a message was received. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;New names for DLLs&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;If you upgrade an existing installation, you will need to change the reference to the DLLs in C:\Program Files\Laurent Bugnion (GalaSoft)\Mvvm Light Toolkit\Binaries. The assemblies have been moved, and the versions for Silverlight 4 and for WPF4 have been renamed, to avoid some confusion. It is now easier to make sure that you are using the correct DLL.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;WPF3.5SP1, Silverlight 3&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;When using the DLLs, make sure that you use the correct versions.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="DLLs for Silverlight 3" href="http://www.flickr.com/photos/36917929@N06/4433510284"&gt;&lt;img src="http://farm3.static.flickr.com/2715/4433510284_c49cf68ff6.jpg" width="500" height="329" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="DLLs for WPF 3.5 SP1" href="http://www.flickr.com/photos/36917929@N06/4433511944"&gt;&lt;img src="http://farm5.static.flickr.com/4003/4433511944_e2b18073e0.jpg" width="500" height="329" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;WPF4, Silverlight 4&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;When using the DLLs, make sure that you use the correct versions.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="DLLs for Silverlight 4" href="http://www.flickr.com/photos/36917929@N06/4432738407"&gt;&lt;img src="http://farm3.static.flickr.com/2763/4432738407_dc6ca4a537.jpg" width="500" height="329" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="DLL2 for WPF 4" href="http://www.flickr.com/photos/36917929@N06/4433514364"&gt;&lt;img src="http://farm5.static.flickr.com/4032/4433514364_9ab5031c83.jpg" width="500" height="329" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138557"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138557" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/138557.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/03/16/mvvm-light-v3-released-at-mix10.aspx"&gt;MVVM Light V3 released at #MIX10&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Tuesday, March 16, 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;&lt;a title="MVVM_White" href="http://www.flickr.com/photos/36917929@N06/4084208308/"&gt;&lt;img border="0" alt="MVVM_White" src="http://farm3.static.flickr.com/2706/4084208308_2fb7a14111_m.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;During my session “&lt;a href="http://live.visitmix.com/MIX10/Sessions/EX14"&gt;Understanding the MVVM pattern&lt;/a&gt;” at MIX10 in Vegas, I showed some components of the MVVM Light toolkit V3, which gave me the occasion to announce the release of version 3. This version has been in alpha stage for a while, and has been tested by many users. it is very stable, and ready for a release. So here we go!&lt;/p&gt;  &lt;h1&gt;&lt;/h1&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h1&gt;What’s new&lt;/h1&gt;  &lt;p&gt;What’s new in MVVM Light Toolkit V3 is the topic of the next post.&lt;/p&gt;  &lt;h1&gt;Cleaning up&lt;/h1&gt;  &lt;p&gt;I would recommend cleaning up older versions before installing V3. I prepared a page &lt;a href="http://www.galasoft.ch/mvvm/cleaning"&gt;explaining how to do that manually&lt;/a&gt;. Unfortunately I didn’t have time to create an automatic cleaner/installer, this is very high on my list but with the book and the conferences going on, it will take a little more time. Cleaning up is recommended because I changed the name of some DLLs to avoid some confusion (between the WPF3.5 and WPF4 version, as well as between the SL3 and SL4 versions). More details in the section titled “Compatibility”.&lt;/p&gt;  &lt;h1&gt;Installation&lt;/h1&gt;  &lt;p&gt;Installing MVVM Light toolkit is the manual process of unzipping a few files. &lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;The installation page&lt;/a&gt; has been updated to reflect the newest information.&lt;/p&gt;  &lt;h1&gt;Compatibility&lt;/h1&gt;  &lt;p&gt;MVVM Light toolkit V3 has components for the following environments and frameworks:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Visual Studio 2008:      &lt;ul&gt;       &lt;li&gt;Silverlight 3 &lt;/li&gt;        &lt;li&gt;Windows Presentation Foundation 3.5 SP1 &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Expression Blend 3      &lt;ul&gt;       &lt;li&gt;Silverlight 3 &lt;/li&gt;        &lt;li&gt;Windows Presentation Foundation 3.5 SP1 &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Visual Studio 2010 RC      &lt;ul&gt;       &lt;li&gt;Silverlight 3 &lt;/li&gt;        &lt;li&gt;Silverlight 4 &lt;/li&gt;        &lt;li&gt;Windows Presentation Foundation 3.5 SP1 &lt;/li&gt;        &lt;li&gt;Windows Presentation Foundation 4 &lt;/li&gt;        &lt;li&gt;Silverlight for Windows Phone 7 series &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Expression Blend 4 beta      &lt;ul&gt;       &lt;li&gt;Silverlight 3 &lt;/li&gt;        &lt;li&gt;Silverlight 4 &lt;/li&gt;        &lt;li&gt;Windows Presentation Foundation 3.5 SP1 &lt;/li&gt;        &lt;li&gt;Windows Presentation Foundation 4 &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Feedback&lt;/h2&gt;  &lt;p&gt;As usual I welcome your constructive feedback. If you want the issue to be discussed in public, the best way is through the discussion page &lt;a href="http://mvvmlight.codeplex.com"&gt;on the Codeplex site&lt;/a&gt;. if you wish to keep the conversation private, please &lt;a href="http://www.galasoft.ch/contact"&gt;check my Contact page&lt;/a&gt; for ways to talk to me.&lt;/p&gt;  &lt;h1&gt;Video, tutorials&lt;/h1&gt;  &lt;p&gt;There are a few new videos and tutorials available for the MVVM Light toolkit. The material is listed on the &lt;a href="http://www.galasoft.ch/mvvm/getstarted#tutorials"&gt;Get Started page, under “tutorials”.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138556"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138556" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/138556.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Wed, 05 May 2010 08:38:15 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100505083815A</guid></item><item><title>Updated Wiki: Home</title><link>http://mvvmlight.codeplex.com/wikipage?version=8</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Project Description&lt;/h1&gt;The MVVM Light Toolkit is a set of components helping people to get started in the Model - View - ViewModel pattern in Silverlight and WPF. It is a light and pragmatic framework that contains only the essential components needed.&lt;br /&gt;
&lt;h1&gt;Get started&lt;/h1&gt;More information about the MVVM Light Toolkit can be found on &lt;a href="http://www.galasoft.ch/mvvm/getstarted" class="externalLink"&gt;http://www.galasoft.ch/mvvm/getstarted&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Donate&lt;/h1&gt;If you are so enclined, you can donate to the MVVM Light project:&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;Latest news:&lt;/h1&gt;&lt;div class="rss"&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/04/03/mvvm-light-toolkit-v3-sp1-for-windows-phone-7.aspx"&gt;MVVM Light Toolkit V3 SP1 for Windows Phone 7&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sonntag, 4. April 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;He he I start to sound like Microsoft… Anyway… I just &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;released a service pack (SP1)&lt;/a&gt; for MVVM Light Toolkit V3.&lt;/p&gt;  &lt;h2&gt;Why?&lt;/h2&gt;  &lt;p&gt;Well mostly because I worked a bit more with the Windows Phone 7 tools that were released at MIX0, and I noticed a few things that could be better in the Windows Phone 7 template. Also, I only found out at MIX that you can actually install custom project templates for Visual Studio Express. For some reason I thought it was not possible.&lt;/p&gt;  &lt;p&gt;The best way to solve these issues is through a service pack, which consists of a few zip files. Simply follow the instructions on the “Installing Manually” page. You can go ahead and overwrite the files that were installed with V3, all the file structure and names are exactly the same.&lt;/p&gt;  &lt;h2&gt;What?&lt;/h2&gt;  &lt;p&gt;So what do you get in this service pack that was not already in V3? (for more info about what’s new in V3, check the What’s New page).&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Project and Item templates for &lt;strong&gt;Visual Studio 10 Express (phone edition)&lt;/strong&gt;. Unzip these files in your “My Documents” folder, and you can now create a new MVVM Light application in the WinPhone7 version of Visual Studio 2010 Express. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Signed assemblies&lt;/strong&gt;: All the assemblies are now signed, which is a requirement in certain build configurations. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;XML documentation files&lt;/strong&gt;: Thanks to Matt Casto for pinging me and reminding me that I had forgotten to include them (doh). &lt;/li&gt;    &lt;li&gt;New and improved &lt;strong&gt;Windows Phone 7 assemblies and templates&lt;/strong&gt;: This one deserves its own section (see below). &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;What was wrong with the old Silverlight 3 assemblies in Windows Phone 7 projects?&lt;/h2&gt;  &lt;p&gt;It was kind of weird. Functionality wise, it was working just right. However, if you noticed, the EventToCommand behavior was not visible in the Assets tab of Expression Blend, under Behaviors, where it should normally have been.&lt;/p&gt;  &lt;p&gt;The reason was that even though the Windows Phone 7 is using Silverlight 3, the System.Windows.Interactivity that Blend was expecting is the version that is normally used in Silverlight 4. Yeah, I know, it’s weird.&lt;/p&gt;  &lt;p&gt;This led me to create a specific version of these assemblies for the phone. The assemblies are located into &lt;strong&gt;C:\Program Files\Laurent Bugnion (GalaSoft)\Mvvm Light Toolkit\Binaries\WP7&lt;/strong&gt;. There are 3 DLLs:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;GalaSoft.MvvmLight.WP7.dll with RelayCommand, Messenger and ViewModelBase &lt;/li&gt;    &lt;li&gt;GalaSoft.MvvmLight.Extras.WP7.dll with EventToCommand and DispatcherHelper &lt;/li&gt;    &lt;li&gt;System.Windows.Interactivity.dll which is the same DLL installed in the Blend SDK, and which is needed for the EventToCommand behavior to work. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Happy coding!&lt;/h2&gt;  &lt;p&gt;That’s all! Download and install the service pack according to the instructions on the Installation page, and create your first MVVM Light application for the phone (a blog post will follow later with more details).&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139077"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139077" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139077.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/04/02/sample-code-and-slides-for-my-techdays10-belgium-talks.aspx"&gt;Sample code and slides for my TechDays10 (Belgium) talks&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Freitag, 2. April 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;The &lt;a href="http://www.galasoft.ch/blogs-all/Resources/MIX10/MIX10-MVVM-Samples.zip"&gt;source code for my MVVM talk&lt;/a&gt; titled “Understanding the MVVM Pattern” given at TechDays 2010 in Antwerpen, Belgium, is available online. It is actually the same code than the MIX10 one, but I added the Windows Phone 7 MVVM Light application (available in the folder titled “Mix10.MvvmDemo2-End”.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; before unpacking the zip file, you should right click on it, and select properties / Unblock.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I also published the slides for my two talks:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.slideshare.net/lbugnion/understanding-the-mvvm-pattern-techdays-belgium"&gt;Understanding the MVVM Pattern&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.slideshare.net/lbugnion/a-day-in-the-life-of-a-wpfsl-integrator"&gt;A day in the life of a WPF/SL integrator&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As far as I know, the videos will be online soon, stay tuned and I will announce when it is the case.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Get Started page for the MVVM Light Toolkit&lt;/strong&gt;: &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;http://www.galasoft.ch/mvvm/getstarted&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139062"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=139062" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/139062.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/03/16/sample-code-for-my-mix10-talk-online.aspx"&gt;Sample code for my #mix10 talk online&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Dienstag, 16. März 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;I just saw that the video for my MIX10 session is online already! Impressive work, MIX10 team. I also published the sample code on my web server, so here are the links:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://ecn.channel9.msdn.com/o9/mix/10/pptx/EX14.pptx"&gt;Powerpoint slides&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://live.visitmix.com/MIX10/Sessions/EX14"&gt;Video&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.MvvmDemo1Start.zip"&gt;MVVM Demo 1 (start)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.MvvmDemo1End.zip"&gt;MVVM Demo 1 (final)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.Command.zip"&gt;Command sample&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.RelayCommandSample.zip"&gt;RelayCommand sample&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.Messaging.zip"&gt;Messaging sample&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.MvvmDemo2Start.zip"&gt;MVVM Demo 2 (start)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/blogs-all/resources/MIX10/Mix10.MvvmDemo2End.zip"&gt;MVVM Demo 2 (final)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit Version 3&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;It was a real pleasure and an amazing experience to have this talk and to get all the great feedback! Thanks all for coming, and as usual don’t hesitate to send your feedback!&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138561"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138561" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/138561.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/03/16/whatrsquos-new-in-mvvm-light-v3.aspx"&gt;What&amp;rsquo;s new in MVVM Light V3&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Dienstag, 16. März 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;V3 of the MVVM Light Toolkit was released during MIX10, after quite a long alpha stage. This post lists the new features in MVVM Light V3.&lt;/p&gt;  &lt;h2&gt;Compatibility&lt;/h2&gt;  &lt;p&gt;MVVM Light Toolkit V3 can be installed for the following tools and framework versions:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Visual Studio 2008 SP1, Expression Blend 3      &lt;ul&gt;       &lt;li&gt;Windows Presentation Foundation 3.5 SP1 &lt;/li&gt;        &lt;li&gt;Silverlight 3 &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Visual Studio 2010 RC, Expression Blend 4 beta      &lt;ul&gt;       &lt;li&gt;Windows Presentation Foundation 3.5 SP1 &lt;/li&gt;        &lt;li&gt;Windows Presentation Foundation 4 RC &lt;/li&gt;        &lt;li&gt;Silverlight 3 &lt;/li&gt;        &lt;li&gt;Silverlight 4 RC &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;For more information about installing the MVVM Light Toolkit V3, &lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;please visit this page&lt;/a&gt;. For cleaning up existing installation, &lt;a href="http://www.galasoft.ch/mvvm/cleaning/"&gt;see this page&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;New in V3 RTM&lt;/h2&gt;  &lt;p&gt;The following features have been added &lt;strong&gt;after&lt;/strong&gt; V3 alpha3:&lt;/p&gt;  &lt;h3&gt;Project template for the Windows Phone 7 series (Silverlight)&lt;/h3&gt;  &lt;p&gt;This new template allows you to create a new MVVM Light application in Visual Studio 2010 RC and to run it in the Windows Phone 7 series emulator. This template uses the Silverlight 3 version of the MVVM Light Toolkit V3. At this time, only the essentials features of the GalaSoft.MvvmLight.dll assembly are supported on the phone.&lt;/p&gt;  &lt;h2&gt;New in V3 alpha3&lt;/h2&gt;  &lt;p&gt;The following features have been added &lt;strong&gt;after&lt;/strong&gt; V3 alpha2:&lt;/p&gt;  &lt;h3&gt;New logo&lt;/h3&gt;  &lt;p&gt;An awesome logo has been designed for MVVM Light by Philippe Schutz.&lt;/p&gt;  &lt;h3&gt;DispatcherHelper class (in GalaSoft.MvvmLight.Extras.dll)&lt;/h3&gt;  &lt;p&gt;This class is useful when you work on multi-threaded WPF or Silverlight applications.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Initializing:&lt;/strong&gt; The DispatcherHelper class must be initialized in the UI thread. For example, you can initialize the class in a Silverlight application’s Application_Startup event handler, or in the WPF application’s static App constructor (in App.xaml).&lt;/p&gt;  &lt;pre class="csharp" name="code"&gt;// Initializing in Silverlight (in App.xaml)&lt;br /&gt;&lt;br /&gt;private void Application_Startup(&lt;br /&gt;    object sender,&lt;br /&gt;    StartupEventArgs e)&lt;br /&gt;{&lt;br /&gt;    RootVisual = new MainPage();&lt;br /&gt;    DispatcherHelper.Initialize();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Initializing in WPF (in App.xaml)&lt;br /&gt;&lt;br /&gt;static App()&lt;br /&gt;{&lt;br /&gt;    DispatcherHelper.Initialize();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Verifying if a property exists&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The ViewModelBase.RaisePropertyChanged method now checks if a given property name exists on the ViewModel class, and throws an exception if that property cannot be found. This is useful to detect typos in a property name, for example during a refactoring. Note that the check is only done in DEBUG mode.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Replacing IDisposable with ICleanup&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The IDisposable implementation in the ViewModelBase class has been marked obsolete. Instead, the ICleanup interface (and its Cleanup method) has been added. Implementing IDisposable in a ViewModel is still possible, but must be done explicitly. IDisposable in ViewModelBase was a bad practice, because it supposes that the ViewModel is garbage collected after Dispose is called. instead, the Cleanup method does not have such expectation.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The ViewModelLocator class (created when an MVVM Light project template is used in Visual Studio or Expression Blend) exposes a static Cleanup method, which should in turn call each ViewModel’s Cleanup method. The ViewModel is free to override the Cleanup method if local cleanup must be performed.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Passing EventArgs to command with EventToCommand&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The EventToCommand class is used to bind any event to an ICommand (typically on the ViewModel). In this case, it can be useful to pass the event’s EventArgs parameter to the command in the ViewModel. For example, for the MouseEnter event, you can pass the MouseEventArgs to a RelayCommand&amp;lt;MouseEventArgs&amp;gt; as shown in the next listings.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Note: Bringing UI specific classes (such as EventArgs) into the ViewModel reduces the testability of the ViewModel, and thus should be used with care.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Setting EventToCommand and PassEventArgsToCommand:&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;Grid x:Name="LayoutRoot"&amp;gt;&lt;br /&gt;    &amp;lt;i:Interaction.Triggers&amp;gt;&lt;br /&gt;        &amp;lt;i:EventTrigger EventName="MouseEnter"&amp;gt;&lt;br /&gt;            &amp;lt;cmd:EventToCommand Command="{Binding MyCommand}"&lt;br /&gt;                                PassEventArgsToCommand="True" /&amp;gt;&lt;br /&gt;        &amp;lt;/i:EventTrigger&amp;gt;&lt;br /&gt;    &amp;lt;/i:Interaction.Triggers&amp;gt;&lt;br /&gt;&amp;lt;/Grid&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Getting the EventArgs in the command&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public RelayCommand&amp;lt;MouseEventArgs&amp;gt; MyCommand&lt;br /&gt;{&lt;br /&gt;    get;&lt;br /&gt;    private set;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public MainViewModel()&lt;br /&gt;{&lt;br /&gt;    MyCommand = new RelayCommand&amp;lt;MouseEventArgs&amp;gt;(e =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        // e is of type MouseEventArgs&lt;br /&gt;    });&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Changes to templates&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Various changes have been made to project templates and item templates to make them more compatible with Silverlight 4 and to improve their visibility in Visual Studio and Expression Blend.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Bug corrections&lt;/h3&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;When a message is sent through the Messenger class using the method Messenger.Default.Send&amp;lt;T&amp;gt;(T message, object token), and the token is a simple value (for example int), the message was not sent correctly. This bug is now corrected. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;New in V3&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The following features have been added &lt;strong&gt;after&lt;/strong&gt; V2.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Sending messages with callback&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Certain classes have been added to the GalaSoft.MvvmLight.Messaging namespace, allowing sending a message and getting a callback from the recipient. These classes are:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;NotificationMessageWithCallback: Base class for messages with callback. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;NotificationMessageAction: A class with string notification, and a parameterless callback. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;NotificationMessageAction&amp;lt;T&amp;gt;: A class with string notification, and a callback with a parameter of type T. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;To send a message with callback, use the following code:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;var message = new NotificationMessageAction&amp;lt;bool&amp;gt;(&lt;br /&gt;    "Hello world",&lt;br /&gt;    callbackMessage =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        // This is the callback code&lt;br /&gt;        if (callbackMessage)&lt;br /&gt;        {&lt;br /&gt;            // ...&lt;br /&gt;        }&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;Messenger.Default.Send(message);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To register and receive a message with callback, use the following code:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;Messenger.Default.Register&amp;lt;NotificationMessageAction&amp;lt;bool&amp;gt;&amp;gt;(&lt;br /&gt;    this,&lt;br /&gt;    message =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        // Do something&lt;br /&gt;        &lt;br /&gt;        // Execute the callback&lt;br /&gt;        message.Execute(true);&lt;br /&gt;    });&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Messenger.Default can be overriden&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The Messenger.Default property can also be replaced, for example for unit testing purposes, by using the Messenger.OverrideDefault method. All the public methods of the Messenger class have been made virtual, and can be overridden in the test messenger class.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;&lt;/h3&gt;&lt;br /&gt;
&lt;h3&gt;Sending messages to interfaces&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In V2, it was possible to deliver messages targeted to instances of a given class. in V3 it is still possible, but in addition you can deliver a message to instances that implement a certain interface. The message will not be delivered to other recipients.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Use the overload Messenger.Default.Send&amp;lt;TMessage, TTarget&amp;gt;(TMessage message) where TTarget is, in fact, an interface (for example IDisposable). Of course the recipient must register to receive the type of message TMessage.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Sending messages with a token&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Messages can now be sent through the Messenger with a token.&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;To send a message with token, use the method overload Send&amp;lt;TMessage&amp;gt;(TMessage message, object token). &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;To receive a message with token, use the methods Register&amp;lt;TMessage&amp;gt;(object recipient, object token, Action&amp;lt;TMessage&amp;gt; action) or Register&amp;lt;TMessage&amp;gt;(object recipient, object token, bool receiveDerivedMessagesToo, Action&amp;lt;TMessage&amp;gt; action) &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;The token can be a simple value (int, string, etc…) or an instance of a class. The message is not delivered to recipients who registered with a different token, or with no token at all.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Renaming CommandMessage to NotificationMessage&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To avoid confusion with ICommand and RelayCommand, the CommandMessage class has been renamed to NotificationMessage. This message class can be used to deliver a notification (of type string) to a recipient.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;ViewModelBase constructor with IMessenger&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The ViewModelBase class now accepts an IMessenger parameter. If this constructor is used instead of the default empty constructor, the IMessenger passed as parameter will be used to broadcast a PropertyChangedMessage when the method RaisePropertyChanged&amp;lt;T&amp;gt;(string propertyName, T oldValue, T newValue, bool broadcast) is used.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the default ViewModelBase constructor is used, the Messenger.Default instance will be used instead.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;EventToCommand behavior&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The EventToCommand behavior has been added in V3. It can be used to bind any event of any FrameworkElement to any ICommand (for example a RelayCommand located in the ViewModel). More information about the EventToCommand behavior can be found &lt;a href="http://blog.galasoft.ch/archive/2009/11/05/mvvm-light-toolkit-v3-alpha-2-eventtocommand-behavior.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://blog.galasoft.ch/archive/2009/12/17/silverlight-4-dragampdrop-with-eventtocommand.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Updated the project templates to remove the sample application&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The project template has been updated to remove the sample application that was created every time that a new MVVM Light application was created in Visual Studio or Blend. This makes the creation of a new application easier, because you don’t need to remove code before you can start writing code.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Bug corrections&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Some bugs that were in Version 2 have been corrected:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;In some occasions, an exception could be thrown when a recipient was registered for a message at the same time as a message was received. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;New names for DLLs&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;If you upgrade an existing installation, you will need to change the reference to the DLLs in C:\Program Files\Laurent Bugnion (GalaSoft)\Mvvm Light Toolkit\Binaries. The assemblies have been moved, and the versions for Silverlight 4 and for WPF4 have been renamed, to avoid some confusion. It is now easier to make sure that you are using the correct DLL.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;WPF3.5SP1, Silverlight 3&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;When using the DLLs, make sure that you use the correct versions.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="DLLs for Silverlight 3" href="http://www.flickr.com/photos/36917929@N06/4433510284"&gt;&lt;img src="http://farm3.static.flickr.com/2715/4433510284_c49cf68ff6.jpg" width="500" height="329" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="DLLs for WPF 3.5 SP1" href="http://www.flickr.com/photos/36917929@N06/4433511944"&gt;&lt;img src="http://farm5.static.flickr.com/4003/4433511944_e2b18073e0.jpg" width="500" height="329" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;WPF4, Silverlight 4&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;When using the DLLs, make sure that you use the correct versions.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="DLLs for Silverlight 4" href="http://www.flickr.com/photos/36917929@N06/4432738407"&gt;&lt;img src="http://farm3.static.flickr.com/2763/4432738407_dc6ca4a537.jpg" width="500" height="329" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="DLL2 for WPF 4" href="http://www.flickr.com/photos/36917929@N06/4433514364"&gt;&lt;img src="http://farm5.static.flickr.com/4032/4433514364_9ab5031c83.jpg" width="500" height="329" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138557"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138557" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/138557.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/03/16/mvvm-light-v3-released-at-mix10.aspx"&gt;MVVM Light V3 released at #MIX10&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Dienstag, 16. März 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;&lt;a title="MVVM_White" href="http://www.flickr.com/photos/36917929@N06/4084208308/"&gt;&lt;img border="0" alt="MVVM_White" src="http://farm3.static.flickr.com/2706/4084208308_2fb7a14111_m.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;During my session “&lt;a href="http://live.visitmix.com/MIX10/Sessions/EX14"&gt;Understanding the MVVM pattern&lt;/a&gt;” at MIX10 in Vegas, I showed some components of the MVVM Light toolkit V3, which gave me the occasion to announce the release of version 3. This version has been in alpha stage for a while, and has been tested by many users. it is very stable, and ready for a release. So here we go!&lt;/p&gt;  &lt;h1&gt;&lt;/h1&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h1&gt;What’s new&lt;/h1&gt;  &lt;p&gt;What’s new in MVVM Light Toolkit V3 is the topic of the next post.&lt;/p&gt;  &lt;h1&gt;Cleaning up&lt;/h1&gt;  &lt;p&gt;I would recommend cleaning up older versions before installing V3. I prepared a page &lt;a href="http://www.galasoft.ch/mvvm/cleaning"&gt;explaining how to do that manually&lt;/a&gt;. Unfortunately I didn’t have time to create an automatic cleaner/installer, this is very high on my list but with the book and the conferences going on, it will take a little more time. Cleaning up is recommended because I changed the name of some DLLs to avoid some confusion (between the WPF3.5 and WPF4 version, as well as between the SL3 and SL4 versions). More details in the section titled “Compatibility”.&lt;/p&gt;  &lt;h1&gt;Installation&lt;/h1&gt;  &lt;p&gt;Installing MVVM Light toolkit is the manual process of unzipping a few files. &lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;The installation page&lt;/a&gt; has been updated to reflect the newest information.&lt;/p&gt;  &lt;h1&gt;Compatibility&lt;/h1&gt;  &lt;p&gt;MVVM Light toolkit V3 has components for the following environments and frameworks:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Visual Studio 2008:      &lt;ul&gt;       &lt;li&gt;Silverlight 3 &lt;/li&gt;        &lt;li&gt;Windows Presentation Foundation 3.5 SP1 &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Expression Blend 3      &lt;ul&gt;       &lt;li&gt;Silverlight 3 &lt;/li&gt;        &lt;li&gt;Windows Presentation Foundation 3.5 SP1 &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Visual Studio 2010 RC      &lt;ul&gt;       &lt;li&gt;Silverlight 3 &lt;/li&gt;        &lt;li&gt;Silverlight 4 &lt;/li&gt;        &lt;li&gt;Windows Presentation Foundation 3.5 SP1 &lt;/li&gt;        &lt;li&gt;Windows Presentation Foundation 4 &lt;/li&gt;        &lt;li&gt;Silverlight for Windows Phone 7 series &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Expression Blend 4 beta      &lt;ul&gt;       &lt;li&gt;Silverlight 3 &lt;/li&gt;        &lt;li&gt;Silverlight 4 &lt;/li&gt;        &lt;li&gt;Windows Presentation Foundation 3.5 SP1 &lt;/li&gt;        &lt;li&gt;Windows Presentation Foundation 4 &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Feedback&lt;/h2&gt;  &lt;p&gt;As usual I welcome your constructive feedback. If you want the issue to be discussed in public, the best way is through the discussion page &lt;a href="http://mvvmlight.codeplex.com"&gt;on the Codeplex site&lt;/a&gt;. if you wish to keep the conversation private, please &lt;a href="http://www.galasoft.ch/contact"&gt;check my Contact page&lt;/a&gt; for ways to talk to me.&lt;/p&gt;  &lt;h1&gt;Video, tutorials&lt;/h1&gt;  &lt;p&gt;There are a few new videos and tutorials available for the MVVM Light toolkit. The material is listed on the &lt;a href="http://www.galasoft.ch/mvvm/getstarted#tutorials"&gt;Get Started page, under “tutorials”.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138556"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138556" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/138556.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/03/10/my-program-at-mix10.aspx"&gt;My program at #MIX10&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Mittwoch, 10. März 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;&lt;a href="http://live.visitmix.com/MIX10/Sessions/EX14"&gt;&lt;img style="margin: 0px 10px 0px 0px; display: inline" alt="MIX10Speaker" align="left" src="http://farm5.static.flickr.com/4031/4422274969_f62ba098fe_o.jpg" width="154" height="151" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Getting ready to fly to Vegas and MIX10 is really an exciting time! It is also a very busy time, because we are working on a few projects that will be shown on stage, I have my presentation to prepare, and of course as always the book… though these days it has been a bit on the back burner to be honest ;)&lt;/p&gt;  &lt;p&gt;I arrive in Vegas on Sunday evening around 10PM, so I won’t be able to make it to the traditional IdentityMine dinner this year. I am sure it will be fun nonetheless!&lt;/p&gt;  &lt;h1&gt;My session: Understanding the MVVM pattern&lt;/h1&gt;  &lt;p&gt;&lt;a title="http://live.visitmix.com/MIX10/Sessions/EX14" href="http://live.visitmix.com/MIX10/Sessions/EX14"&gt;http://live.visitmix.com/MIX10/Sessions/EX14&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;My session is scheduled on the first day, which is awesome, so I am crossing my fingers and hoping that the MIX team doesn’t change it at the last minute… The session will take place on&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Monday, the 15th of March, 2PM, Room Lagoon F&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Important: &lt;/strong&gt;remember that the USA are moving to Summer time on Sunday, so don’t forget to adjust your watches!!&lt;/p&gt;  &lt;h1&gt;Ask the Experts&lt;/h1&gt;  &lt;p&gt;On Monday evening, I will attend the Ask the Experts event, which is taking place between 5Pm and 6:30PM in the main meal hall. This will be a great occasion to grab a beer and talk about code.&lt;/p&gt;  &lt;h1&gt;The Commons&lt;/h1&gt;  &lt;p&gt;MIX has a great place called the Commons, a great location to chill between sessions, and meet tons of interesting people. I love the Commons and plan to spend a lot of time there to meet as many people as I can.&lt;/p&gt;  &lt;h1&gt;Parties&lt;/h1&gt;  &lt;p&gt;I was invited to a few parties, and will do my best to avoid conflicts :) I plan to be at the following events:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Silverlight Mixers on Monday evening &lt;/li&gt;    &lt;li&gt;Insiders MIX party on Tuesday &lt;/li&gt;    &lt;li&gt;Silverlight partner happy hour on Tuesday too &lt;/li&gt; &lt;/ul&gt; This is a lot of fun, but at the same time we all know that the best value of a conference is to meet people face to face. This is just the right occasion.  &lt;h1&gt;And on Thursday…&lt;/h1&gt;  &lt;p&gt;On Thursday I will be attending a Silverlight event at the Luxor. It will be a very busy day, perfect way to end the conference. I fly back home on Friday morning, but due to a long stop in Washington DC (where I intend to go downtown and take pictures… except if the weather is bad, in which case I will probably go to the museum of flight), I will reach home only on Sunday.&lt;/p&gt;  &lt;h1&gt;Getting hold of me&lt;/h1&gt;  &lt;p&gt;The best way to reach me during MIX is to &lt;a href="http://www.twitter.com/lbugnion"&gt;send me a message on Twitter&lt;/a&gt;. I will regularly tweet my location at the conference, so make sure to come and meet me. I am eager to make new friends, to talk about the fantastic jobs we did in WPF and Silverlight over the past year and hear your war stories!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.twitter.com/lbugnion"&gt;http://www.twitter.com/lbugnion&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138433"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138433" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/138433.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/03/04/schedule-for-my-session-at-mix10.aspx"&gt;Schedule for my session at MIX10&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Freitag, 5. März 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Microsoft has published the schedule for the MIX10 sessions. I have a sweet spot, and I dearly hope that it stays this way (Last year I had a great spot, but it was changed last minute and then I had a much better one, “competing” against Vertigo and their Playboy app… yeah try to explain to a bunch of geeks that MVVM is better than Playboy… good luck with that ;) Anyway, this year my sweet spot is on the very first day of the conference (there are workshops on Sunday, but this qualifies as pre-conference), Monday after the keynote which should get everyone pumped and excited.&lt;/p&gt;  &lt;h1&gt;Schedule and location&lt;/h1&gt;  &lt;p&gt;I would be really happy to meet y’all at&lt;/p&gt;  &lt;div class="frame"&gt;   &lt;p&gt;&lt;a href="http://live.visitmix.com/MIX10/Sessions/EX14"&gt;Understanding the Model-View-ViewModel Pattern&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;in Lagoon F on Monday at 2:00 PM&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://live.visitmix.com/MIX10/Sessions/EX14"&gt;http://live.visitmix.com/MIX10/Sessions/EX14&lt;/a&gt;&lt;/p&gt; &lt;/div&gt;  &lt;h1&gt;&lt;/h1&gt;  &lt;h1&gt;See you in Vegas (or in video…)&lt;/h1&gt;  &lt;p&gt;Everything I saw so far hints that this should be a very, very exciting edition of MIX, maybe the most electrifying ever. The great news is that everything will be available even if you cannot make it: The keynotes are typically streamed live, and if you remember last year’s experience at PDC, it is a really good alternative. Built with Silverlight, the feed uses smooth streaming (adjusting the quality according to your bandwidth automatically), possibility to pause and rewind if you miss something, and a great picture quality. As for the sessions, the message at MIX is that the videos will be available online approximately 24 hours after the session is being held. This is a great feat!&lt;/p&gt;  &lt;p&gt;So, see you in Vegas (or in video)!&lt;/p&gt;  &lt;p&gt;Cheers,&lt;/p&gt;  &lt;p&gt;Laurent&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138350"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=138350" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/138350.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/01/21/the-mvvm-landscape-at-mix10.aspx"&gt;The MVVM landscape at MIX10&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Donnerstag, 21. Januar 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;The MIX conference this year had an open call for sessions, and 12 sessions were voted by the public out of 169. Surprisingly (or maybe not that surprisingly in fact), 3 sessions out of the 12 have the MVVM pattern in their title. This shows a lot of interest for this pattern which is helping the developer to create decoupled, testable, blendable applications in Silverlight and in WPF.&lt;/p&gt;  &lt;p&gt;Since my session is one of the three, I decided to contact the other two speakers (we happen to run in the same circles ;)) and try to coordinate the content. I think that by talking to each other, we can organize our content so that we avoid overlap and offer a wider landscape to the audience.&lt;/p&gt;  &lt;p&gt;The two other authors responded positively to my request, and this is roughly how it will look like. Of course some overlap is unavoidable, to set the context right and avoid misunderstandings. After all, MVVM is a pattern, and as such there are multiple possible implementations or even interpretations of the pattern. But I think that this way, you will get a wider, deeper overview of what MVVM has to offer for you today.&lt;/p&gt;  &lt;h2&gt;Rob Eisenberg’s “Build Your Own MVVM Framework”&lt;/h2&gt;  &lt;p&gt;Rob is coordinator on the Caliburn project (a very powerful MVVM framework), but this is not a Caliburn talk. Instead, Rob will take some of the features of this framework and demonstrate how to build them from scratch. This should be a must see for the people who want to understand what is involved in a MVVM application, and how to avoid taking a dependency on an external framework. Rob will also talk about additional topics not directly related to MVVM.&lt;/p&gt;  &lt;h2&gt;Shawn Wildermuth’s “RIA Services and MVVM: It Can Happen!”&lt;/h2&gt;  &lt;p&gt;Shawn is going to set the focus on MVVM applied to RIA Services applications. He will show you all the code, and then how external frameworks can help you in your task.&lt;/p&gt;  &lt;h2&gt;Laurent Bugnion’s “Understanding the Model-View-ViewModel Pattern”&lt;/h2&gt;  &lt;p&gt;In this talk, I will set primary focus on the Blendability, i.e. how to structure your application so that it works great in Expression Blend. For instance, how can you display “design time data” in Expression Blend, so that the designers have something to design against. I will also show some components included in my MVVM Light Toolkit and explain how they can help you solve some issues in your applications. My talk will apply to Windows Presentation Foundation as well as Silverlight.&lt;/p&gt;  &lt;h2&gt;To be noted&lt;/h2&gt;  &lt;p&gt;It is nice to note that Rob, Shawn and I are not employed by Microsoft, but “just” enthusiast users of the technologies we will talk about. There is a great community around Silverlight and WPF, and it is interesting to note that most of the MVVM frameworks (at the exception of PRISM which is not directly an MVVM framework) originate from outside of Microsoft. Let’s spread the word: MVVM is the pattern of choice when you work in WPF or Silverlight. Come visit our sessions, your life as a developer will be changed!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137570"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137570" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/137570.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Fri, 09 Apr 2010 12:19:09 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100409121909P</guid></item><item><title>Updated Wiki: Home</title><link>http://mvvmlight.codeplex.com/wikipage?version=7</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;The MVVM Light Toolkit is a set of components helping people to get started in the Model - View - ViewModel pattern in Silverlight and WPF. It is a light and pragmatic framework that contains only the essential components needed.&lt;br /&gt;&lt;br /&gt;More information about the MVVM Light Toolkit can be found on &lt;a href="http://www.galasoft.ch/mvvm/getstarted" class="externalLink"&gt;http://www.galasoft.ch/mvvm/getstarted&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="rss"&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/01/21/the-mvvm-landscape-at-mix10.aspx"&gt;The MVVM landscape at MIX10&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Donnerstag, 21. Januar 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;The MIX conference this year had an open call for sessions, and 12 sessions were voted by the public out of 169. Surprisingly (or maybe not that surprisingly in fact), 3 sessions out of the 12 have the MVVM pattern in their title. This shows a lot of interest for this pattern which is helping the developer to create decoupled, testable, blendable applications in Silverlight and in WPF.&lt;/p&gt;  &lt;p&gt;Since my session is one of the three, I decided to contact the other two speakers (we happen to run in the same circles ;)) and try to coordinate the content. I think that by talking to each other, we can organize our content so that we avoid overlap and offer a wider landscape to the audience.&lt;/p&gt;  &lt;p&gt;The two other authors responded positively to my request, and this is roughly how it will look like. Of course some overlap is unavoidable, to set the context right and avoid misunderstandings. After all, MVVM is a pattern, and as such there are multiple possible implementations or even interpretations of the pattern. But I think that this way, you will get a wider, deeper overview of what MVVM has to offer for you today.&lt;/p&gt;  &lt;h2&gt;Rob Eisenberg’s “Build Your Own MVVM Framework”&lt;/h2&gt;  &lt;p&gt;Rob is coordinator on the Caliburn project (a very powerful MVVM framework), but this is not a Caliburn talk. Instead, Rob will take some of the features of this framework and demonstrate how to build them from scratch. This should be a must see for the people who want to understand what is involved in a MVVM application, and how to avoid taking a dependency on an external framework. Rob will also talk about additional topics not directly related to MVVM.&lt;/p&gt;  &lt;h2&gt;Shawn Wildermuth’s “RIA Services and MVVM: It Can Happen!”&lt;/h2&gt;  &lt;p&gt;Shawn is going to set the focus on MVVM applied to RIA Services applications. He will show you all the code, and then how external frameworks can help you in your task.&lt;/p&gt;  &lt;h2&gt;Laurent Bugnion’s “Understanding the Model-View-ViewModel Pattern”&lt;/h2&gt;  &lt;p&gt;In this talk, I will set primary focus on the Blendability, i.e. how to structure your application so that it works great in Expression Blend. For instance, how can you display “design time data” in Expression Blend, so that the designers have something to design against. I will also show some components included in my MVVM Light Toolkit and explain how they can help you solve some issues in your applications. My talk will apply to Windows Presentation Foundation as well as Silverlight.&lt;/p&gt;  &lt;h2&gt;To be noted&lt;/h2&gt;  &lt;p&gt;It is nice to note that Rob, Shawn and I are not employed by Microsoft, but “just” enthusiast users of the technologies we will talk about. There is a great community around Silverlight and WPF, and it is interesting to note that most of the MVVM frameworks (at the exception of PRISM which is not directly an MVVM framework) originate from outside of Microsoft. Let’s spread the word: MVVM is the pattern of choice when you work in WPF or Silverlight. Come visit our sessions, your life as a developer will be changed!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137570"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137570" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/137570.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/01/19/talking-in-las-vegas-mix2010-and-mvvm.aspx"&gt;Talking in Las Vegas: MIX2010 and MVVM&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Dienstag, 19. Januar 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;&lt;a href="http://live.visitmix.com/Sessions"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="MIX10: Speaker" border="0" alt="MIX10: Speaker" align="left" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/WindowsLiveWriter/TalkinginLasVegasMIX2010andMVVM_B09F/o_MIX10Speaker%5B1%5D_3.jpg" width="154" height="151" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This morning, very early (or very late depending how you see it), I learned that one of the sessions &lt;a href="http://blog.galasoft.ch/archive/2010/01/05/mix-2010-voting-for-sessions-has-begun-i-got-two.aspx"&gt;I submitted to the MIX 2010&lt;/a&gt; open call for speakers had been picked by the public. Out of 169 sessions, only 12 were picked, so you imagine my feelings right now. Honestly, I am sure that this will be a good session, but it could have gone either way, and I had prepared myself mentally for the alternative possibility too.&lt;/p&gt;  &lt;h2&gt;Understanding the Model-View-ViewModel pattern&lt;/h2&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;The Model-View-ViewModel pattern (also called MVVM) is a hot topic in today’s Silverlight and WPF world. This pattern facilitates modern development techniques such as separation of concerns (decoupling), unit testing and test driven development, work with modern tools such as Visual Studio 2010, Expression Blend and more.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;In this session, Laurent (a user and promoter of MVVM since 2006) will introduce this pattern to you with many demos. We will talk about the basic components of a modern Silverlight or WPF application, and of additional helpers that will make your life as a developer much easier.&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;MVVM at MIX&lt;/h2&gt;  &lt;p&gt;Interestingly, 3 of the 12 open call sessions picked by the audience have “MVVM” in the title. Rob Eisenberg’s “Build Your Own MVVM Framework” and Shawn Wildermuth’s “RIA Services and MVVM: It Can Happen!”, in addition to mine, should cover the topic in depth. After thinking about it, I decided I will contact Rob and Shawn to talk to them about their session, and try to avoid overlap.&lt;/p&gt;  &lt;p&gt;On my end, I will probably shift the focus a little more on what MVM brings you from a designer (well, integrator)’s point of view, and how you can leverage this pattern to create beautiful applications. I will also, of course, talk about the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit&lt;/a&gt;, the open source toolkit I have been developing since last year, and which encounters a great success.&lt;/p&gt;  &lt;h2&gt;Send me your suggestions&lt;/h2&gt;  &lt;p&gt;I would love to hear if you have topics you would like to hear about during the session. I have a pretty good idea of what I will talk about, but let me know what is really important for you. What aspects of MVVM do you want me to focus on? What components of MVVM Light? Let me know, and I will adapt the content to include these topics!&lt;/p&gt;  &lt;p&gt;I am very much looking forward to this session, and will see you in March at MIX!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137541"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137541" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/137541.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/01/05/mix-2010-voting-for-sessions-has-begun-i-got-two.aspx"&gt;MIX 2010: Voting for sessions has begun (I got two)&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Mittwoch, 6. Januar 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;img style="margin: 0px 10px 0px 0px" title="MIX10" alt="MIX10" src="http://farm3.static.flickr.com/2626/4249632198_e79f99b271_o.png" width="197" height="115" /&gt;   &lt;p&gt;This year Microsoft decided to have &lt;a href="http://live.visitmix.com/opencall"&gt;an open call for sessions&lt;/a&gt; for the MIX 2010 in Las Vegas. This conference, in case you don’t know it yet, is a great 3 days about modern client technologies, such as ASP.NET, Windows Presentation Foundation and of course Silverlight. This year, MIX is taking place from the 15th to the 17th of March 2010 in the Mandalay Bay hotel in Vegas.&lt;/p&gt;  &lt;p&gt;Today, the voting began! I didn’t count them, but there seems to be more than 100 sessions lined up, and the competition is fierce: Only 10 sessions will make the cut and be chosen for MIX. I just reviewed the speakers, and it is a pretty amazing line-up.&lt;/p&gt;  &lt;p&gt;On my end, I submitted two sessions (see below). I honestly think that these two sessions will help the attendees become better developers in Silverlight and in WPF. The talks are based on years of experience with these two technologies, on real life projects.&lt;/p&gt;  &lt;h2&gt;A day in the life of a Silverlight/WPF Integrator&lt;/h2&gt;  &lt;p&gt;Vote here: &lt;a title="http://visitmix.com/opencallvote/Entry?entryId=ADAYIN060" href="http://visitmix.com/opencallvote/Entry?entryId=ADAYIN060"&gt;http://visitmix.com/opencallvote/Entry?entryId=ADAYIN060&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Abstract:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;This session proposes an insight in the life of an integrator (sometimes called User Experience Developer or “Devigner”). How do we translate a creative designer’s vision into code, transforming it into interactive applications? What tools do we use, what tricks did we learn? This session will show you how to start from scratch and coordinate designers and developers to create a new rich application in Silverlight or Windows Presentation Foundation. We will see how to architect and structure the application according to the best practices in the field, and what workflows are involved. We will also see how to create and integrate XAML assets into the user interface. You will leave with a much better understanding on how the new integrator role is changing the way that client applications are developed.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;You want to create beautiful applications? That’s what I do for a living, come and share the experience!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Having worked as an integrator for quite a few years now, in large distributed teams of developers and designers, I have identified many areas where the process is different from a classic application. The integrator role is a fairly recent role and many firms need guidance to understand how to start developing their Silverlight or WPF applications, and how to move from wireframes to design to development to testing.&lt;/p&gt;  &lt;p&gt;We will also review the tools and the tips&amp;amp;tricks that make the life of an integrator easier. This is not just about Expression Blend, but about all the small helpers that facilitate the integration process. &lt;/p&gt;  &lt;h2&gt;Understanding the Model-View-ViewModel pattern&lt;/h2&gt;  &lt;p&gt;Vote here: &lt;a title="http://visitmix.com/opencallvote/Entry?entryId=UNDERS103" href="http://visitmix.com/opencallvote/Entry?entryId=UNDERS103"&gt;http://visitmix.com/opencallvote/Entry?entryId=UNDERS103&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Abstract: &lt;/p&gt;  &lt;p&gt;&lt;em&gt;The Model-View-ViewModel pattern (also called MVVM) is a hot topic in today’s Silverlight and WPF world. This pattern facilitates modern development techniques such as separation of concerns (decoupling), unit testing and test driven development, work with modern tools such as Visual Studio 2010, Expression Blend and more.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;In this session, Laurent (a user and promoter of MVVM since 2006) will introduce this pattern to you with many demos. We will talk about the basic components of a modern Silverlight or WPF application, and of additional helpers that will make your life as a developer much easier.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;From the maker of the MVVM Light Toolkit!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This talk is targeted at developers who keep hearing people talk about the Model-View-ViewModel pattern, but don’t quite know what it is, what it does, and how to get the best out of that. Again, few slides and a lot of code, as we will walk through the creation of a MVVM application and study the components that help separating the concerns in the application. We will also talk about external frameworks that help you creating new MVVM applications.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137356"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137356" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/137356.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/12/17/silverlight-4-dragampdrop-with-eventtocommand.aspx"&gt;Silverlight 4: Drag&amp;amp;drop with EventToCommand&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Donnerstag, 17. Dezember 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;One of the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit’s&lt;/a&gt; user &lt;a href="http://mvvmlight.codeplex.com/Thread/View.aspx?ThreadId=74835"&gt;requested that I add the possibility&lt;/a&gt; to pass the EventArgs of an event to the ICommand that it is bound to through &lt;a href="http://blog.galasoft.ch/archive/2009/11/05/mvvm-light-toolkit-v3-alpha-2-eventtocommand-behavior.aspx"&gt;the EventToCommand trigger&lt;/a&gt;. At first I was a bit reluctant because it seems like a transgression of the rule that says you should avoid to have too much knowledge about the UI layer in the ViewModel. For example, if you have a &lt;a href="http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx"&gt;RelayCommand in the ViewModel&lt;/a&gt; that expects a MouseEventArgs, it kinds of binds you to a certain kind of UI element, which is not super clean.&lt;/p&gt;  &lt;p&gt;That said, I also understand that in some cases it might be useful to get the EventArgs down in the ViewModel, which is why I decided to add this possibility (&lt;a href="http://blog.galasoft.ch/archive/2009/11/30/mvvm-light-toolkit-v3-alpha-3-for-wpf4sl4.aspx"&gt;available from V3/alpha 3&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;And in fact, as I was testing it, I just got another request from my good friend &lt;a href="http://weblogs.asp.net/lkempe/"&gt;Laurent Kempé&lt;/a&gt; (one of the early and enthusiastic users of MVVM Light) to help use EventToCommand in the case of a drag&amp;amp;drop operation in Silverlight 4. That was the perfect test case for this new feature.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Note: Laurent &lt;a href="http://www.techheadbrothers.com/Astuces.aspx/silverlight-4-beta-drop-target-mvvm"&gt;wrote a post in French&lt;/a&gt; describing a drag&amp;amp;drop implementation.&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;Resources&lt;/h2&gt;  &lt;p&gt;The &lt;a href="http://galasoft.ch/mvvm/resources/Samples/MvvmLightDragAndDrop.zip"&gt;source code for this sample&lt;/a&gt; is available here. The MVVM Light Toolkit’s DLLs are also included (V3/alpha3). This code is for Visual Studio 2010 beta 2 and/or Expression Blend Preview for Silverlight 4.&lt;/p&gt;  &lt;p&gt;You can optionally install the MVVM Light Toolkit V3/alpha3 from the &lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;Installing Manually page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;More info about the MVVM Light Toolkit is available on the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;Get Started page&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;Creating a drag&amp;amp;drop enabled Silverlight application&lt;/h2&gt;  &lt;p&gt;Let’s start by creating a new MVVM Light application in Silverlight 4. In the moment the process of installing the project templates is manual, but it should be easy enough &lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;if you follow these instructions&lt;/a&gt;.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You can create a new MVVM Light application for Silverlight 4 in Visual Studio 2010 or in Expression Blend Preview 4. Simply choose File, New Project and then select the template called MVVM Light (SL4). &lt;/li&gt; &lt;/ul&gt; &lt;a title="Creating a new MVVM Light application" href="http://www.flickr.com/photos/36917929@N06/4188680130"&gt;&lt;img src="http://farm3.static.flickr.com/2625/4188680130_36d3e8741b.jpg" width="500" height="339" /&gt;&lt;/a&gt;   &lt;p&gt;We need to define a drop target for the files in the application. This can be done for just any UI element, so you can choose the main Grid (if you want the whole application to be a drop target) or any other element. In our case, to keep things simple, let’s define the main Grid as the drop target.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Set the property &lt;strong&gt;AllowDrop&lt;/strong&gt; to True, either in XAML or in Blend. Also change the other properties as shown in XAML below.       &lt;br /&gt;&lt;em&gt;Note: We will implement the DroppedFileContent property in a moment.&lt;/em&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;pre class="brush: xml;"&gt;&amp;lt;Grid x:Name="LayoutRoot"&lt;br /&gt;      AllowDrop="True"&lt;br /&gt;      Background="#FF9F9F9F"&amp;gt;&lt;br /&gt;    &amp;lt;TextBlock FontSize="36"&lt;br /&gt;               FontWeight="Bold"&lt;br /&gt;               Foreground="Purple"&lt;br /&gt;               Text="{Binding DroppedFileContent}"&lt;br /&gt;               VerticalAlignment="Center"&lt;br /&gt;               HorizontalAlignment="Center"&lt;br /&gt;               TextWrapping="Wrap"&lt;br /&gt;               TextTrimming="WordEllipsis" /&amp;gt;&lt;br /&gt;&amp;lt;/Grid&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="Setting AllowDrop in Blend" href="http://www.flickr.com/photos/36917929@N06/4188001409"&gt;&lt;img src="http://farm3.static.flickr.com/2675/4188001409_92612bd85c.jpg" width="332" height="170" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Open the MainViewModel and add a bindable property. &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Note: If you have the MVVM Light Toolkit installed, you can use a code snippet for this: Type &lt;strong&gt;mvvminpc&lt;/strong&gt; then &lt;strong&gt;tab&lt;/strong&gt; to expand the snippet, and enter the property’s name, &lt;strong&gt;tab&lt;/strong&gt;, its type, &lt;strong&gt;tab&lt;/strong&gt; and the name of the attribute. Then, edit the code until it looks like the one below:&lt;/em&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// The &amp;lt;see cref="DroppedFileContent" /&amp;gt; property's name.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public const string DroppedFileContentPropertyName = "DroppedFileContent";&lt;br /&gt;&lt;br /&gt;private string _droppedFile = "Drop file here";&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Gets the DroppedFileContent property.&lt;br /&gt;/// Changes to that property's value raise the PropertyChanged event. &lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public string DroppedFileContent&lt;br /&gt;{&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;        return _droppedFile;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;        if (_droppedFile == value)&lt;br /&gt;        {&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        _droppedFile = value;&lt;br /&gt;        RaisePropertyChanged(DroppedFileContentPropertyName);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Add a &lt;strong&gt;RelayCommand&amp;lt;DragEventArgs&amp;gt;&lt;/strong&gt; property to the MainViewModel. Name this property HandleDropCommand. You will need to add GalaSoft.MvvmLight.Command, System and System.Windows to the “using” section. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;public RelayCommand&amp;lt;DragEventArgs&amp;gt; HandleDropCommand&lt;br /&gt;{&lt;br /&gt;    get;&lt;br /&gt;    private set;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Finally, in the constructor, initialize the HandleDropCommand. We will start by simply showing a MessageBox when a file is dropped. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;public MainViewModel()&lt;br /&gt;{&lt;br /&gt;    HandleDropCommand = new RelayCommand&amp;lt;DragEventArgs&amp;gt;(e =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        System.Windows.MessageBox.Show("Drop");&lt;br /&gt;    });&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Add an EventToCommand trigger to the main Grid. This element is part of the GalaSoft.MvvmLight.Extras DLL which is referenced by default in the MVVM Light project template, so if you start like we described here, you don’t need to do anything to use EventToCommand. If you start from a non MVVM Light application, you need to add a reference to &lt;a href="http://galasoft.ch/mvvm/installing/manually/#binaries"&gt;GalaSoft.MvvmLight.dll, GalaSoft.MvvmLight.Extras.dll and System.Windows.Interactivity.dll&lt;/a&gt; (make sure you get the V3/alpha3 version).&lt;br /&gt;&lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;Build the application to make sure that you have the latest stand loaded in Blend. &lt;/li&gt;
&lt;br /&gt;      &lt;li&gt;In Blend, open the Assets tab, select the EventToCommand from the Behaviors category and drag/drop it on the LayoutRoot grid. &lt;/li&gt;
&lt;br /&gt;      &lt;li&gt;Then set the EventName property to “Drop”. &lt;/li&gt;
&lt;br /&gt;      &lt;li&gt;Bind the Command property to the HandleDropCommand in the MainViewModel which is the Explicit Data Context of the main Grid. &lt;br /&gt;        &lt;br /&gt;&lt;em&gt;Note: To open the databinding editor, press the advanced properties widget (the small black square) next to the Command property, and select Data Binding from the context menu.&lt;/em&gt; &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;a title="Binding to the command" href="http://www.flickr.com/photos/36917929@N06/4188061773"&gt;&lt;img src="http://farm5.static.flickr.com/4005/4188061773_187785761f.jpg" width="500" height="469" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;ul&gt;&lt;br /&gt;    &lt;li&gt;Finally, check the &lt;strong&gt;PassEventArgsToCommand&lt;/strong&gt; checkbox. &lt;br /&gt;&lt;br /&gt;      &lt;br /&gt;&lt;em&gt;Note: The combination of having an argument of type EventArgs in the RelayCommand, and the PassEventArgsToCommand property set to true will cause the event’s EventArgs to be passed directly to the RelayCommand’s parameter.&lt;/em&gt; &lt;/li&gt;
  &lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;&lt;a title="Setting the EventToCommand properties" href="http://www.flickr.com/photos/36917929@N06/4188068747"&gt;&lt;img src="http://farm3.static.flickr.com/2624/4188068747_d8391bac46.jpg" width="389" height="443" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;If you do not have Blend, you can also add the EventToCommand in Visual Studio in XAML: &lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;In the MainPage.xaml file, add two namespaces to the UserCommand tag: &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="brush: xml;"&gt;xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"&lt;br /&gt;xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras"&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;ul&gt;&lt;br /&gt;    &lt;li&gt;Then, add the EventToCommand trigger within the LayoutRoot grid with the following XAML code: &lt;/li&gt;
  &lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="brush: xml;"&gt;&amp;lt;i:Interaction.Triggers&amp;gt;&lt;br /&gt;    &amp;lt;i:EventTrigger EventName="Drop"&amp;gt;&lt;br /&gt;        &amp;lt;cmd:EventToCommand Command="{Binding HandleDropCommand, Mode=OneWay}"&lt;br /&gt;                            PassEventArgsToCommand="True" /&amp;gt;&lt;br /&gt;    &amp;lt;/i:EventTrigger&amp;gt;&lt;br /&gt;&amp;lt;/i:Interaction.Triggers&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Test the application: In Blend, press F5, or in Visual Studio press Ctrl-F5. Then, drag a file, and drop it on the main Grid. Notice how the mouse cursor indicates that the Grid is a valid drop target. &lt;/li&gt;
&lt;/ul&gt;
&lt;a title="Drop cursor" href="http://www.flickr.com/photos/36917929@N06/4188861348"&gt;&lt;img src="http://farm3.static.flickr.com/2675/4188861348_9541965f20.jpg" width="330" height="263" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Drop the file. You should see the MessageBox proving that the RelayCommand has been called successfully. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Getting and handling the files&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now that we have the RelayCommand ready, let’s access the DragEventArgs and get the file content from there. In this sample example, we will accept TXT files, and display the first few words from the file content.&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Replace the call to MessageBox within the HandleDropCommand implementation with the following code: &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;if (e.Data == null)&lt;br /&gt;{&lt;br /&gt;    return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var files = e.Data.GetData(DataFormats.FileDrop)&lt;br /&gt;    as FileInfo[];&lt;br /&gt;&lt;br /&gt;// This works with multiple files, but in that&lt;br /&gt;// simple case, let's just handle the 1st one&lt;br /&gt;if (files == null&lt;br /&gt;    || files.Length == 0)&lt;br /&gt;{&lt;br /&gt;    DroppedFileContent = "No files";&lt;br /&gt;    return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var file = files[0];&lt;br /&gt;&lt;br /&gt;if (!file.Extension.ToLower().Equals(".txt"))&lt;br /&gt;{&lt;br /&gt;    DroppedFileContent = "Not a TXT file";&lt;br /&gt;    return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;using (var stream = file.OpenRead())&lt;br /&gt;{&lt;br /&gt;    using (var reader = new StreamReader(stream))&lt;br /&gt;    {&lt;br /&gt;        // Read the first line&lt;br /&gt;        var line = reader.ReadLine();&lt;br /&gt;        DroppedFileContent = line;&lt;br /&gt;    }&lt;br /&gt;}                &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Few notes about this code:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;You can get a reference to the files dropped on the target with the DragEventArgs.Data.GetData method. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Note however that since we are in Silverlight within the security sandbox, you will get a security exception if you try to access the file’s FullName. You may get the content of the file (because it is dropped by the user) but not additional information about where these files are located. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;In this example, we get only the first file, but it is easy to see how we could access all the files dropped. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;We do handle only TXT files in this example. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Reading the file’s content is done in an usual way, with a Stream and a StreamReader. Note the presence of the “using” statements, to make it easier (no need to explicitly close and dispose the stream and the reader). For binary files, we would use a BinaryReader, etc… &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;An issue with Visual Studio 2010&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the course of preparing this article, I noticed an issue in Visual Studio 2010 when I attempt to debug the HandleDropCommand implementation. Even with a breakpoint placed within the code, the debugger does not break. I am not sure right now what is the reason, and the code does get executed, but this complicates debugging of course. I am investigating and talking to Microsoft about that, but right now I am not sure where it comes from.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the MVVM pattern, we generally try to avoid putting too much code in the code behind because it complicates the developer-designer workflow. Though I am not a puritan about that :) I think that EventToCommand and the new PassEventArgsToCommand property are reasonable steps to make UI interaction such as drag&amp;amp;drop even easier to code.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Hope you like it :)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137030"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137030" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/137030.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/12/04/mvvm-light-v3alpha3-for-blend-3-and-blend-preview-4.aspx"&gt;MVVM Light V3/alpha3 for Blend 3 and Blend Preview 4&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Samstag, 5. Dezember 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;The project and item templates allowing you to create pre-wired MVVM Light applications are now also available for Expression Blend 3 and Expression Blend Preview for .NET 4 and Silverlight 4. The installation process is manual, but not difficult at all (unzipping a few files to predefined paths). I did &lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;document the installation process here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Of course the templates are also available for Visual Studio 2008 and Visual Studio 2010, as well as the binaries. The &lt;a href="http://mvvmlight.codeplex.com/"&gt;source code is available on Codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I still have one feature I want to add in V3, and then I will create a release version. Seeing how my schedule is, it will probably be during the holidays. However, V3/alpha 3 is very stable and I didn’t get any error report from users who upgraded. I also don’t think there will be any breaking change. At this point, I would recommend users who want the new features to upgrade to V3.&lt;/p&gt;  &lt;p&gt;I will post a list of new features in this version later.&lt;/p&gt;  &lt;p&gt;Happy coding!&lt;/p&gt; &lt;a title="MVVM Light V3 in Blend Preview for .NET 4 and Silverlight 4" href="http://www.flickr.com/photos/36917929@N06/4159924166"&gt;&lt;img src="http://farm3.static.flickr.com/2563/4159924166_e025e463aa.jpg" width="500" height="403" /&gt;&lt;/a&gt;   &lt;br /&gt;MVVM Light V3 in Blend Preview for .NET 4 and Silverlight 4   &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136714"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136714" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/136714.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/11/30/mvvm-light-toolkit-v3-alpha-3-for-wpf4sl4.aspx"&gt;MVVM Light Toolkit V3 Alpha 3 for WPF4/SL4&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Montag, 30. November 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/WindowsLiveWriter/MVVMLightToolkitV3Alpha3forWPF4SL4_14FA3/4084199726_d1cc8527aa_o%5B1%5D_2.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="4084199726_d1cc8527aa_o[1]" border="0" alt="4084199726_d1cc8527aa_o[1]" align="left" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/WindowsLiveWriter/MVVMLightToolkitV3Alpha3forWPF4SL4_14FA3/4084199726_d1cc8527aa_o%5B1%5D_thumb.png" width="244" height="210" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I just published the latest alpha version of the &lt;a href="http://galasoft.ch/mvvm/getstarted/"&gt;MVVM Light Toolkit&lt;/a&gt;. I will post more about the new features in this alpha version, but the most exciting is probably that with this release, the MVVM Light Toolkit works in &lt;strong&gt;Windows Presentation Foundation 4 and in Silverlight 4&lt;/strong&gt; (in Visual Studio 2010).&lt;/p&gt;  &lt;p&gt;There is no automatic installer for this version yet, but I wrote &lt;a href="http://galasoft.ch/mvvm/installing/manually/"&gt;a page describing how to install manually&lt;/a&gt; (it is as easy as unzipping a few files). All the features are also available for Visual Studio 2008 as usual.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://mvvmlight.codeplex.com/SourceControl/ListDownloadableCommits.aspx"&gt;source code was also updated&lt;/a&gt; on the Codeplex website.&lt;/p&gt;  &lt;p&gt;More documentation will follow soon so stay tuned. In the mean time, have fun with MVVM in WPF4/SL4!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136623"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136623" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/136623.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/11/13/bug-correction-in-messenger-and-new-feature-in-eventtocommand-mvvm.aspx"&gt;Bug correction in Messenger and new feature in EventToCommand (MVVM Light Toolkit V3 alpha)&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Freitag, 13. November 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;a title="MVVM_Black by lbugnionblog, on Flickr" href="http://www.flickr.com/photos/36917929@N06/4084199726/"&gt;&lt;img style="margin: 0px 10px 0px 0px; display: inline" alt="MVVM_Black" align="left" src="http://farm3.static.flickr.com/2617/4084199726_d1cc8527aa_o.png" width="240" height="206" /&gt;&lt;/a&gt;   &lt;p&gt;The advantage of pushing very early software to the advanced users is that bugs are detected before too many people suffer from them, and features requests can be placed and implemented without pain. This is exactly what happened with the MVVM Light Toolkit V3 alpha 2.&lt;/p&gt;  &lt;h2&gt;Bug correction&lt;/h2&gt;  &lt;p&gt;This applies to the new “send with token” feature of the Messenger. When a recipient registers for a type of message, it can provide a token (any object). Then, when a sender sends a message, it can also provide the same token. The Messenger will only send the messages to those recipients who provided the same token when registering. This enables creating separate optimized communication channels between objects. The token can be any object, for example a string, a GUID, etc…&lt;/p&gt;  &lt;p&gt;A silly mistake I made in the Messenger preventer simple values (such as an Integer) to be used as a token when sending a message. Simple values can be very valuable for this scenario, since a common reference is not needed to the token: It is simply a kind of contract that the sender and the receiver agree upon in advance. This is as decoupled as it gets, and yet enables a private channel of communication between two objects. Anyway, this mistake is corrected, and available in &lt;a href="http://mvvmlight.codeplex.com/SourceControl/ListDownloadableCommits.aspx"&gt;changeset 34855 on Codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;New feature&lt;/h2&gt;  &lt;p&gt;A &lt;a href="http://mvvmlight.codeplex.com/Thread/View.aspx?ThreadId=74835"&gt;user on Codeplex&lt;/a&gt; required an additional feature in the EventToCommand behavior: Adding a way to get the EventArgs from the fired event to the invoked command. I tried to find a good way to implement that, and decided to make this an opt-in feature. The scenario is:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;if you set the new property &lt;strong&gt;PassEventArgsToCommand&lt;/strong&gt; to true in the EventToCommand &lt;/li&gt;    &lt;li&gt;and you do NOT set the CommandParameter, nor the CommandParameterValue &lt;/li&gt;    &lt;li&gt;and you use a RelayCommand&amp;lt;EventArgs&amp;gt; as the data bound command &lt;/li&gt;    &lt;li&gt;then the parameter passed to the RelayCommand will be the EventArgs. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I believe that passing the EventArgs straight to the ViewModel is a bit overstepping the separation of concerns between the View and the ViewModel. However I do also acknowledge that there are cases where this can be useful, and so now it is possible. This feature is also implemented in &lt;a href="http://mvvmlight.codeplex.com/SourceControl/ListDownloadableCommits.aspx"&gt;changeset 34855 on Codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I also updated the sample application which can be downloaded here, or from Codeplex (see below).&lt;/p&gt;  &lt;h2&gt;Sample applications on Codeplex&lt;/h2&gt;  &lt;p&gt;I took the occasion to &lt;a href="http://mvvmlight.codeplex.com/sourcecontrol/changeset/view/34873?projectName=mvvmlight"&gt;upload some sample applications&lt;/a&gt; on Codeplex too.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;EventToCommand: This application demoes the feature of the same name, and is &lt;a href="http://blog.galasoft.ch/archive/2009/11/05/mvvm-light-toolkit-v3-alpha-2-eventtocommand-behavior.aspx"&gt;detailed in this blog post&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;CleanShutdown: This application shows a practical use for the Messenger, and a way to implement a clean shutdown that can easily be extended with additional components. &lt;a href="http://blog.galasoft.ch/archive/2009/10/18/clean-shutdown-in-silverlight-and-wpf-applications.aspx"&gt;More about this application here&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;RaiseCanExecuteChanged: This app shows how to use RelayCommands and more info about this sample is &lt;a href="http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx"&gt;found in this blog post&lt;/a&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Happy coding!!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136296"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136296" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/136296.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/11/07/mvvm-light-toolkit-logo-by-p.-schutz.aspx"&gt;MVVM Light Toolkit Logo by P. Schutz&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Samstag, 7. November 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;I met &lt;a href="http://info.philippe-schutz.com"&gt;Philippe Schutz&lt;/a&gt; at the TechDays in Geneva early this year, and have been following him on Facebook since then. He does amazing work with logos and icons, and it is only natural that I have thought of him when I decided to get a new logo and icons for the MVVM Light Toolkit.&lt;/p&gt;  &lt;p&gt;A brand identity is quite important to me even in private projects. This is why I created the site GalaSoft (&lt;a href="http://www.galasoft.ch"&gt;www.galasoft.ch&lt;/a&gt;) years ago, and started using this “brand” consistently as well as the cat logo (more about that on a &lt;a href="http://blog.galasoft.ch/archive/2008/10/19/redesigning-my-website-with-the-help-of-expression-blend.aspx"&gt;post I wrote last year&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;With the MVVM Light Toolkit starting to gain quite some popularity in the community, I have received a few suggestions to open a Facebook page for it, and to promote it on some other platforms. To do this, I needed a logo, something to display proudly and conveying the image, the message of MVVM Light.&lt;/p&gt;  &lt;p&gt;So I present to you proudly the new MVVM Light Toolkit logos designed by &lt;a href="http://info.philippe-schutz.com"&gt;Philippe Schutz&lt;/a&gt;:&lt;/p&gt; &lt;a title="MVVM_Black by lbugnionblog, on Flickr" href="http://www.flickr.com/photos/36917929@N06/4084199726/"&gt;&lt;img alt="MVVM_Black" src="http://farm3.static.flickr.com/2617/4084199726_d1cc8527aa_o.png" width="349" height="300" /&gt;&lt;/a&gt;   &lt;p&gt; &lt;/p&gt; &lt;a title="MVVM_White by lbugnionblog, on Flickr" href="http://www.flickr.com/photos/36917929@N06/4084208308/"&gt;&lt;img alt="MVVM_White" src="http://farm3.static.flickr.com/2706/4084208308_f541fd0597_o.png" width="356" height="300" /&gt;&lt;/a&gt;   &lt;p&gt;Yeah I know, they are beautiful.&lt;/p&gt;  &lt;p&gt;The design is meant to remind from the Windows 7 aesthetics, and of the Silverlight / .NET logos. I think it is a total success. Of course, the feather suggests the idea of lightness, as opposed to more complex frameworks that are very powerful, but also quite hard to understand and start with.&lt;/p&gt;  &lt;p&gt;I will work hard to include this new identity in the MVVM Light Toolkit and all the material related (websites, etc…). I am also preparing a Facebook page for “the fans” ;) So as usual, stay tuned!&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136123"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136123" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/136123.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Tue, 02 Mar 2010 11:53:02 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100302115302A</guid></item><item><title>Updated Wiki: Home</title><link>http://mvvmlight.codeplex.com/wikipage?version=6</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;The MVVM Light Toolkit is a set of components helping people to get started in the Model - View - ViewModel pattern in Silverlight and WPF. It is a light and pragmatic framework that contains only the essential components needed.&lt;br /&gt;&lt;br /&gt;More information about the MVVM Light Toolkit can be found on &lt;a href="http://www.galasoft.ch/mvvm/getstarted" class="externalLink"&gt;http://www.galasoft.ch/mvvm/getstarted&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="rss"&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/01/21/the-mvvm-landscape-at-mix10.aspx"&gt;The MVVM landscape at MIX10&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Donnerstag, 21. Januar 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;The MIX conference this year had an open call for sessions, and 12 sessions were voted by the public out of 169. Surprisingly (or maybe not that surprisingly in fact), 3 sessions out of the 12 have the MVVM pattern in their title. This shows a lot of interest for this pattern which is helping the developer to create decoupled, testable, blendable applications in Silverlight and in WPF.&lt;/p&gt;  &lt;p&gt;Since my session is one of the three, I decided to contact the other two speakers (we happen to run in the same circles ;)) and try to coordinate the content. I think that by talking to each other, we can organize our content so that we avoid overlap and offer a wider landscape to the audience.&lt;/p&gt;  &lt;p&gt;The two other authors responded positively to my request, and this is roughly how it will look like. Of course some overlap is unavoidable, to set the context right and avoid misunderstandings. After all, MVVM is a pattern, and as such there are multiple possible implementations or even interpretations of the pattern. But I think that this way, you will get a wider, deeper overview of what MVVM has to offer for you today.&lt;/p&gt;  &lt;h2&gt;Rob Eisenberg’s “Build Your Own MVVM Framework”&lt;/h2&gt;  &lt;p&gt;Rob is coordinator on the Caliburn project (a very powerful MVVM framework), but this is not a Caliburn talk. Instead, Rob will take some of the features of this framework and demonstrate how to build them from scratch. This should be a must see for the people who want to understand what is involved in a MVVM application, and how to avoid taking a dependency on an external framework. Rob will also talk about additional topics not directly related to MVVM.&lt;/p&gt;  &lt;h2&gt;Shawn Wildermuth’s “RIA Services and MVVM: It Can Happen!”&lt;/h2&gt;  &lt;p&gt;Shawn is going to set the focus on MVVM applied to RIA Services applications. He will show you all the code, and then how external frameworks can help you in your task.&lt;/p&gt;  &lt;h2&gt;Laurent Bugnion’s “Understanding the Model-View-ViewModel Pattern”&lt;/h2&gt;  &lt;p&gt;In this talk, I will set primary focus on the Blendability, i.e. how to structure your application so that it works great in Expression Blend. For instance, how can you display “design time data” in Expression Blend, so that the designers have something to design against. I will also show some components included in my MVVM Light Toolkit and explain how they can help you solve some issues in your applications. My talk will apply to Windows Presentation Foundation as well as Silverlight.&lt;/p&gt;  &lt;h2&gt;To be noted&lt;/h2&gt;  &lt;p&gt;It is nice to note that Rob, Shawn and I are not employed by Microsoft, but “just” enthusiast users of the technologies we will talk about. There is a great community around Silverlight and WPF, and it is interesting to note that most of the MVVM frameworks (at the exception of PRISM which is not directly an MVVM framework) originate from outside of Microsoft. Let’s spread the word: MVVM is the pattern of choice when you work in WPF or Silverlight. Come visit our sessions, your life as a developer will be changed!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137570"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137570" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/137570.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/01/19/talking-in-las-vegas-mix2010-and-mvvm.aspx"&gt;Talking in Las Vegas: MIX2010 and MVVM&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Dienstag, 19. Januar 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;&lt;a href="http://live.visitmix.com/Sessions"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="MIX10: Speaker" border="0" alt="MIX10: Speaker" align="left" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/WindowsLiveWriter/TalkinginLasVegasMIX2010andMVVM_B09F/o_MIX10Speaker%5B1%5D_3.jpg" width="154" height="151" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This morning, very early (or very late depending how you see it), I learned that one of the sessions &lt;a href="http://blog.galasoft.ch/archive/2010/01/05/mix-2010-voting-for-sessions-has-begun-i-got-two.aspx"&gt;I submitted to the MIX 2010&lt;/a&gt; open call for speakers had been picked by the public. Out of 169 sessions, only 12 were picked, so you imagine my feelings right now. Honestly, I am sure that this will be a good session, but it could have gone either way, and I had prepared myself mentally for the alternative possibility too.&lt;/p&gt;  &lt;h2&gt;Understanding the Model-View-ViewModel pattern&lt;/h2&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;The Model-View-ViewModel pattern (also called MVVM) is a hot topic in today’s Silverlight and WPF world. This pattern facilitates modern development techniques such as separation of concerns (decoupling), unit testing and test driven development, work with modern tools such as Visual Studio 2010, Expression Blend and more.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;In this session, Laurent (a user and promoter of MVVM since 2006) will introduce this pattern to you with many demos. We will talk about the basic components of a modern Silverlight or WPF application, and of additional helpers that will make your life as a developer much easier.&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;MVVM at MIX&lt;/h2&gt;  &lt;p&gt;Interestingly, 3 of the 12 open call sessions picked by the audience have “MVVM” in the title. Rob Eisenberg’s “Build Your Own MVVM Framework” and Shawn Wildermuth’s “RIA Services and MVVM: It Can Happen!”, in addition to mine, should cover the topic in depth. After thinking about it, I decided I will contact Rob and Shawn to talk to them about their session, and try to avoid overlap.&lt;/p&gt;  &lt;p&gt;On my end, I will probably shift the focus a little more on what MVM brings you from a designer (well, integrator)’s point of view, and how you can leverage this pattern to create beautiful applications. I will also, of course, talk about the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit&lt;/a&gt;, the open source toolkit I have been developing since last year, and which encounters a great success.&lt;/p&gt;  &lt;h2&gt;Send me your suggestions&lt;/h2&gt;  &lt;p&gt;I would love to hear if you have topics you would like to hear about during the session. I have a pretty good idea of what I will talk about, but let me know what is really important for you. What aspects of MVVM do you want me to focus on? What components of MVVM Light? Let me know, and I will adapt the content to include these topics!&lt;/p&gt;  &lt;p&gt;I am very much looking forward to this session, and will see you in March at MIX!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137541"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137541" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/137541.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/01/05/mix-2010-voting-for-sessions-has-begun-i-got-two.aspx"&gt;MIX 2010: Voting for sessions has begun (I got two)&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Mittwoch, 6. Januar 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;img style="margin: 0px 10px 0px 0px" title="MIX10" alt="MIX10" src="http://farm3.static.flickr.com/2626/4249632198_e79f99b271_o.png" width="197" height="115" /&gt;   &lt;p&gt;This year Microsoft decided to have &lt;a href="http://live.visitmix.com/opencall"&gt;an open call for sessions&lt;/a&gt; for the MIX 2010 in Las Vegas. This conference, in case you don’t know it yet, is a great 3 days about modern client technologies, such as ASP.NET, Windows Presentation Foundation and of course Silverlight. This year, MIX is taking place from the 15th to the 17th of March 2010 in the Mandalay Bay hotel in Vegas.&lt;/p&gt;  &lt;p&gt;Today, the voting began! I didn’t count them, but there seems to be more than 100 sessions lined up, and the competition is fierce: Only 10 sessions will make the cut and be chosen for MIX. I just reviewed the speakers, and it is a pretty amazing line-up.&lt;/p&gt;  &lt;p&gt;On my end, I submitted two sessions (see below). I honestly think that these two sessions will help the attendees become better developers in Silverlight and in WPF. The talks are based on years of experience with these two technologies, on real life projects.&lt;/p&gt;  &lt;h2&gt;A day in the life of a Silverlight/WPF Integrator&lt;/h2&gt;  &lt;p&gt;Vote here: &lt;a title="http://visitmix.com/opencallvote/Entry?entryId=ADAYIN060" href="http://visitmix.com/opencallvote/Entry?entryId=ADAYIN060"&gt;http://visitmix.com/opencallvote/Entry?entryId=ADAYIN060&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Abstract:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;This session proposes an insight in the life of an integrator (sometimes called User Experience Developer or “Devigner”). How do we translate a creative designer’s vision into code, transforming it into interactive applications? What tools do we use, what tricks did we learn? This session will show you how to start from scratch and coordinate designers and developers to create a new rich application in Silverlight or Windows Presentation Foundation. We will see how to architect and structure the application according to the best practices in the field, and what workflows are involved. We will also see how to create and integrate XAML assets into the user interface. You will leave with a much better understanding on how the new integrator role is changing the way that client applications are developed.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;You want to create beautiful applications? That’s what I do for a living, come and share the experience!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Having worked as an integrator for quite a few years now, in large distributed teams of developers and designers, I have identified many areas where the process is different from a classic application. The integrator role is a fairly recent role and many firms need guidance to understand how to start developing their Silverlight or WPF applications, and how to move from wireframes to design to development to testing.&lt;/p&gt;  &lt;p&gt;We will also review the tools and the tips&amp;amp;tricks that make the life of an integrator easier. This is not just about Expression Blend, but about all the small helpers that facilitate the integration process. &lt;/p&gt;  &lt;h2&gt;Understanding the Model-View-ViewModel pattern&lt;/h2&gt;  &lt;p&gt;Vote here: &lt;a title="http://visitmix.com/opencallvote/Entry?entryId=UNDERS103" href="http://visitmix.com/opencallvote/Entry?entryId=UNDERS103"&gt;http://visitmix.com/opencallvote/Entry?entryId=UNDERS103&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Abstract: &lt;/p&gt;  &lt;p&gt;&lt;em&gt;The Model-View-ViewModel pattern (also called MVVM) is a hot topic in today’s Silverlight and WPF world. This pattern facilitates modern development techniques such as separation of concerns (decoupling), unit testing and test driven development, work with modern tools such as Visual Studio 2010, Expression Blend and more.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;In this session, Laurent (a user and promoter of MVVM since 2006) will introduce this pattern to you with many demos. We will talk about the basic components of a modern Silverlight or WPF application, and of additional helpers that will make your life as a developer much easier.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;From the maker of the MVVM Light Toolkit!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This talk is targeted at developers who keep hearing people talk about the Model-View-ViewModel pattern, but don’t quite know what it is, what it does, and how to get the best out of that. Again, few slides and a lot of code, as we will walk through the creation of a MVVM application and study the components that help separating the concerns in the application. We will also talk about external frameworks that help you creating new MVVM applications.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137356"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137356" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/137356.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/12/17/silverlight-4-dragampdrop-with-eventtocommand.aspx"&gt;Silverlight 4: Drag&amp;amp;drop with EventToCommand&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Donnerstag, 17. Dezember 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;One of the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit’s&lt;/a&gt; user &lt;a href="http://mvvmlight.codeplex.com/Thread/View.aspx?ThreadId=74835"&gt;requested that I add the possibility&lt;/a&gt; to pass the EventArgs of an event to the ICommand that it is bound to through &lt;a href="http://blog.galasoft.ch/archive/2009/11/05/mvvm-light-toolkit-v3-alpha-2-eventtocommand-behavior.aspx"&gt;the EventToCommand trigger&lt;/a&gt;. At first I was a bit reluctant because it seems like a transgression of the rule that says you should avoid to have too much knowledge about the UI layer in the ViewModel. For example, if you have a &lt;a href="http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx"&gt;RelayCommand in the ViewModel&lt;/a&gt; that expects a MouseEventArgs, it kinds of binds you to a certain kind of UI element, which is not super clean.&lt;/p&gt;  &lt;p&gt;That said, I also understand that in some cases it might be useful to get the EventArgs down in the ViewModel, which is why I decided to add this possibility (&lt;a href="http://blog.galasoft.ch/archive/2009/11/30/mvvm-light-toolkit-v3-alpha-3-for-wpf4sl4.aspx"&gt;available from V3/alpha 3&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;And in fact, as I was testing it, I just got another request from my good friend &lt;a href="http://weblogs.asp.net/lkempe/"&gt;Laurent Kempé&lt;/a&gt; (one of the early and enthusiastic users of MVVM Light) to help use EventToCommand in the case of a drag&amp;amp;drop operation in Silverlight 4. That was the perfect test case for this new feature.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Note: Laurent &lt;a href="http://www.techheadbrothers.com/Astuces.aspx/silverlight-4-beta-drop-target-mvvm"&gt;wrote a post in French&lt;/a&gt; describing a drag&amp;amp;drop implementation.&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;Resources&lt;/h2&gt;  &lt;p&gt;The &lt;a href="http://galasoft.ch/mvvm/resources/Samples/MvvmLightDragAndDrop.zip"&gt;source code for this sample&lt;/a&gt; is available here. The MVVM Light Toolkit’s DLLs are also included (V3/alpha3). This code is for Visual Studio 2010 beta 2 and/or Expression Blend Preview for Silverlight 4.&lt;/p&gt;  &lt;p&gt;You can optionally install the MVVM Light Toolkit V3/alpha3 from the &lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;Installing Manually page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;More info about the MVVM Light Toolkit is available on the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;Get Started page&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;Creating a drag&amp;amp;drop enabled Silverlight application&lt;/h2&gt;  &lt;p&gt;Let’s start by creating a new MVVM Light application in Silverlight 4. In the moment the process of installing the project templates is manual, but it should be easy enough &lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;if you follow these instructions&lt;/a&gt;.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You can create a new MVVM Light application for Silverlight 4 in Visual Studio 2010 or in Expression Blend Preview 4. Simply choose File, New Project and then select the template called MVVM Light (SL4). &lt;/li&gt; &lt;/ul&gt; &lt;a title="Creating a new MVVM Light application" href="http://www.flickr.com/photos/36917929@N06/4188680130"&gt;&lt;img src="http://farm3.static.flickr.com/2625/4188680130_36d3e8741b.jpg" width="500" height="339" /&gt;&lt;/a&gt;   &lt;p&gt;We need to define a drop target for the files in the application. This can be done for just any UI element, so you can choose the main Grid (if you want the whole application to be a drop target) or any other element. In our case, to keep things simple, let’s define the main Grid as the drop target.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Set the property &lt;strong&gt;AllowDrop&lt;/strong&gt; to True, either in XAML or in Blend. Also change the other properties as shown in XAML below.       &lt;br /&gt;&lt;em&gt;Note: We will implement the DroppedFileContent property in a moment.&lt;/em&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;pre class="brush: xml;"&gt;&amp;lt;Grid x:Name="LayoutRoot"&lt;br /&gt;      AllowDrop="True"&lt;br /&gt;      Background="#FF9F9F9F"&amp;gt;&lt;br /&gt;    &amp;lt;TextBlock FontSize="36"&lt;br /&gt;               FontWeight="Bold"&lt;br /&gt;               Foreground="Purple"&lt;br /&gt;               Text="{Binding DroppedFileContent}"&lt;br /&gt;               VerticalAlignment="Center"&lt;br /&gt;               HorizontalAlignment="Center"&lt;br /&gt;               TextWrapping="Wrap"&lt;br /&gt;               TextTrimming="WordEllipsis" /&amp;gt;&lt;br /&gt;&amp;lt;/Grid&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="Setting AllowDrop in Blend" href="http://www.flickr.com/photos/36917929@N06/4188001409"&gt;&lt;img src="http://farm3.static.flickr.com/2675/4188001409_92612bd85c.jpg" width="332" height="170" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Open the MainViewModel and add a bindable property. &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Note: If you have the MVVM Light Toolkit installed, you can use a code snippet for this: Type &lt;strong&gt;mvvminpc&lt;/strong&gt; then &lt;strong&gt;tab&lt;/strong&gt; to expand the snippet, and enter the property’s name, &lt;strong&gt;tab&lt;/strong&gt;, its type, &lt;strong&gt;tab&lt;/strong&gt; and the name of the attribute. Then, edit the code until it looks like the one below:&lt;/em&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// The &amp;lt;see cref="DroppedFileContent" /&amp;gt; property's name.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public const string DroppedFileContentPropertyName = "DroppedFileContent";&lt;br /&gt;&lt;br /&gt;private string _droppedFile = "Drop file here";&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Gets the DroppedFileContent property.&lt;br /&gt;/// Changes to that property's value raise the PropertyChanged event. &lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public string DroppedFileContent&lt;br /&gt;{&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;        return _droppedFile;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;        if (_droppedFile == value)&lt;br /&gt;        {&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        _droppedFile = value;&lt;br /&gt;        RaisePropertyChanged(DroppedFileContentPropertyName);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Add a &lt;strong&gt;RelayCommand&amp;lt;DragEventArgs&amp;gt;&lt;/strong&gt; property to the MainViewModel. Name this property HandleDropCommand. You will need to add GalaSoft.MvvmLight.Command, System and System.Windows to the “using” section. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;public RelayCommand&amp;lt;DragEventArgs&amp;gt; HandleDropCommand&lt;br /&gt;{&lt;br /&gt;    get;&lt;br /&gt;    private set;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Finally, in the constructor, initialize the HandleDropCommand. We will start by simply showing a MessageBox when a file is dropped. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;public MainViewModel()&lt;br /&gt;{&lt;br /&gt;    HandleDropCommand = new RelayCommand&amp;lt;DragEventArgs&amp;gt;(e =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        System.Windows.MessageBox.Show("Drop");&lt;br /&gt;    });&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Add an EventToCommand trigger to the main Grid. This element is part of the GalaSoft.MvvmLight.Extras DLL which is referenced by default in the MVVM Light project template, so if you start like we described here, you don’t need to do anything to use EventToCommand. If you start from a non MVVM Light application, you need to add a reference to &lt;a href="http://galasoft.ch/mvvm/installing/manually/#binaries"&gt;GalaSoft.MvvmLight.dll, GalaSoft.MvvmLight.Extras.dll and System.Windows.Interactivity.dll&lt;/a&gt; (make sure you get the V3/alpha3 version).&lt;br /&gt;&lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;Build the application to make sure that you have the latest stand loaded in Blend. &lt;/li&gt;
&lt;br /&gt;      &lt;li&gt;In Blend, open the Assets tab, select the EventToCommand from the Behaviors category and drag/drop it on the LayoutRoot grid. &lt;/li&gt;
&lt;br /&gt;      &lt;li&gt;Then set the EventName property to “Drop”. &lt;/li&gt;
&lt;br /&gt;      &lt;li&gt;Bind the Command property to the HandleDropCommand in the MainViewModel which is the Explicit Data Context of the main Grid. &lt;br /&gt;        &lt;br /&gt;&lt;em&gt;Note: To open the databinding editor, press the advanced properties widget (the small black square) next to the Command property, and select Data Binding from the context menu.&lt;/em&gt; &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;a title="Binding to the command" href="http://www.flickr.com/photos/36917929@N06/4188061773"&gt;&lt;img src="http://farm5.static.flickr.com/4005/4188061773_187785761f.jpg" width="500" height="469" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;ul&gt;&lt;br /&gt;    &lt;li&gt;Finally, check the &lt;strong&gt;PassEventArgsToCommand&lt;/strong&gt; checkbox. &lt;br /&gt;&lt;br /&gt;      &lt;br /&gt;&lt;em&gt;Note: The combination of having an argument of type EventArgs in the RelayCommand, and the PassEventArgsToCommand property set to true will cause the event’s EventArgs to be passed directly to the RelayCommand’s parameter.&lt;/em&gt; &lt;/li&gt;
  &lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;&lt;a title="Setting the EventToCommand properties" href="http://www.flickr.com/photos/36917929@N06/4188068747"&gt;&lt;img src="http://farm3.static.flickr.com/2624/4188068747_d8391bac46.jpg" width="389" height="443" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;If you do not have Blend, you can also add the EventToCommand in Visual Studio in XAML: &lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;In the MainPage.xaml file, add two namespaces to the UserCommand tag: &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="brush: xml;"&gt;xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"&lt;br /&gt;xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras"&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;ul&gt;&lt;br /&gt;    &lt;li&gt;Then, add the EventToCommand trigger within the LayoutRoot grid with the following XAML code: &lt;/li&gt;
  &lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="brush: xml;"&gt;&amp;lt;i:Interaction.Triggers&amp;gt;&lt;br /&gt;    &amp;lt;i:EventTrigger EventName="Drop"&amp;gt;&lt;br /&gt;        &amp;lt;cmd:EventToCommand Command="{Binding HandleDropCommand, Mode=OneWay}"&lt;br /&gt;                            PassEventArgsToCommand="True" /&amp;gt;&lt;br /&gt;    &amp;lt;/i:EventTrigger&amp;gt;&lt;br /&gt;&amp;lt;/i:Interaction.Triggers&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Test the application: In Blend, press F5, or in Visual Studio press Ctrl-F5. Then, drag a file, and drop it on the main Grid. Notice how the mouse cursor indicates that the Grid is a valid drop target. &lt;/li&gt;
&lt;/ul&gt;
&lt;a title="Drop cursor" href="http://www.flickr.com/photos/36917929@N06/4188861348"&gt;&lt;img src="http://farm3.static.flickr.com/2675/4188861348_9541965f20.jpg" width="330" height="263" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Drop the file. You should see the MessageBox proving that the RelayCommand has been called successfully. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Getting and handling the files&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now that we have the RelayCommand ready, let’s access the DragEventArgs and get the file content from there. In this sample example, we will accept TXT files, and display the first few words from the file content.&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Replace the call to MessageBox within the HandleDropCommand implementation with the following code: &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;if (e.Data == null)&lt;br /&gt;{&lt;br /&gt;    return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var files = e.Data.GetData(DataFormats.FileDrop)&lt;br /&gt;    as FileInfo[];&lt;br /&gt;&lt;br /&gt;// This works with multiple files, but in that&lt;br /&gt;// simple case, let's just handle the 1st one&lt;br /&gt;if (files == null&lt;br /&gt;    || files.Length == 0)&lt;br /&gt;{&lt;br /&gt;    DroppedFileContent = "No files";&lt;br /&gt;    return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var file = files[0];&lt;br /&gt;&lt;br /&gt;if (!file.Extension.ToLower().Equals(".txt"))&lt;br /&gt;{&lt;br /&gt;    DroppedFileContent = "Not a TXT file";&lt;br /&gt;    return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;using (var stream = file.OpenRead())&lt;br /&gt;{&lt;br /&gt;    using (var reader = new StreamReader(stream))&lt;br /&gt;    {&lt;br /&gt;        // Read the first line&lt;br /&gt;        var line = reader.ReadLine();&lt;br /&gt;        DroppedFileContent = line;&lt;br /&gt;    }&lt;br /&gt;}                &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Few notes about this code:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;You can get a reference to the files dropped on the target with the DragEventArgs.Data.GetData method. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Note however that since we are in Silverlight within the security sandbox, you will get a security exception if you try to access the file’s FullName. You may get the content of the file (because it is dropped by the user) but not additional information about where these files are located. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;In this example, we get only the first file, but it is easy to see how we could access all the files dropped. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;We do handle only TXT files in this example. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Reading the file’s content is done in an usual way, with a Stream and a StreamReader. Note the presence of the “using” statements, to make it easier (no need to explicitly close and dispose the stream and the reader). For binary files, we would use a BinaryReader, etc… &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;An issue with Visual Studio 2010&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the course of preparing this article, I noticed an issue in Visual Studio 2010 when I attempt to debug the HandleDropCommand implementation. Even with a breakpoint placed within the code, the debugger does not break. I am not sure right now what is the reason, and the code does get executed, but this complicates debugging of course. I am investigating and talking to Microsoft about that, but right now I am not sure where it comes from.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the MVVM pattern, we generally try to avoid putting too much code in the code behind because it complicates the developer-designer workflow. Though I am not a puritan about that :) I think that EventToCommand and the new PassEventArgsToCommand property are reasonable steps to make UI interaction such as drag&amp;amp;drop even easier to code.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Hope you like it :)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137030"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137030" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/137030.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/12/04/mvvm-light-v3alpha3-for-blend-3-and-blend-preview-4.aspx"&gt;MVVM Light V3/alpha3 for Blend 3 and Blend Preview 4&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Samstag, 5. Dezember 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;The project and item templates allowing you to create pre-wired MVVM Light applications are now also available for Expression Blend 3 and Expression Blend Preview for .NET 4 and Silverlight 4. The installation process is manual, but not difficult at all (unzipping a few files to predefined paths). I did &lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;document the installation process here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Of course the templates are also available for Visual Studio 2008 and Visual Studio 2010, as well as the binaries. The &lt;a href="http://mvvmlight.codeplex.com/"&gt;source code is available on Codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I still have one feature I want to add in V3, and then I will create a release version. Seeing how my schedule is, it will probably be during the holidays. However, V3/alpha 3 is very stable and I didn’t get any error report from users who upgraded. I also don’t think there will be any breaking change. At this point, I would recommend users who want the new features to upgrade to V3.&lt;/p&gt;  &lt;p&gt;I will post a list of new features in this version later.&lt;/p&gt;  &lt;p&gt;Happy coding!&lt;/p&gt; &lt;a title="MVVM Light V3 in Blend Preview for .NET 4 and Silverlight 4" href="http://www.flickr.com/photos/36917929@N06/4159924166"&gt;&lt;img src="http://farm3.static.flickr.com/2563/4159924166_e025e463aa.jpg" width="500" height="403" /&gt;&lt;/a&gt;   &lt;br /&gt;MVVM Light V3 in Blend Preview for .NET 4 and Silverlight 4   &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136714"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136714" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/136714.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/11/30/mvvm-light-toolkit-v3-alpha-3-for-wpf4sl4.aspx"&gt;MVVM Light Toolkit V3 Alpha 3 for WPF4/SL4&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Montag, 30. November 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/WindowsLiveWriter/MVVMLightToolkitV3Alpha3forWPF4SL4_14FA3/4084199726_d1cc8527aa_o%5B1%5D_2.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="4084199726_d1cc8527aa_o[1]" border="0" alt="4084199726_d1cc8527aa_o[1]" align="left" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/WindowsLiveWriter/MVVMLightToolkitV3Alpha3forWPF4SL4_14FA3/4084199726_d1cc8527aa_o%5B1%5D_thumb.png" width="244" height="210" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I just published the latest alpha version of the &lt;a href="http://galasoft.ch/mvvm/getstarted/"&gt;MVVM Light Toolkit&lt;/a&gt;. I will post more about the new features in this alpha version, but the most exciting is probably that with this release, the MVVM Light Toolkit works in &lt;strong&gt;Windows Presentation Foundation 4 and in Silverlight 4&lt;/strong&gt; (in Visual Studio 2010).&lt;/p&gt;  &lt;p&gt;There is no automatic installer for this version yet, but I wrote &lt;a href="http://galasoft.ch/mvvm/installing/manually/"&gt;a page describing how to install manually&lt;/a&gt; (it is as easy as unzipping a few files). All the features are also available for Visual Studio 2008 as usual.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://mvvmlight.codeplex.com/SourceControl/ListDownloadableCommits.aspx"&gt;source code was also updated&lt;/a&gt; on the Codeplex website.&lt;/p&gt;  &lt;p&gt;More documentation will follow soon so stay tuned. In the mean time, have fun with MVVM in WPF4/SL4!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136623"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136623" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/136623.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/11/13/bug-correction-in-messenger-and-new-feature-in-eventtocommand-mvvm.aspx"&gt;Bug correction in Messenger and new feature in EventToCommand (MVVM Light Toolkit V3 alpha)&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Freitag, 13. November 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;a title="MVVM_Black by lbugnionblog, on Flickr" href="http://www.flickr.com/photos/36917929@N06/4084199726/"&gt;&lt;img style="margin: 0px 10px 0px 0px; display: inline" alt="MVVM_Black" align="left" src="http://farm3.static.flickr.com/2617/4084199726_d1cc8527aa_o.png" width="240" height="206" /&gt;&lt;/a&gt;   &lt;p&gt;The advantage of pushing very early software to the advanced users is that bugs are detected before too many people suffer from them, and features requests can be placed and implemented without pain. This is exactly what happened with the MVVM Light Toolkit V3 alpha 2.&lt;/p&gt;  &lt;h2&gt;Bug correction&lt;/h2&gt;  &lt;p&gt;This applies to the new “send with token” feature of the Messenger. When a recipient registers for a type of message, it can provide a token (any object). Then, when a sender sends a message, it can also provide the same token. The Messenger will only send the messages to those recipients who provided the same token when registering. This enables creating separate optimized communication channels between objects. The token can be any object, for example a string, a GUID, etc…&lt;/p&gt;  &lt;p&gt;A silly mistake I made in the Messenger preventer simple values (such as an Integer) to be used as a token when sending a message. Simple values can be very valuable for this scenario, since a common reference is not needed to the token: It is simply a kind of contract that the sender and the receiver agree upon in advance. This is as decoupled as it gets, and yet enables a private channel of communication between two objects. Anyway, this mistake is corrected, and available in &lt;a href="http://mvvmlight.codeplex.com/SourceControl/ListDownloadableCommits.aspx"&gt;changeset 34855 on Codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;New feature&lt;/h2&gt;  &lt;p&gt;A &lt;a href="http://mvvmlight.codeplex.com/Thread/View.aspx?ThreadId=74835"&gt;user on Codeplex&lt;/a&gt; required an additional feature in the EventToCommand behavior: Adding a way to get the EventArgs from the fired event to the invoked command. I tried to find a good way to implement that, and decided to make this an opt-in feature. The scenario is:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;if you set the new property &lt;strong&gt;PassEventArgsToCommand&lt;/strong&gt; to true in the EventToCommand &lt;/li&gt;    &lt;li&gt;and you do NOT set the CommandParameter, nor the CommandParameterValue &lt;/li&gt;    &lt;li&gt;and you use a RelayCommand&amp;lt;EventArgs&amp;gt; as the data bound command &lt;/li&gt;    &lt;li&gt;then the parameter passed to the RelayCommand will be the EventArgs. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I believe that passing the EventArgs straight to the ViewModel is a bit overstepping the separation of concerns between the View and the ViewModel. However I do also acknowledge that there are cases where this can be useful, and so now it is possible. This feature is also implemented in &lt;a href="http://mvvmlight.codeplex.com/SourceControl/ListDownloadableCommits.aspx"&gt;changeset 34855 on Codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I also updated the sample application which can be downloaded here, or from Codeplex (see below).&lt;/p&gt;  &lt;h2&gt;Sample applications on Codeplex&lt;/h2&gt;  &lt;p&gt;I took the occasion to &lt;a href="http://mvvmlight.codeplex.com/sourcecontrol/changeset/view/34873?projectName=mvvmlight"&gt;upload some sample applications&lt;/a&gt; on Codeplex too.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;EventToCommand: This application demoes the feature of the same name, and is &lt;a href="http://blog.galasoft.ch/archive/2009/11/05/mvvm-light-toolkit-v3-alpha-2-eventtocommand-behavior.aspx"&gt;detailed in this blog post&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;CleanShutdown: This application shows a practical use for the Messenger, and a way to implement a clean shutdown that can easily be extended with additional components. &lt;a href="http://blog.galasoft.ch/archive/2009/10/18/clean-shutdown-in-silverlight-and-wpf-applications.aspx"&gt;More about this application here&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;RaiseCanExecuteChanged: This app shows how to use RelayCommands and more info about this sample is &lt;a href="http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx"&gt;found in this blog post&lt;/a&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Happy coding!!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136296"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136296" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/136296.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/11/07/mvvm-light-toolkit-logo-by-p.-schutz.aspx"&gt;MVVM Light Toolkit Logo by P. Schutz&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Samstag, 7. November 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;I met &lt;a href="http://info.philippe-schutz.com"&gt;Philippe Schutz&lt;/a&gt; at the TechDays in Geneva early this year, and have been following him on Facebook since then. He does amazing work with logos and icons, and it is only natural that I have thought of him when I decided to get a new logo and icons for the MVVM Light Toolkit.&lt;/p&gt;  &lt;p&gt;A brand identity is quite important to me even in private projects. This is why I created the site GalaSoft (&lt;a href="http://www.galasoft.ch"&gt;www.galasoft.ch&lt;/a&gt;) years ago, and started using this “brand” consistently as well as the cat logo (more about that on a &lt;a href="http://blog.galasoft.ch/archive/2008/10/19/redesigning-my-website-with-the-help-of-expression-blend.aspx"&gt;post I wrote last year&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;With the MVVM Light Toolkit starting to gain quite some popularity in the community, I have received a few suggestions to open a Facebook page for it, and to promote it on some other platforms. To do this, I needed a logo, something to display proudly and conveying the image, the message of MVVM Light.&lt;/p&gt;  &lt;p&gt;So I present to you proudly the new MVVM Light Toolkit logos designed by &lt;a href="http://info.philippe-schutz.com"&gt;Philippe Schutz&lt;/a&gt;:&lt;/p&gt; &lt;a title="MVVM_Black by lbugnionblog, on Flickr" href="http://www.flickr.com/photos/36917929@N06/4084199726/"&gt;&lt;img alt="MVVM_Black" src="http://farm3.static.flickr.com/2617/4084199726_d1cc8527aa_o.png" width="349" height="300" /&gt;&lt;/a&gt;   &lt;p&gt; &lt;/p&gt; &lt;a title="MVVM_White by lbugnionblog, on Flickr" href="http://www.flickr.com/photos/36917929@N06/4084208308/"&gt;&lt;img alt="MVVM_White" src="http://farm3.static.flickr.com/2706/4084208308_f541fd0597_o.png" width="356" height="300" /&gt;&lt;/a&gt;   &lt;p&gt;Yeah I know, they are beautiful.&lt;/p&gt;  &lt;p&gt;The design is meant to remind from the Windows 7 aesthetics, and of the Silverlight / .NET logos. I think it is a total success. Of course, the feather suggests the idea of lightness, as opposed to more complex frameworks that are very powerful, but also quite hard to understand and start with.&lt;/p&gt;  &lt;p&gt;I will work hard to include this new identity in the MVVM Light Toolkit and all the material related (websites, etc…). I am also preparing a Facebook page for “the fans” ;) So as usual, stay tuned!&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136123"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136123" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/136123.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Tue, 02 Mar 2010 11:52:34 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100302115234A</guid></item><item><title>Updated Wiki: Home</title><link>http://mvvmlight.codeplex.com/wikipage?version=5</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;The MVVM Light Toolkit is a set of components helping people to get started in the Model - View - ViewModel pattern in Silverlight and WPF. It is a light and pragmatic framework that contains only the essential components needed.&lt;br /&gt;&lt;br /&gt;More information about the MVVM Light Toolkit can be found on &lt;a href="http://www.galasoft.ch/mvvm/getstarted" class="externalLink"&gt;http://www.galasoft.ch/mvvm/getstarted&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="rss"&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/01/21/the-mvvm-landscape-at-mix10.aspx"&gt;The MVVM landscape at MIX10&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Donnerstag, 21. Januar 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;The MIX conference this year had an open call for sessions, and 12 sessions were voted by the public out of 169. Surprisingly (or maybe not that surprisingly in fact), 3 sessions out of the 12 have the MVVM pattern in their title. This shows a lot of interest for this pattern which is helping the developer to create decoupled, testable, blendable applications in Silverlight and in WPF.&lt;/p&gt;  &lt;p&gt;Since my session is one of the three, I decided to contact the other two speakers (we happen to run in the same circles ;)) and try to coordinate the content. I think that by talking to each other, we can organize our content so that we avoid overlap and offer a wider landscape to the audience.&lt;/p&gt;  &lt;p&gt;The two other authors responded positively to my request, and this is roughly how it will look like. Of course some overlap is unavoidable, to set the context right and avoid misunderstandings. After all, MVVM is a pattern, and as such there are multiple possible implementations or even interpretations of the pattern. But I think that this way, you will get a wider, deeper overview of what MVVM has to offer for you today.&lt;/p&gt;  &lt;h2&gt;Rob Eisenberg’s “Build Your Own MVVM Framework”&lt;/h2&gt;  &lt;p&gt;Rob is coordinator on the Caliburn project (a very powerful MVVM framework), but this is not a Caliburn talk. Instead, Rob will take some of the features of this framework and demonstrate how to build them from scratch. This should be a must see for the people who want to understand what is involved in a MVVM application, and how to avoid taking a dependency on an external framework. Rob will also talk about additional topics not directly related to MVVM.&lt;/p&gt;  &lt;h2&gt;Shawn Wildermuth’s “RIA Services and MVVM: It Can Happen!”&lt;/h2&gt;  &lt;p&gt;Shawn is going to set the focus on MVVM applied to RIA Services applications. He will show you all the code, and then how external frameworks can help you in your task.&lt;/p&gt;  &lt;h2&gt;Laurent Bugnion’s “Understanding the Model-View-ViewModel Pattern”&lt;/h2&gt;  &lt;p&gt;In this talk, I will set primary focus on the Blendability, i.e. how to structure your application so that it works great in Expression Blend. For instance, how can you display “design time data” in Expression Blend, so that the designers have something to design against. I will also show some components included in my MVVM Light Toolkit and explain how they can help you solve some issues in your applications. My talk will apply to Windows Presentation Foundation as well as Silverlight.&lt;/p&gt;  &lt;h2&gt;To be noted&lt;/h2&gt;  &lt;p&gt;It is nice to note that Rob, Shawn and I are not employed by Microsoft, but “just” enthusiast users of the technologies we will talk about. There is a great community around Silverlight and WPF, and it is interesting to note that most of the MVVM frameworks (at the exception of PRISM which is not directly an MVVM framework) originate from outside of Microsoft. Let’s spread the word: MVVM is the pattern of choice when you work in WPF or Silverlight. Come visit our sessions, your life as a developer will be changed!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137570"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137570" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/137570.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/01/19/talking-in-las-vegas-mix2010-and-mvvm.aspx"&gt;Talking in Las Vegas: MIX2010 and MVVM&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Dienstag, 19. Januar 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;&lt;a href="http://live.visitmix.com/Sessions"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="MIX10: Speaker" border="0" alt="MIX10: Speaker" align="left" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/WindowsLiveWriter/TalkinginLasVegasMIX2010andMVVM_B09F/o_MIX10Speaker%5B1%5D_3.jpg" width="154" height="151" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This morning, very early (or very late depending how you see it), I learned that one of the sessions &lt;a href="http://blog.galasoft.ch/archive/2010/01/05/mix-2010-voting-for-sessions-has-begun-i-got-two.aspx"&gt;I submitted to the MIX 2010&lt;/a&gt; open call for speakers had been picked by the public. Out of 169 sessions, only 12 were picked, so you imagine my feelings right now. Honestly, I am sure that this will be a good session, but it could have gone either way, and I had prepared myself mentally for the alternative possibility too.&lt;/p&gt;  &lt;h2&gt;Understanding the Model-View-ViewModel pattern&lt;/h2&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;The Model-View-ViewModel pattern (also called MVVM) is a hot topic in today’s Silverlight and WPF world. This pattern facilitates modern development techniques such as separation of concerns (decoupling), unit testing and test driven development, work with modern tools such as Visual Studio 2010, Expression Blend and more.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;In this session, Laurent (a user and promoter of MVVM since 2006) will introduce this pattern to you with many demos. We will talk about the basic components of a modern Silverlight or WPF application, and of additional helpers that will make your life as a developer much easier.&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;MVVM at MIX&lt;/h2&gt;  &lt;p&gt;Interestingly, 3 of the 12 open call sessions picked by the audience have “MVVM” in the title. Rob Eisenberg’s “Build Your Own MVVM Framework” and Shawn Wildermuth’s “RIA Services and MVVM: It Can Happen!”, in addition to mine, should cover the topic in depth. After thinking about it, I decided I will contact Rob and Shawn to talk to them about their session, and try to avoid overlap.&lt;/p&gt;  &lt;p&gt;On my end, I will probably shift the focus a little more on what MVM brings you from a designer (well, integrator)’s point of view, and how you can leverage this pattern to create beautiful applications. I will also, of course, talk about the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit&lt;/a&gt;, the open source toolkit I have been developing since last year, and which encounters a great success.&lt;/p&gt;  &lt;h2&gt;Send me your suggestions&lt;/h2&gt;  &lt;p&gt;I would love to hear if you have topics you would like to hear about during the session. I have a pretty good idea of what I will talk about, but let me know what is really important for you. What aspects of MVVM do you want me to focus on? What components of MVVM Light? Let me know, and I will adapt the content to include these topics!&lt;/p&gt;  &lt;p&gt;I am very much looking forward to this session, and will see you in March at MIX!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137541"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137541" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/137541.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2010/01/05/mix-2010-voting-for-sessions-has-begun-i-got-two.aspx"&gt;MIX 2010: Voting for sessions has begun (I got two)&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Mittwoch, 6. Januar 2010&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;img style="margin: 0px 10px 0px 0px" title="MIX10" alt="MIX10" src="http://farm3.static.flickr.com/2626/4249632198_e79f99b271_o.png" width="197" height="115" /&gt;   &lt;p&gt;This year Microsoft decided to have &lt;a href="http://live.visitmix.com/opencall"&gt;an open call for sessions&lt;/a&gt; for the MIX 2010 in Las Vegas. This conference, in case you don’t know it yet, is a great 3 days about modern client technologies, such as ASP.NET, Windows Presentation Foundation and of course Silverlight. This year, MIX is taking place from the 15th to the 17th of March 2010 in the Mandalay Bay hotel in Vegas.&lt;/p&gt;  &lt;p&gt;Today, the voting began! I didn’t count them, but there seems to be more than 100 sessions lined up, and the competition is fierce: Only 10 sessions will make the cut and be chosen for MIX. I just reviewed the speakers, and it is a pretty amazing line-up.&lt;/p&gt;  &lt;p&gt;On my end, I submitted two sessions (see below). I honestly think that these two sessions will help the attendees become better developers in Silverlight and in WPF. The talks are based on years of experience with these two technologies, on real life projects.&lt;/p&gt;  &lt;h2&gt;A day in the life of a Silverlight/WPF Integrator&lt;/h2&gt;  &lt;p&gt;Vote here: &lt;a title="http://visitmix.com/opencallvote/Entry?entryId=ADAYIN060" href="http://visitmix.com/opencallvote/Entry?entryId=ADAYIN060"&gt;http://visitmix.com/opencallvote/Entry?entryId=ADAYIN060&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Abstract:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;This session proposes an insight in the life of an integrator (sometimes called User Experience Developer or “Devigner”). How do we translate a creative designer’s vision into code, transforming it into interactive applications? What tools do we use, what tricks did we learn? This session will show you how to start from scratch and coordinate designers and developers to create a new rich application in Silverlight or Windows Presentation Foundation. We will see how to architect and structure the application according to the best practices in the field, and what workflows are involved. We will also see how to create and integrate XAML assets into the user interface. You will leave with a much better understanding on how the new integrator role is changing the way that client applications are developed.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;You want to create beautiful applications? That’s what I do for a living, come and share the experience!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Having worked as an integrator for quite a few years now, in large distributed teams of developers and designers, I have identified many areas where the process is different from a classic application. The integrator role is a fairly recent role and many firms need guidance to understand how to start developing their Silverlight or WPF applications, and how to move from wireframes to design to development to testing.&lt;/p&gt;  &lt;p&gt;We will also review the tools and the tips&amp;amp;tricks that make the life of an integrator easier. This is not just about Expression Blend, but about all the small helpers that facilitate the integration process. &lt;/p&gt;  &lt;h2&gt;Understanding the Model-View-ViewModel pattern&lt;/h2&gt;  &lt;p&gt;Vote here: &lt;a title="http://visitmix.com/opencallvote/Entry?entryId=UNDERS103" href="http://visitmix.com/opencallvote/Entry?entryId=UNDERS103"&gt;http://visitmix.com/opencallvote/Entry?entryId=UNDERS103&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Abstract: &lt;/p&gt;  &lt;p&gt;&lt;em&gt;The Model-View-ViewModel pattern (also called MVVM) is a hot topic in today’s Silverlight and WPF world. This pattern facilitates modern development techniques such as separation of concerns (decoupling), unit testing and test driven development, work with modern tools such as Visual Studio 2010, Expression Blend and more.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;In this session, Laurent (a user and promoter of MVVM since 2006) will introduce this pattern to you with many demos. We will talk about the basic components of a modern Silverlight or WPF application, and of additional helpers that will make your life as a developer much easier.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;From the maker of the MVVM Light Toolkit!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This talk is targeted at developers who keep hearing people talk about the Model-View-ViewModel pattern, but don’t quite know what it is, what it does, and how to get the best out of that. Again, few slides and a lot of code, as we will walk through the creation of a MVVM application and study the components that help separating the concerns in the application. We will also talk about external frameworks that help you creating new MVVM applications.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137356"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137356" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/137356.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/12/17/silverlight-4-dragampdrop-with-eventtocommand.aspx"&gt;Silverlight 4: Drag&amp;amp;drop with EventToCommand&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Donnerstag, 17. Dezember 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;One of the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit’s&lt;/a&gt; user &lt;a href="http://mvvmlight.codeplex.com/Thread/View.aspx?ThreadId=74835"&gt;requested that I add the possibility&lt;/a&gt; to pass the EventArgs of an event to the ICommand that it is bound to through &lt;a href="http://blog.galasoft.ch/archive/2009/11/05/mvvm-light-toolkit-v3-alpha-2-eventtocommand-behavior.aspx"&gt;the EventToCommand trigger&lt;/a&gt;. At first I was a bit reluctant because it seems like a transgression of the rule that says you should avoid to have too much knowledge about the UI layer in the ViewModel. For example, if you have a &lt;a href="http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx"&gt;RelayCommand in the ViewModel&lt;/a&gt; that expects a MouseEventArgs, it kinds of binds you to a certain kind of UI element, which is not super clean.&lt;/p&gt;  &lt;p&gt;That said, I also understand that in some cases it might be useful to get the EventArgs down in the ViewModel, which is why I decided to add this possibility (&lt;a href="http://blog.galasoft.ch/archive/2009/11/30/mvvm-light-toolkit-v3-alpha-3-for-wpf4sl4.aspx"&gt;available from V3/alpha 3&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;And in fact, as I was testing it, I just got another request from my good friend &lt;a href="http://weblogs.asp.net/lkempe/"&gt;Laurent Kempé&lt;/a&gt; (one of the early and enthusiastic users of MVVM Light) to help use EventToCommand in the case of a drag&amp;amp;drop operation in Silverlight 4. That was the perfect test case for this new feature.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Note: Laurent &lt;a href="http://www.techheadbrothers.com/Astuces.aspx/silverlight-4-beta-drop-target-mvvm"&gt;wrote a post in French&lt;/a&gt; describing a drag&amp;amp;drop implementation.&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;Resources&lt;/h2&gt;  &lt;p&gt;The &lt;a href="http://galasoft.ch/mvvm/resources/Samples/MvvmLightDragAndDrop.zip"&gt;source code for this sample&lt;/a&gt; is available here. The MVVM Light Toolkit’s DLLs are also included (V3/alpha3). This code is for Visual Studio 2010 beta 2 and/or Expression Blend Preview for Silverlight 4.&lt;/p&gt;  &lt;p&gt;You can optionally install the MVVM Light Toolkit V3/alpha3 from the &lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;Installing Manually page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;More info about the MVVM Light Toolkit is available on the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;Get Started page&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;Creating a drag&amp;amp;drop enabled Silverlight application&lt;/h2&gt;  &lt;p&gt;Let’s start by creating a new MVVM Light application in Silverlight 4. In the moment the process of installing the project templates is manual, but it should be easy enough &lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;if you follow these instructions&lt;/a&gt;.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You can create a new MVVM Light application for Silverlight 4 in Visual Studio 2010 or in Expression Blend Preview 4. Simply choose File, New Project and then select the template called MVVM Light (SL4). &lt;/li&gt; &lt;/ul&gt; &lt;a title="Creating a new MVVM Light application" href="http://www.flickr.com/photos/36917929@N06/4188680130"&gt;&lt;img src="http://farm3.static.flickr.com/2625/4188680130_36d3e8741b.jpg" width="500" height="339" /&gt;&lt;/a&gt;   &lt;p&gt;We need to define a drop target for the files in the application. This can be done for just any UI element, so you can choose the main Grid (if you want the whole application to be a drop target) or any other element. In our case, to keep things simple, let’s define the main Grid as the drop target.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Set the property &lt;strong&gt;AllowDrop&lt;/strong&gt; to True, either in XAML or in Blend. Also change the other properties as shown in XAML below.       &lt;br /&gt;&lt;em&gt;Note: We will implement the DroppedFileContent property in a moment.&lt;/em&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;pre class="brush: xml;"&gt;&amp;lt;Grid x:Name="LayoutRoot"&lt;br /&gt;      AllowDrop="True"&lt;br /&gt;      Background="#FF9F9F9F"&amp;gt;&lt;br /&gt;    &amp;lt;TextBlock FontSize="36"&lt;br /&gt;               FontWeight="Bold"&lt;br /&gt;               Foreground="Purple"&lt;br /&gt;               Text="{Binding DroppedFileContent}"&lt;br /&gt;               VerticalAlignment="Center"&lt;br /&gt;               HorizontalAlignment="Center"&lt;br /&gt;               TextWrapping="Wrap"&lt;br /&gt;               TextTrimming="WordEllipsis" /&amp;gt;&lt;br /&gt;&amp;lt;/Grid&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="Setting AllowDrop in Blend" href="http://www.flickr.com/photos/36917929@N06/4188001409"&gt;&lt;img src="http://farm3.static.flickr.com/2675/4188001409_92612bd85c.jpg" width="332" height="170" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Open the MainViewModel and add a bindable property. &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Note: If you have the MVVM Light Toolkit installed, you can use a code snippet for this: Type &lt;strong&gt;mvvminpc&lt;/strong&gt; then &lt;strong&gt;tab&lt;/strong&gt; to expand the snippet, and enter the property’s name, &lt;strong&gt;tab&lt;/strong&gt;, its type, &lt;strong&gt;tab&lt;/strong&gt; and the name of the attribute. Then, edit the code until it looks like the one below:&lt;/em&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// The &amp;lt;see cref="DroppedFileContent" /&amp;gt; property's name.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public const string DroppedFileContentPropertyName = "DroppedFileContent";&lt;br /&gt;&lt;br /&gt;private string _droppedFile = "Drop file here";&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Gets the DroppedFileContent property.&lt;br /&gt;/// Changes to that property's value raise the PropertyChanged event. &lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public string DroppedFileContent&lt;br /&gt;{&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;        return _droppedFile;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;        if (_droppedFile == value)&lt;br /&gt;        {&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        _droppedFile = value;&lt;br /&gt;        RaisePropertyChanged(DroppedFileContentPropertyName);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Add a &lt;strong&gt;RelayCommand&amp;lt;DragEventArgs&amp;gt;&lt;/strong&gt; property to the MainViewModel. Name this property HandleDropCommand. You will need to add GalaSoft.MvvmLight.Command, System and System.Windows to the “using” section. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;public RelayCommand&amp;lt;DragEventArgs&amp;gt; HandleDropCommand&lt;br /&gt;{&lt;br /&gt;    get;&lt;br /&gt;    private set;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Finally, in the constructor, initialize the HandleDropCommand. We will start by simply showing a MessageBox when a file is dropped. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;public MainViewModel()&lt;br /&gt;{&lt;br /&gt;    HandleDropCommand = new RelayCommand&amp;lt;DragEventArgs&amp;gt;(e =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        System.Windows.MessageBox.Show("Drop");&lt;br /&gt;    });&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Add an EventToCommand trigger to the main Grid. This element is part of the GalaSoft.MvvmLight.Extras DLL which is referenced by default in the MVVM Light project template, so if you start like we described here, you don’t need to do anything to use EventToCommand. If you start from a non MVVM Light application, you need to add a reference to &lt;a href="http://galasoft.ch/mvvm/installing/manually/#binaries"&gt;GalaSoft.MvvmLight.dll, GalaSoft.MvvmLight.Extras.dll and System.Windows.Interactivity.dll&lt;/a&gt; (make sure you get the V3/alpha3 version).&lt;br /&gt;&lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;Build the application to make sure that you have the latest stand loaded in Blend. &lt;/li&gt;
&lt;br /&gt;      &lt;li&gt;In Blend, open the Assets tab, select the EventToCommand from the Behaviors category and drag/drop it on the LayoutRoot grid. &lt;/li&gt;
&lt;br /&gt;      &lt;li&gt;Then set the EventName property to “Drop”. &lt;/li&gt;
&lt;br /&gt;      &lt;li&gt;Bind the Command property to the HandleDropCommand in the MainViewModel which is the Explicit Data Context of the main Grid. &lt;br /&gt;        &lt;br /&gt;&lt;em&gt;Note: To open the databinding editor, press the advanced properties widget (the small black square) next to the Command property, and select Data Binding from the context menu.&lt;/em&gt; &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;a title="Binding to the command" href="http://www.flickr.com/photos/36917929@N06/4188061773"&gt;&lt;img src="http://farm5.static.flickr.com/4005/4188061773_187785761f.jpg" width="500" height="469" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;ul&gt;&lt;br /&gt;    &lt;li&gt;Finally, check the &lt;strong&gt;PassEventArgsToCommand&lt;/strong&gt; checkbox. &lt;br /&gt;&lt;br /&gt;      &lt;br /&gt;&lt;em&gt;Note: The combination of having an argument of type EventArgs in the RelayCommand, and the PassEventArgsToCommand property set to true will cause the event’s EventArgs to be passed directly to the RelayCommand’s parameter.&lt;/em&gt; &lt;/li&gt;
  &lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;&lt;a title="Setting the EventToCommand properties" href="http://www.flickr.com/photos/36917929@N06/4188068747"&gt;&lt;img src="http://farm3.static.flickr.com/2624/4188068747_d8391bac46.jpg" width="389" height="443" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;If you do not have Blend, you can also add the EventToCommand in Visual Studio in XAML: &lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;In the MainPage.xaml file, add two namespaces to the UserCommand tag: &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="brush: xml;"&gt;xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"&lt;br /&gt;xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras"&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;ul&gt;&lt;br /&gt;    &lt;li&gt;Then, add the EventToCommand trigger within the LayoutRoot grid with the following XAML code: &lt;/li&gt;
  &lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="brush: xml;"&gt;&amp;lt;i:Interaction.Triggers&amp;gt;&lt;br /&gt;    &amp;lt;i:EventTrigger EventName="Drop"&amp;gt;&lt;br /&gt;        &amp;lt;cmd:EventToCommand Command="{Binding HandleDropCommand, Mode=OneWay}"&lt;br /&gt;                            PassEventArgsToCommand="True" /&amp;gt;&lt;br /&gt;    &amp;lt;/i:EventTrigger&amp;gt;&lt;br /&gt;&amp;lt;/i:Interaction.Triggers&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Test the application: In Blend, press F5, or in Visual Studio press Ctrl-F5. Then, drag a file, and drop it on the main Grid. Notice how the mouse cursor indicates that the Grid is a valid drop target. &lt;/li&gt;
&lt;/ul&gt;
&lt;a title="Drop cursor" href="http://www.flickr.com/photos/36917929@N06/4188861348"&gt;&lt;img src="http://farm3.static.flickr.com/2675/4188861348_9541965f20.jpg" width="330" height="263" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Drop the file. You should see the MessageBox proving that the RelayCommand has been called successfully. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Getting and handling the files&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now that we have the RelayCommand ready, let’s access the DragEventArgs and get the file content from there. In this sample example, we will accept TXT files, and display the first few words from the file content.&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Replace the call to MessageBox within the HandleDropCommand implementation with the following code: &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;if (e.Data == null)&lt;br /&gt;{&lt;br /&gt;    return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var files = e.Data.GetData(DataFormats.FileDrop)&lt;br /&gt;    as FileInfo[];&lt;br /&gt;&lt;br /&gt;// This works with multiple files, but in that&lt;br /&gt;// simple case, let's just handle the 1st one&lt;br /&gt;if (files == null&lt;br /&gt;    || files.Length == 0)&lt;br /&gt;{&lt;br /&gt;    DroppedFileContent = "No files";&lt;br /&gt;    return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var file = files[0];&lt;br /&gt;&lt;br /&gt;if (!file.Extension.ToLower().Equals(".txt"))&lt;br /&gt;{&lt;br /&gt;    DroppedFileContent = "Not a TXT file";&lt;br /&gt;    return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;using (var stream = file.OpenRead())&lt;br /&gt;{&lt;br /&gt;    using (var reader = new StreamReader(stream))&lt;br /&gt;    {&lt;br /&gt;        // Read the first line&lt;br /&gt;        var line = reader.ReadLine();&lt;br /&gt;        DroppedFileContent = line;&lt;br /&gt;    }&lt;br /&gt;}                &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Few notes about this code:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;You can get a reference to the files dropped on the target with the DragEventArgs.Data.GetData method. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Note however that since we are in Silverlight within the security sandbox, you will get a security exception if you try to access the file’s FullName. You may get the content of the file (because it is dropped by the user) but not additional information about where these files are located. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;In this example, we get only the first file, but it is easy to see how we could access all the files dropped. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;We do handle only TXT files in this example. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Reading the file’s content is done in an usual way, with a Stream and a StreamReader. Note the presence of the “using” statements, to make it easier (no need to explicitly close and dispose the stream and the reader). For binary files, we would use a BinaryReader, etc… &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;An issue with Visual Studio 2010&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the course of preparing this article, I noticed an issue in Visual Studio 2010 when I attempt to debug the HandleDropCommand implementation. Even with a breakpoint placed within the code, the debugger does not break. I am not sure right now what is the reason, and the code does get executed, but this complicates debugging of course. I am investigating and talking to Microsoft about that, but right now I am not sure where it comes from.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the MVVM pattern, we generally try to avoid putting too much code in the code behind because it complicates the developer-designer workflow. Though I am not a puritan about that :) I think that EventToCommand and the new PassEventArgsToCommand property are reasonable steps to make UI interaction such as drag&amp;amp;drop even easier to code.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Hope you like it :)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137030"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=137030" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/137030.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/12/04/mvvm-light-v3alpha3-for-blend-3-and-blend-preview-4.aspx"&gt;MVVM Light V3/alpha3 for Blend 3 and Blend Preview 4&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Samstag, 5. Dezember 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;The project and item templates allowing you to create pre-wired MVVM Light applications are now also available for Expression Blend 3 and Expression Blend Preview for .NET 4 and Silverlight 4. The installation process is manual, but not difficult at all (unzipping a few files to predefined paths). I did &lt;a href="http://www.galasoft.ch/mvvm/installing/manually"&gt;document the installation process here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Of course the templates are also available for Visual Studio 2008 and Visual Studio 2010, as well as the binaries. The &lt;a href="http://mvvmlight.codeplex.com/"&gt;source code is available on Codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I still have one feature I want to add in V3, and then I will create a release version. Seeing how my schedule is, it will probably be during the holidays. However, V3/alpha 3 is very stable and I didn’t get any error report from users who upgraded. I also don’t think there will be any breaking change. At this point, I would recommend users who want the new features to upgrade to V3.&lt;/p&gt;  &lt;p&gt;I will post a list of new features in this version later.&lt;/p&gt;  &lt;p&gt;Happy coding!&lt;/p&gt; &lt;a title="MVVM Light V3 in Blend Preview for .NET 4 and Silverlight 4" href="http://www.flickr.com/photos/36917929@N06/4159924166"&gt;&lt;img src="http://farm3.static.flickr.com/2563/4159924166_e025e463aa.jpg" width="500" height="403" /&gt;&lt;/a&gt;   &lt;br /&gt;MVVM Light V3 in Blend Preview for .NET 4 and Silverlight 4   &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136714"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136714" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/136714.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/11/30/mvvm-light-toolkit-v3-alpha-3-for-wpf4sl4.aspx"&gt;MVVM Light Toolkit V3 Alpha 3 for WPF4/SL4&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Montag, 30. November 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/WindowsLiveWriter/MVVMLightToolkitV3Alpha3forWPF4SL4_14FA3/4084199726_d1cc8527aa_o%5B1%5D_2.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="4084199726_d1cc8527aa_o[1]" border="0" alt="4084199726_d1cc8527aa_o[1]" align="left" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/WindowsLiveWriter/MVVMLightToolkitV3Alpha3forWPF4SL4_14FA3/4084199726_d1cc8527aa_o%5B1%5D_thumb.png" width="244" height="210" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I just published the latest alpha version of the &lt;a href="http://galasoft.ch/mvvm/getstarted/"&gt;MVVM Light Toolkit&lt;/a&gt;. I will post more about the new features in this alpha version, but the most exciting is probably that with this release, the MVVM Light Toolkit works in &lt;strong&gt;Windows Presentation Foundation 4 and in Silverlight 4&lt;/strong&gt; (in Visual Studio 2010).&lt;/p&gt;  &lt;p&gt;There is no automatic installer for this version yet, but I wrote &lt;a href="http://galasoft.ch/mvvm/installing/manually/"&gt;a page describing how to install manually&lt;/a&gt; (it is as easy as unzipping a few files). All the features are also available for Visual Studio 2008 as usual.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://mvvmlight.codeplex.com/SourceControl/ListDownloadableCommits.aspx"&gt;source code was also updated&lt;/a&gt; on the Codeplex website.&lt;/p&gt;  &lt;p&gt;More documentation will follow soon so stay tuned. In the mean time, have fun with MVVM in WPF4/SL4!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136623"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136623" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/136623.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/11/13/bug-correction-in-messenger-and-new-feature-in-eventtocommand-mvvm.aspx"&gt;Bug correction in Messenger and new feature in EventToCommand (MVVM Light Toolkit V3 alpha)&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Freitag, 13. November 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;a title="MVVM_Black by lbugnionblog, on Flickr" href="http://www.flickr.com/photos/36917929@N06/4084199726/"&gt;&lt;img style="margin: 0px 10px 0px 0px; display: inline" alt="MVVM_Black" align="left" src="http://farm3.static.flickr.com/2617/4084199726_d1cc8527aa_o.png" width="240" height="206" /&gt;&lt;/a&gt;   &lt;p&gt;The advantage of pushing very early software to the advanced users is that bugs are detected before too many people suffer from them, and features requests can be placed and implemented without pain. This is exactly what happened with the MVVM Light Toolkit V3 alpha 2.&lt;/p&gt;  &lt;h2&gt;Bug correction&lt;/h2&gt;  &lt;p&gt;This applies to the new “send with token” feature of the Messenger. When a recipient registers for a type of message, it can provide a token (any object). Then, when a sender sends a message, it can also provide the same token. The Messenger will only send the messages to those recipients who provided the same token when registering. This enables creating separate optimized communication channels between objects. The token can be any object, for example a string, a GUID, etc…&lt;/p&gt;  &lt;p&gt;A silly mistake I made in the Messenger preventer simple values (such as an Integer) to be used as a token when sending a message. Simple values can be very valuable for this scenario, since a common reference is not needed to the token: It is simply a kind of contract that the sender and the receiver agree upon in advance. This is as decoupled as it gets, and yet enables a private channel of communication between two objects. Anyway, this mistake is corrected, and available in &lt;a href="http://mvvmlight.codeplex.com/SourceControl/ListDownloadableCommits.aspx"&gt;changeset 34855 on Codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;New feature&lt;/h2&gt;  &lt;p&gt;A &lt;a href="http://mvvmlight.codeplex.com/Thread/View.aspx?ThreadId=74835"&gt;user on Codeplex&lt;/a&gt; required an additional feature in the EventToCommand behavior: Adding a way to get the EventArgs from the fired event to the invoked command. I tried to find a good way to implement that, and decided to make this an opt-in feature. The scenario is:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;if you set the new property &lt;strong&gt;PassEventArgsToCommand&lt;/strong&gt; to true in the EventToCommand &lt;/li&gt;    &lt;li&gt;and you do NOT set the CommandParameter, nor the CommandParameterValue &lt;/li&gt;    &lt;li&gt;and you use a RelayCommand&amp;lt;EventArgs&amp;gt; as the data bound command &lt;/li&gt;    &lt;li&gt;then the parameter passed to the RelayCommand will be the EventArgs. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I believe that passing the EventArgs straight to the ViewModel is a bit overstepping the separation of concerns between the View and the ViewModel. However I do also acknowledge that there are cases where this can be useful, and so now it is possible. This feature is also implemented in &lt;a href="http://mvvmlight.codeplex.com/SourceControl/ListDownloadableCommits.aspx"&gt;changeset 34855 on Codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I also updated the sample application which can be downloaded here, or from Codeplex (see below).&lt;/p&gt;  &lt;h2&gt;Sample applications on Codeplex&lt;/h2&gt;  &lt;p&gt;I took the occasion to &lt;a href="http://mvvmlight.codeplex.com/sourcecontrol/changeset/view/34873?projectName=mvvmlight"&gt;upload some sample applications&lt;/a&gt; on Codeplex too.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;EventToCommand: This application demoes the feature of the same name, and is &lt;a href="http://blog.galasoft.ch/archive/2009/11/05/mvvm-light-toolkit-v3-alpha-2-eventtocommand-behavior.aspx"&gt;detailed in this blog post&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;CleanShutdown: This application shows a practical use for the Messenger, and a way to implement a clean shutdown that can easily be extended with additional components. &lt;a href="http://blog.galasoft.ch/archive/2009/10/18/clean-shutdown-in-silverlight-and-wpf-applications.aspx"&gt;More about this application here&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;RaiseCanExecuteChanged: This app shows how to use RelayCommands and more info about this sample is &lt;a href="http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx"&gt;found in this blog post&lt;/a&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Happy coding!!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136296"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136296" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/136296.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/11/07/mvvm-light-toolkit-logo-by-p.-schutz.aspx"&gt;MVVM Light Toolkit Logo by P. Schutz&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Samstag, 7. November 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;I met &lt;a href="http://info.philippe-schutz.com"&gt;Philippe Schutz&lt;/a&gt; at the TechDays in Geneva early this year, and have been following him on Facebook since then. He does amazing work with logos and icons, and it is only natural that I have thought of him when I decided to get a new logo and icons for the MVVM Light Toolkit.&lt;/p&gt;  &lt;p&gt;A brand identity is quite important to me even in private projects. This is why I created the site GalaSoft (&lt;a href="http://www.galasoft.ch"&gt;www.galasoft.ch&lt;/a&gt;) years ago, and started using this “brand” consistently as well as the cat logo (more about that on a &lt;a href="http://blog.galasoft.ch/archive/2008/10/19/redesigning-my-website-with-the-help-of-expression-blend.aspx"&gt;post I wrote last year&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;With the MVVM Light Toolkit starting to gain quite some popularity in the community, I have received a few suggestions to open a Facebook page for it, and to promote it on some other platforms. To do this, I needed a logo, something to display proudly and conveying the image, the message of MVVM Light.&lt;/p&gt;  &lt;p&gt;So I present to you proudly the new MVVM Light Toolkit logos designed by &lt;a href="http://info.philippe-schutz.com"&gt;Philippe Schutz&lt;/a&gt;:&lt;/p&gt; &lt;a title="MVVM_Black by lbugnionblog, on Flickr" href="http://www.flickr.com/photos/36917929@N06/4084199726/"&gt;&lt;img alt="MVVM_Black" src="http://farm3.static.flickr.com/2617/4084199726_d1cc8527aa_o.png" width="349" height="300" /&gt;&lt;/a&gt;   &lt;p&gt; &lt;/p&gt; &lt;a title="MVVM_White by lbugnionblog, on Flickr" href="http://www.flickr.com/photos/36917929@N06/4084208308/"&gt;&lt;img alt="MVVM_White" src="http://farm3.static.flickr.com/2706/4084208308_f541fd0597_o.png" width="356" height="300" /&gt;&lt;/a&gt;   &lt;p&gt;Yeah I know, they are beautiful.&lt;/p&gt;  &lt;p&gt;The design is meant to remind from the Windows 7 aesthetics, and of the Silverlight / .NET logos. I think it is a total success. Of course, the feather suggests the idea of lightness, as opposed to more complex frameworks that are very powerful, but also quite hard to understand and start with.&lt;/p&gt;  &lt;p&gt;I will work hard to include this new identity in the MVVM Light Toolkit and all the material related (websites, etc…). I am also preparing a Facebook page for “the fans” ;) So as usual, stay tuned!&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136123"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136123" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/136123.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/11/05/mvvm-light-toolkit-v3-alpha-2-eventtocommand-behavior.aspx"&gt;MVVM Light Toolkit V3 Alpha 2: EventToCommand behavior&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Donnerstag, 5. November 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Here is another early release of the MVVM Light Toolkit V3 (Alpha 2). I decided to release gradually and early as soon as a new part of this new version is ready, to allow advanced users to install, test and give feedback about the new features. If you haven’t seen it yet, the features available in &lt;a href="http://blog.galasoft.ch/archive/2009/10/27/mvvm-light-toolkit-v3-alpha-1.aspx"&gt;V3 Alpha 1 are described in a previous article&lt;/a&gt;. There will be a few more alphas before I make a V3 release, which means more good things are a-coming ;)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Usual disclaimer:&lt;/strong&gt; Alpha releases are not feature complete (meaning that APIs may change) and it is very possible that there are bugs in the code. Use with care and &lt;a href="http://www.galasoft.ch/contact"&gt;give feedback&lt;/a&gt; if something is not working, thanks!!&lt;/p&gt;  &lt;h2&gt;EventToCommand behavior&lt;/h2&gt;  &lt;p&gt;The new feature available in V3 Alpha2 is called &lt;strong&gt;EventToCommand&lt;/strong&gt; and is a &lt;a href="http://blogs.msdn.com/expression/archive/2009/03/23/an-introduction-to-behaviors-triggers-and-actions.aspx"&gt;Blend behavior&lt;/a&gt;. These pieces of code are optimized for Expression Blend, but can also be added directly in XAML, as we will see in this article.&lt;/p&gt;  &lt;p&gt;EventToCommand is used to &lt;strong&gt;bind an event to an ICommand directly in XAML&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Even though Expression Blend facilitates the usage of EventToCommand, it is not a prerequisite. EventToCommand can be used even if Expression Blend is not installed on your system, or on your users’ system.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h2&gt;Credits, History&lt;/h2&gt;  &lt;p&gt;This behavior reuses much code from the Expression Blend sample behavior named &lt;a href="http://expressionblend.codeplex.com/"&gt;InvokeDataCommand&lt;/a&gt;. I want to give props to the Expression team for creating and publishing these great samples. This would not have been possible without the work put into these samples. I want to especially thank &lt;strong&gt;Pete Blois&lt;/strong&gt; and &lt;strong&gt;Jeff Kelly&lt;/strong&gt; of the Expression team for their help.&lt;/p&gt;  &lt;p&gt;I also want to thank &lt;strong&gt;Rishi&lt;/strong&gt;, the creator of the &lt;a href="http://nroute.codeplex.com/"&gt;nRoute toolkit&lt;/a&gt;, for the interesting discussions and a couple of ideas that I implemented in EventToCommand. &lt;/p&gt;  &lt;p&gt;If you are already using InvokeDataCommand, the new EventToCommand behavior brings the following additional features:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;WPF / Silverlight compatibility&lt;/strong&gt;: The WPF version of the Expression Blend sample behavior InvokeDataCommand &lt;a href="http://expressionblend.codeplex.com/WorkItem/View.aspx?WorkItemId=5335"&gt;has a bug&lt;/a&gt; that prevents it to work (the Silverlight version runs fine though). The bug is corrected in EventToCommand, and both versions run well. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;CommandParameter is bindable&lt;/strong&gt;. You can bind this property, for example, to the value of a slider, the content of a TextBox, or any other property that is accessible to a data binding. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Disabling the attached control:&lt;/strong&gt; If the IsEnabled property is available for the attached element, you can opt-in to automatically disable the element if the Command’s CanExecute method returns false. This is dynamic, i.e. if the value of CanExecute changes, the element will be disabled/enabled.       &lt;ul&gt;       &lt;li&gt;In Silverlight, this is valid for all Controls. &lt;/li&gt;        &lt;li&gt;In WPF, this is valid for all FrameworkElements (Panels, Shapes, Controls, etc…). &lt;/li&gt;        &lt;li&gt;Note: By default, the element will &lt;strong&gt;not&lt;/strong&gt; be disabled/enabled automatically. Since one element can have multiple EventToCommand behaviors added to link multiple events to commands, you probably want only one or two of these to affect the IsEnabled property. This can be turned on by using the &lt;strong&gt;MustToggleIsEnabled&lt;/strong&gt; property, which can be either set in XAML (see below) or databound to a boolean value (checkbox, etc…). &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h2&gt;Source code, Binaries&lt;/h2&gt;  &lt;p&gt;The source code is &lt;a href="http://www.galasoft.ch/mvvm/resources/V3/GalaSoft.MvvmLight_Source_V3Alpha2.zip"&gt;available for download&lt;/a&gt; from my website. If you prefer, you can go &lt;a href="http://mvvmlight.codeplex.com/SourceControl/ListDownloadableCommits.aspx"&gt;to the Codeplex page&lt;/a&gt; where the source code has also been updated.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://www.galasoft.ch/mvvm/resources/V3/GalaSoft.MvvmLight_Binaries_V3Alpha2.zip"&gt;binaries can be found here&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;Features, Usage&lt;/h2&gt;  &lt;p&gt;&lt;strong&gt;EventToCommand&lt;/strong&gt; is a behavior that can be added to any FrameworkElement. This can be a Rectangle, an Ellipse (in fact, any shape), an Image, any Control (Button, Slider, CheckBox, RadioButton, and many many others) etc. In short: If you can add an element to your UI, you can probably add EventToCommand to it.&lt;/p&gt;  &lt;p&gt;For more information about ICommand (and their MVVM Light implementation, RelayCommand), &lt;a href="http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx"&gt;read this article&lt;/a&gt;. You can bind any event to any command. Typically, you will use this to link an element’s event to a command defined in a ViewModel class. For more information about the ViewModel pattern in WPF and Silverlight, &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;this page will help you&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;In Expression Blend:&lt;/h3&gt;  &lt;p&gt;Adding an EventToCommand to any element in Expression Blend is super easy thanks to the visual support.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Right click on the References folder and select “Add Reference”. &lt;/li&gt; &lt;/ul&gt; &lt;a title="Adding references" href="http://www.flickr.com/photos/36917929@N06/4076890743"&gt;&lt;img src="http://farm3.static.flickr.com/2658/4076890743_d398cda55c.jpg" width="359" height="187" /&gt;&lt;/a&gt;   &lt;ul&gt;   &lt;li&gt;Add a reference to the MVVM Light DLLs. You need two: &lt;strong&gt;GalaSoft.MvvmLight.dll&lt;/strong&gt; and &lt;strong&gt;GalaSoft.MvvmLight.Extras.dll&lt;/strong&gt;. In addition, you need the &lt;strong&gt;System.Windows.Interactivity.dll&lt;/strong&gt; which contains the base code for all behaviors.       &lt;br /&gt;&lt;em&gt;&lt;a href="http://www.galasoft.ch/mvvm/resources/V3/GalaSoft.MvvmLight_Binaries_V3Alpha2.zip"&gt;You can download the DLLs needed here&lt;/a&gt;.&lt;/em&gt;  &lt;/li&gt;    &lt;li&gt;Open your project in Expression Blend, and build it to make sure that everything is working fine. &lt;/li&gt;    &lt;li&gt;Locate the element on which you want to add a command in the Objects and Timeline panel. &lt;/li&gt;    &lt;li&gt;Open the Assets panel and find the Behaviors category.      &lt;br /&gt;&lt;em&gt;You can also find behaviors in the Asset library, which is the last button on the bottom of the toolbar.&lt;/em&gt; &lt;/li&gt; &lt;/ul&gt; &lt;a title="Finding EventToCommand" href="http://www.flickr.com/photos/36917929@N06/4077646092/"&gt;&lt;img alt="FliCA4" src="http://farm3.static.flickr.com/2475/4077646092_063122b6ae_o.png" width="672" height="225" /&gt;&lt;/a&gt;   &lt;ul&gt;   &lt;li&gt;Drag the EventToCommand behavior on the element you selected before in the Objects and Timeline panel. &lt;/li&gt; &lt;/ul&gt; &lt;a title="Drag and drop EventToCommand" href="http://www.flickr.com/photos/36917929@N06/4076892115"&gt;&lt;img src="http://farm4.static.flickr.com/3492/4076892115_3e696ab73a.jpg" width="364" height="209" /&gt;&lt;/a&gt;   &lt;ul&gt;   &lt;li&gt;With the EventToCommand selected, select the Properties panel. &lt;/li&gt;    &lt;li&gt;Select the event you want to handle. &lt;/li&gt; &lt;/ul&gt; &lt;a title="Selecting the event" href="http://www.flickr.com/photos/36917929@N06/4077647408"&gt;&lt;img src="http://farm3.static.flickr.com/2770/4077647408_b12c68f015.jpg" width="344" height="385" /&gt;&lt;/a&gt;   &lt;ul&gt;   &lt;li&gt;In the Miscellaneous section, bind the EventToCommand to the ICommand you want to execute when the event is fired.      &lt;br /&gt;&lt;em&gt;If you use &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;the MVVM pattern&lt;/a&gt;, you probably want to use an ICommand (&lt;a href="http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx"&gt;for example a RelayCommand&lt;/a&gt;) located in the ViewModel that is set as the DataContext for your window/page.         &lt;br /&gt;In WPF, you can also enter a value, for example ApplicationCommands.Save. In that case, you must &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.input.commandbinding.aspx"&gt;set a CommandBinding&lt;/a&gt;.&lt;/em&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a title="Advanced properties button" href="http://www.flickr.com/photos/36917929@N06/4076893421"&gt;&lt;img src="http://farm4.static.flickr.com/3487/4076893421_9bb2e9fc09.jpg" width="313" height="75" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a title="Data binding" href="http://www.flickr.com/photos/36917929@N06/4077648672"&gt;&lt;img src="http://farm3.static.flickr.com/2749/4077648672_5f276f2ef1.jpg" width="311" height="272" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Data binding editor" href="http://www.flickr.com/photos/36917929@N06/4077649032/"&gt;&lt;img alt="Fli249C" src="http://farm3.static.flickr.com/2740/4077649032_e2d741480e_o.png" width="619" height="179" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;If you want to pass a parameter to the ICommand, you can set the CommandParameter property. You can data bind CommandParameter to something (for example the Text property of a TextBox, etc…). If you want to set a hard coded value ) for example “Hello world”, you need to set CommandParameterValue in the XAML editor (see the “Caveat” section below). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a title="Advanced properties button" href="http://www.flickr.com/photos/36917929@N06/4076894807"&gt;&lt;img src="http://farm3.static.flickr.com/2792/4076894807_c22d0604fe.jpg" width="321" height="62" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a title="Data binding editor" href="http://www.flickr.com/photos/36917929@N06/4077649906/"&gt;&lt;img alt="FliD557" src="http://farm3.static.flickr.com/2688/4077649906_b89ee62060_o.png" width="621" height="288" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Finally, if you want the attached element to be disabled depending on the ICommand.CanExecute method, set the MustToggleIsEnabledValue property to True. You can also use MustToggleIsEnabled to data bind this property to something else (for example a CheckBox’s IsChecked property) (see the “Caveat” section below).      &lt;ul&gt;       &lt;li&gt;In Silverlight, this will only work on Controls. Use the VisualStateManager to modify the appearance of the disabled control. &lt;/li&gt;        &lt;li&gt;In WPF, any FrameworkElement can be disabled. Use the Triggers panel to modify the appearance of the FrameworkElement when it is disabled. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt; &lt;a title="Setting MustToggleIsEnabled" href="http://www.flickr.com/photos/36917929@N06/4076897585"&gt;&lt;img src="http://farm4.static.flickr.com/3517/4076897585_dc1f5ae7da.jpg" width="305" height="58" /&gt;&lt;/a&gt;   &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;In XAML&lt;/h3&gt;  &lt;p&gt;Using the XAML editor, follow the steps to add an EventToCommand to an element.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Add a reference to the MVVM Light DLLs. You need two: &lt;strong&gt;GalaSoft.MvvmLight.dll&lt;/strong&gt; and &lt;strong&gt;GalaSoft.MvvmLight.Extras.dll&lt;/strong&gt;. In addition, you need the &lt;strong&gt;System.Windows.Interactivity.dll&lt;/strong&gt; which contains the base code for all behaviors.       &lt;br /&gt;&lt;em&gt;&lt;a href="http://www.galasoft.ch/mvvm/resources/V3/GalaSoft.MvvmLight_Binaries_V3Alpha2.zip"&gt;You can download the DLLs needed here&lt;/a&gt;.&lt;/em&gt;  &lt;/li&gt;    &lt;li&gt;Add an xmlns for the following namespaces: &lt;/li&gt; &lt;/ul&gt;  &lt;pre class="xml" name="code"&gt;xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"&lt;br /&gt;xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras"&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;&lt;br /&gt;    &lt;p&gt;Add the EventToCommand to the desired element (in this example, a Rectangle) with the following XAML code: &lt;br /&gt;      &lt;br /&gt;&lt;em&gt;This presupposes that the DataContext of your page/window is set to a ViewModel containing the TestCommand command, as is usual in the MVVM pattern.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;  &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;Rectangle Fill="White"&lt;br /&gt;           Stroke="Black"&lt;br /&gt;           Width="200"&lt;br /&gt;           Height="100"&amp;gt;&lt;br /&gt;    &amp;lt;i:Interaction.Triggers&amp;gt;&lt;br /&gt;        &amp;lt;i:EventTrigger EventName="MouseEnter"&amp;gt;&lt;br /&gt;            &amp;lt;cmd:EventToCommand Command="{Binding TestCommand,&lt;br /&gt;                                          Mode=OneWay}"&lt;br /&gt;               CommandParameter="{Binding Text,&lt;br /&gt;                                  ElementName=MyTextBox,&lt;br /&gt;                                  Mode=OneWay}"&lt;br /&gt;               MustToggleIsEnabledValue="True" /&amp;gt;&lt;br /&gt;        &amp;lt;/i:EventTrigger&amp;gt;&lt;br /&gt;    &amp;lt;/i:Interaction.Triggers&amp;gt;&lt;br /&gt;&amp;lt;/Rectangle&amp;gt;&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Listening to events on other elements&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Because EventToCommand derives from System.Windows.Interactivity.TriggerAction&amp;lt;T&amp;gt;, it has a property named SourceName. With this property, you can attach EventToCommand to an element, but listen to events on another element. I didn’t explicitly forbid this in the code, but I would recommend against it. I think that it creates confusing code that can easily be broken. The best is probably to always listen to events on the attached element itself, and leave SourceName empty.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Small caveat&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Because of limitations in the Silverlight framework (specifically, the fact that data bindings can only be applied to a FrameworkElement), I had to resort to a small trick to make CommandParameter and MustToggleIsEnabled bindable. You will see in the code that there are four properties:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;&lt;strong&gt;CommandParameter&lt;/strong&gt;: &lt;br /&gt;&lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;In Silverlight, used to data bind CommandParameter. &lt;/li&gt;
&lt;br /&gt;      &lt;li&gt;In WPF, used either for data binding or for hard coded values. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;&lt;strong&gt;CommandParameterValue:&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;In Silverlight and in WPF, used for hard coded values only. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;&lt;strong&gt;MustToggleIsEnabled:&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;In Silverlight, used to data bind MustToggleIsEnabled. &lt;/li&gt;
&lt;br /&gt;      &lt;li&gt;In WPF, used either for data binding or for hard coded values. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;&lt;strong&gt;MustToggleIsEnabledValue:&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;In Silverlight and in WPF, used for hard coded values only. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;In short, if you don’t care about Silverlight compatibility for your XAML code, you can always use CommandParameter or MustToggleIsEnabled in WPF, either for data binding or for hard coded values. If you want to share your XAML between a Silverlight and a WPF application, then you should respect the rules above, or else you will get exceptions in Silverlight when the XAML is being parsed.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Demo application&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The demo application shows multiple usages of the EventToCommand behavior. The application runs in Silverlight and in WPF. &lt;a href="http://www.galasoft.ch/mvvm/resources/V3/EventToCommand.zip"&gt;Feel free to download the code&lt;/a&gt; and play with it to learn how to use EventToCommand!&lt;/p&gt;&lt;br /&gt;&lt;a title="EventToCommand demo" href="http://www.flickr.com/photos/36917929@N06/4076755313"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" align="right" src="http://farm3.static.flickr.com/2738/4076755313_e50e30c51e.jpg" width="500" height="359" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Binding a Button’s Click event and a Rectangle’s MouseEnter event to a simple RelayCommand. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Binding a Button’s Click event and a Rectangle’s MouseEnter event to a RelayCommand with a data bound parameter. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Binding a Button’s Click event and a Rectangle’s MouseEnter event to a RelayCommand with a hard coded parameter. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Binding a Button’s Click event and a Rectangle’s MouseEnter event to a RelayCommand and disabling them depending on the parameter’s value. &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Note: In Silverlight, Rectangles cannot be disabled.&lt;/em&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;License&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;MVVM Light Toolkit is distributed under the MIT License. This license grants you the right to do pretty much anything you want with the code, but don’t come crying if you break something (&lt;a href="http://www.galasoft.ch/license_MIT.txt"&gt;the exact wording is found here&lt;/a&gt;). Some parts of the GalaSoft.MvvmLight.Extras DLL are licensed under the MS-PL license.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt; | &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136016"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136016" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/136016.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/10/27/mvvm-light-toolkit-v3-alpha-1.aspx"&gt;MVVM Light Toolkit V3 Alpha 1&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Dienstag, 27. Oktober 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;This is a super early release of the next version of the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit&lt;/a&gt;. Please enjoy with care, be aware that this version is &lt;strong&gt;not fully tested&lt;/strong&gt; and &lt;strong&gt;not feature complete&lt;/strong&gt; by a long shot.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://galasoft.ch/mvvm/resources/V3/GalaSoft.MvvmLight_Binaries_V3Alpha1.zip"&gt;binaries are available for download&lt;/a&gt;, as well &lt;a href="http://galasoft.ch/mvvm/resources/V3/GalaSoft.MvvmLight_Source_V3Alpha1.zip"&gt;as the source code&lt;/a&gt;. In addition, the source code for V3 alpha1 is &lt;a href="http://mvvmlight.codeplex.com/SourceControl/ListDownloadableCommits.aspx"&gt;up to date in Codeplex&lt;/a&gt;, so you can also get the code from there.&lt;/p&gt;  &lt;h2&gt;What’s new in the Messenger?&lt;/h2&gt;  &lt;p&gt;So far the changes are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Bug correction: A “collection was modified” error could occur if a recipient was registering for a message type in the same method it used to receive another message. A similar error had been fixed in V2, but unfortunately this one remained. A unit test was added to isolate this case, and a fix has been implemented. &lt;/li&gt;    &lt;li&gt;New built-in message types: &lt;strong&gt;NotificationMessageAction and NotificationMessageAction&amp;lt;TCallbackParameter&amp;gt;&lt;/strong&gt;. These types can be used to send a message through the Messenger, and get a callback. A next post will give more information about this scenario. &lt;/li&gt;    &lt;li&gt;Renamed message types: To avoid some confusion, I renamed CommandMessage to &lt;strong&gt;NotificationMessage&lt;/strong&gt;. These messages are used to convey a notification (of type string) from a sender to a recipient. The term “command” was too confusing because it is a loaded term in the MVVM pattern (ICommand, RoutedCommand, RelayCommand, etc…). The term NotificationMessage is clearer. The old types are still available but have been marked Obsolete and will be removed in a future version of the toolkit. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;At this point it is good to remember that the Messenger class (from V2) can be used to send &lt;strong&gt;any kind of message&lt;/strong&gt;, from simple values to complex objects. The built-in message types are merely a convenience for specific scenarios, but nothing forces you to use them!&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;To make testing and mocking easier, it is now possible to &lt;strong&gt;override the Messenger.Default&lt;/strong&gt; property and provide another implementation. In addition, all the public methods of the Messenger class have now been marked virtual, which means that they can be overriden. A next post will give more information about this scenario. &lt;/li&gt;    &lt;li&gt;In V2, you could send a message to a given type of recipients only by using the method overload Send&amp;lt;TMessage, TRecipient&amp;gt;. In V3, &lt;strong&gt;TRecipient&lt;/strong&gt; &lt;strong&gt;can now be an interface&lt;/strong&gt;. This enables the Messenger to send messages to all the objects implementing a given interface. Note that the Messenger can send &lt;strong&gt;to any type of recipient&lt;/strong&gt;, and no special requirement is needed to receive a message. But if some of your objects happen to implement an interface (for example IViewModel), you can make sure that your messages reach only these recipients (of course, the recipients still need to register for a type of messages). &lt;/li&gt;    &lt;li&gt;When a recipient registers for a type of message, it can &lt;strong&gt;provide a token&lt;/strong&gt; (any object). Then, when a sender sends a message, it can also provide the same token. The Messenger will only send the messages to those recipients who provided the same token when registering. This enables creating separate optimized communication channels between objects. The token can be any object, for example a string, a GUID, etc… &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;What’s new in ViewModelBase?&lt;/h2&gt;  &lt;p&gt;In V3 alpha 1, a small change has been made to ViewModelBase: The constructor ViewModelBase(Messenger) has been replaced by &lt;strong&gt;ViewModelBase(IMessenger)&lt;/strong&gt;. This makes it easier to test and mock ViewModels that use their own implementation of the IMessenger interface.&lt;/p&gt;  &lt;p&gt;More changes will be implemented in V3 final.&lt;/p&gt;  &lt;h2&gt;Installation&lt;/h2&gt;  &lt;p&gt;if you have MVVM Light Toolkit V2 installed, you can easily deploy the V3 alpha1 DLLs manually by following the steps:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In Windows, choose the Start menu then All Programs, MVVM Light Toolkit, Binaries (Assemblies). This starts the Windows Explorer in the Binaries folder. &lt;/li&gt;    &lt;li&gt;(optional but recommended) Rename GalaSoft.MvvmLight.dll (and the Silverlight version too) to GalaSoft.MvvmLight.bak. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://galasoft.ch/mvvm/resources/V3/GalaSoft.MvvmLight_Binaries_V3Alpha1.zip"&gt;Download the V3 alpha1 binaries&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Extract this file to a local folder. &lt;/li&gt;    &lt;li&gt;Copy the WPF version of the assembly in Binaries, and then copy the Silverlight version to Binaries\Silverlight. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;After these few steps, you are all set to use the new features described here. Again, remember that this is a super early release, so use with care and revert to V2 if you are encountering issues. Also, please give me feedback and suggestions!&lt;/p&gt;  &lt;h2&gt;What else?&lt;/h2&gt;  &lt;p&gt;I will publish in the next few days a few blog posts about these new features, and also continue to work on new features. As soon as some features are ready, I will push an alpha2 and blog about it. Thanks a lot for the support!!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt;| &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135753"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135753" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/135753.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Tue, 02 Mar 2010 11:52:01 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100302115201A</guid></item><item><title>Updated Wiki: Home</title><link>http://mvvmlight.codeplex.com/wikipage?version=4</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;The MVVM Light Toolkit is a set of components helping people to get started in the Model - View - ViewModel pattern in Silverlight and WPF. It is a light and pragmatic framework that contains only the essential components needed.&lt;br /&gt;&lt;br /&gt;More information about the MVVM Light Toolkit can be found on &lt;a href="http://www.galasoft.ch/mvvm/getstarted" class="externalLink"&gt;http://www.galasoft.ch/mvvm/getstarted&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Tue, 02 Mar 2010 11:51:40 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100302115140A</guid></item><item><title>Updated Wiki: Home</title><link>http://mvvmlight.codeplex.com/wikipage?version=3</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;The MVVM Light Toolkit is a set of components helping people to get started in the Model - View - ViewModel pattern in Silverlight and WPF. It is a light and pragmatic framework that contains only the essential components needed.&lt;br /&gt;&lt;br /&gt;More information about the MVVM Light Toolkit can be found on &lt;a href="http://www.galasoft.ch/mvvm/getstarted" class="externalLink"&gt;http://www.galasoft.ch/mvvm/getstarted&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="rss"&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/10/27/mvvm-light-toolkit-v3-alpha-1.aspx"&gt;MVVM Light Toolkit V3 Alpha 1&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Tuesday, October 27, 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;This is a super early release of the next version of the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit&lt;/a&gt;. Please enjoy with care, be aware that this version is &lt;strong&gt;not fully tested&lt;/strong&gt; and &lt;strong&gt;not feature complete&lt;/strong&gt; by a long shot.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://galasoft.ch/mvvm/resources/V3/GalaSoft.MvvmLight_Binaries_V3Alpha1.zip"&gt;binaries are available for download&lt;/a&gt;, as well &lt;a href="http://galasoft.ch/mvvm/resources/V3/GalaSoft.MvvmLight_Source_V3Alpha1.zip"&gt;as the source code&lt;/a&gt;. In addition, the source code for V3 alpha1 is &lt;a href="http://mvvmlight.codeplex.com/SourceControl/ListDownloadableCommits.aspx"&gt;up to date in Codeplex&lt;/a&gt;, so you can also get the code from there.&lt;/p&gt;  &lt;h2&gt;What’s new in the Messenger?&lt;/h2&gt;  &lt;p&gt;So far the changes are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Bug correction: A “collection was modified” error could occur if a recipient was registering for a message type in the same method it used to receive another message. A similar error had been fixed in V2, but unfortunately this one remained. A unit test was added to isolate this case, and a fix has been implemented. &lt;/li&gt;    &lt;li&gt;New built-in message types: &lt;strong&gt;NotificationMessageAction and NotificationMessageAction&amp;lt;TCallbackParameter&amp;gt;&lt;/strong&gt;. These types can be used to send a message through the Messenger, and get a callback. A next post will give more information about this scenario. &lt;/li&gt;    &lt;li&gt;Renamed message types: To avoid some confusion, I renamed CommandMessage to &lt;strong&gt;NotificationMessage&lt;/strong&gt;. These messages are used to convey a notification (of type string) from a sender to a recipient. The term “command” was too confusing because it is a loaded term in the MVVM pattern (ICommand, RoutedCommand, RelayCommand, etc…). The term NotificationMessage is clearer. The old types are still available but have been marked Obsolete and will be removed in a future version of the toolkit. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;At this point it is good to remember that the Messenger class (from V2) can be used to send &lt;strong&gt;any kind of message&lt;/strong&gt;, from simple values to complex objects. The built-in message types are merely a convenience for specific scenarios, but nothing forces you to use them!&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;To make testing and mocking easier, it is now possible to &lt;strong&gt;override the Messenger.Default&lt;/strong&gt; property and provide another implementation. In addition, all the public methods of the Messenger class have now been marked virtual, which means that they can be overriden. A next post will give more information about this scenario. &lt;/li&gt;    &lt;li&gt;In V2, you could send a message to a given type of recipients only by using the method overload Send&amp;lt;TMessage, TRecipient&amp;gt;. In V3, &lt;strong&gt;TRecipient&lt;/strong&gt; &lt;strong&gt;can now be an interface&lt;/strong&gt;. This enables the Messenger to send messages to all the objects implementing a given interface. Note that the Messenger can send &lt;strong&gt;to any type of recipient&lt;/strong&gt;, and no special requirement is needed to receive a message. But if some of your objects happen to implement an interface (for example IViewModel), you can make sure that your messages reach only these recipients (of course, the recipients still need to register for a type of messages). &lt;/li&gt;    &lt;li&gt;When a recipient registers for a type of message, it can &lt;strong&gt;provide a token&lt;/strong&gt; (any object). Then, when a sender sends a message, it can also provide the same token. The Messenger will only send the messages to those recipients who provided the same token when registering. This enables creating separate optimized communication channels between objects. The token can be any object, for example a string, a GUID, etc… &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;What’s new in ViewModelBase?&lt;/h2&gt;  &lt;p&gt;In V3 alpha 1, a small change has been made to ViewModelBase: The constructor ViewModelBase(Messenger) has been replaced by &lt;strong&gt;ViewModelBase(IMessenger)&lt;/strong&gt;. This makes it easier to test and mock ViewModels that use their own implementation of the IMessenger interface.&lt;/p&gt;  &lt;p&gt;More changes will be implemented in V3 final.&lt;/p&gt;  &lt;h2&gt;Installation&lt;/h2&gt;  &lt;p&gt;if you have MVVM Light Toolkit V2 installed, you can easily deploy the V3 alpha1 DLLs manually by following the steps:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In Windows, choose the Start menu then All Programs, MVVM Light Toolkit, Binaries (Assemblies). This starts the Windows Explorer in the Binaries folder. &lt;/li&gt;    &lt;li&gt;(optional but recommended) Rename GalaSoft.MvvmLight.dll (and the Silverlight version too) to GalaSoft.MvvmLight.bak. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://galasoft.ch/mvvm/resources/V3/GalaSoft.MvvmLight_Binaries_V3Alpha1.zip"&gt;Download the V3 alpha1 binaries&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Extract this file to a local folder. &lt;/li&gt;    &lt;li&gt;Copy the WPF version of the assembly in Binaries, and then copy the Silverlight version to Binaries\Silverlight. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;After these few steps, you are all set to use the new features described here. Again, remember that this is a super early release, so use with care and revert to V2 if you are encountering issues. Also, please give me feedback and suggestions!&lt;/p&gt;  &lt;h2&gt;What else?&lt;/h2&gt;  &lt;p&gt;I will publish in the next few days a few blog posts about these new features, and also continue to work on new features. As soon as some features are ready, I will push an alpha2 and blog about it. Thanks a lot for the support!!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt;| &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135753"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135753" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/135753.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/10/18/clean-shutdown-in-silverlight-and-wpf-applications.aspx"&gt;Clean shutdown in Silverlight and WPF applications&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, October 18, 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;div class="frame"&gt;&lt;strong&gt;Update:&lt;/strong&gt; There was a small error in the Silverlight version of the application. The code used to navigate to a different webpage was wrong (in ApplicationExtensions.cs). I wrote this article in the Austrian mountains and did not have the web to check the code, sorry about that ;) I &lt;a href="http://galasoft.ch/mvvm/resources/Samples/CleanShutdown.zip"&gt;updated the source code&lt;/a&gt;. If you downloaded the source code before the 19th of October, 8AM GMT, you want to load the correct version. Apologies!! &lt;/div&gt;  &lt;p&gt;It is often difficult for large applications with multiple, loosely coupled components to cleanly shut down. Once a clean shutdown procedure is established, adding new components can disrupt the whole sequence, and things get ugly fast.&lt;/p&gt;  &lt;p&gt;In this article, we will show a way to use a Messenger to create a loosely coupled shutdown sequence, making it easy to add new components if needed. For the sake of the demonstration, we will use the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit Messenger&lt;/a&gt;, but of course this can also be realized with other messaging systems.&lt;/p&gt;  &lt;p&gt;As a bonus, &lt;a href="http://galasoft.ch/mvvm/resources/Samples/CleanShutdown.zip"&gt;the sample application&lt;/a&gt; will also show how to use the same Messenger class to enable communication between two ViewModels that don’t know each other, making it very easy to refactor the application or to modify the client application (for example by adding new screens, etc…).&lt;/p&gt; &lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7116270&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=7116270&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;p&gt;&lt;a href="http://vimeo.com/7116270"&gt;CleanShutdown demo&lt;/a&gt; from &lt;a href="http://vimeo.com/user2473028"&gt;Laurent Bugnion&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;What is a clean shutdown sequence?&lt;/h2&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Easy to request shutdown&lt;/h3&gt;  &lt;p&gt;To cleanly shut down a system, we need a central point from which the shutdown sequence can be started. This central point (we’ll call it the ShutdownService) should be reachable from any place in the application in an easy way. This way, if we add new components, they can request shut down without the ShutdownService needing any modification.&lt;/p&gt;  &lt;h3&gt;Possibility to interrupt shutdown&lt;/h3&gt;  &lt;p&gt;Some components might need a little more time to process important information, to display a “shutdown animation”, to log some information to a web service, etc. Some of these operations might be asynchronous, meaning that the shutdown sequence should be interrupted temporarily. This should be implemented in a way that allows adding new components without the ShutdownService or other components being changed.&lt;/p&gt;  &lt;h3&gt;Being notified upon shutdown&lt;/h3&gt;  &lt;p&gt;Some components might need to be notified when shutdown is happening, for example to save important information to the disk. Here too, we need to be able to add new components without changing anything else.&lt;/p&gt;  &lt;h2&gt;Requesting shutdown&lt;/h2&gt;  &lt;p&gt;This is quite easy: we simply provide a static method in the ShutdownService class. This method called RequestShutdown can be called by any object in the application. A more sophisticated implementation could include a reason for shutdown, letting the ShutdownService decide if the complete shutdown sequence must be executed, of if it should be ignored (for example, in case of a critical application error, a “catastrophic shutdown”, it could be dangerous or impossible to attempt a clean shutdown. Similarly, we could avoid to use a static method, and instead store an instance of the ShutdownService in an IoC container.&lt;/p&gt;  &lt;h2&gt;Giving everyone a possibility to interrupt shutdown&lt;/h2&gt;  &lt;p&gt;The ShutdownService provides a possibility for any object in the application to interrupt shutdown. We use the MVVM Light Toolkit’s Messenger class so that objects can register to be notified when a shutdown sequence starts, and to interrupt it if needed. We will use a &lt;strong&gt;NotificationMessageAction&amp;lt;bool&amp;gt;&lt;/strong&gt;. This message type contains:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A string specifying which operation needs to be initiated. In the case of the shutdown sequence, we will send a string meaning &lt;strong&gt;ConfirmShutdown&lt;/strong&gt;. The recipient of the message can take the opportunity to confirm that shutdown is OK, or to request shutdown to be stopped. &lt;/li&gt;    &lt;li&gt;A callback method (of type Action&amp;lt;bool&amp;gt;) that the recipient can call to prevent shutdown from happening. If the recipient calls the callback with &lt;strong&gt;true&lt;/strong&gt;, the shutdown sequence will be interrupted. If it calls the callback with &lt;strong&gt;false&lt;/strong&gt;, (or if it doesn’t call it at all), the shutdown sequence will continue. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Note that the recipient that interrupts shutdown is responsible for requesting shutdown again, after the asynchronous operation has completed. A more elaborate implementation could use a timeout to force shutdown if the asynchronous operation still did not complete after a certain time.&lt;/p&gt;  &lt;h2&gt;Notifying of imminent shutdown&lt;/h2&gt;  &lt;p&gt;When shutdown is really happening, a last message will be sent to notify recipients that this time, it’s for real. this gives a unique opportunity to recipients to take last minute measures, such as saving their state to a file, etc. In the sample application, we use a &lt;strong&gt;CommandMessage&lt;/strong&gt; with a string meaning &lt;strong&gt;NotifyShutdown&lt;/strong&gt;. Recipients who subscribed to this message can do what needs to be done.&lt;/p&gt;  &lt;h2&gt;Let’s see some code&lt;/h2&gt;  &lt;p&gt;So time to see some code. The source code can be downloaded here. The application can be run in WPF or in Silverlight, and looks like this:&lt;/p&gt; &lt;a title="2009101701 by lbugnionblog, on Flickr" href="http://www.flickr.com/photos/36917929@N06/4019732973/"&gt;&lt;img alt="2009101701" src="http://farm3.static.flickr.com/2481/4019732973_58db213863_o.png" width="420" height="565" /&gt;&lt;/a&gt;   &lt;ul&gt;   &lt;li&gt;The 3 sliders are used to change the color of the application’s background. &lt;/li&gt;    &lt;li&gt;The big X is used to close the application. &lt;/li&gt;    &lt;li&gt;On closing, the values of the 3 sliders are saved to a file. &lt;/li&gt;    &lt;li&gt;When the application starts, the saved values are read from the file and set. &lt;/li&gt;    &lt;li&gt;An animation is played when the application is closed (rotation, scale animation and fade out). &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;ShutdownService&lt;/h3&gt;  &lt;p&gt;This class exposes one static method used by other objects to request shutdown. The class is instantiated on startup by the Application object (in App.xaml.cs).&lt;/p&gt;  &lt;pre class="csharp" name="code"&gt;public static void RequestShutdown()&lt;br /&gt;{&lt;br /&gt;    var shouldAbortShutdown = false;&lt;br /&gt;&lt;br /&gt;    Messenger.Default.Send(new NotificationMessageAction&amp;lt;bool&amp;gt;(&lt;br /&gt;        Notifications.ConfirmShutdown,&lt;br /&gt;        shouldAbort =&amp;gt; shouldAbortShutdown |= shouldAbort));&lt;br /&gt;&lt;br /&gt;    if (!shouldAbortShutdown)&lt;br /&gt;    {&lt;br /&gt;        // This time it is for real&lt;br /&gt;        Messenger.Default.Send(new CommandMessage(Notifications.NotifyShutdown));&lt;br /&gt;&lt;br /&gt;        Application.Current.Shutdown();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;We start by setting a local variable to false. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Then we send a message that interested objects can register for. This provides them with a callback that they can call to interrupt shutdown. The callback is implemented as a lambda expression. If at least one recipient replies &lt;em&gt;true&lt;/em&gt;, the variable &lt;em&gt;shouldAbortShutdown&lt;/em&gt; is set to true. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Finally, if &lt;em&gt;shouldAbortShutdown&lt;/em&gt; is false (meaning that noone wants to interrupt), we send another message, this time announcing &lt;em&gt;NotifyShutdown&lt;/em&gt;). If anyone registers for this message, they will know that the shutdown is imminent. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;The last line shuts down the application. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;&lt;/h3&gt;&lt;br /&gt;
&lt;h3&gt;Playing an animation on shutdown&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In our sample application, we want to play an animation when the application is shut down. Animations are asynchronous, so we need to temporarily interrupt the shutdown sequence. To do this, we register for the message type NotificationMessageAction&amp;lt;bool&amp;gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To make it easier to share this code between Silverlight and WPF, we place this code in a class called ShutdownAnimationService. This class is instantiated in the MainWindow (for WPF) or in the Page (for Silverlight).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Note: Some like to see MVVM applications without any code in the code-behind of a View. However, playing animations, showing popups and other functionalities are really the responsibility of the View. &lt;strong&gt;There is nothing wrong in placing code in the View, as long as it is View-specific&lt;/strong&gt;!&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;Messenger.Default.Register&amp;lt;NotificationMessageAction&amp;lt;bool&amp;gt;&amp;gt;(this, message =&amp;gt;&lt;br /&gt;{&lt;br /&gt;    if (message.Command == Notifications.ConfirmShutdown)&lt;br /&gt;    {&lt;br /&gt;        if (!_shutdownAnimationHasRun)&lt;br /&gt;        {&lt;br /&gt;            var sbd = this.Resources["ShutdownStoryboard"] as Storyboard;&lt;br /&gt;            if (sbd != null)&lt;br /&gt;            {&lt;br /&gt;                message.Execute(true); // true == abort shutdown&lt;br /&gt;&lt;br /&gt;                sbd.Completed += ShutdownStoryboardCompleted;&lt;br /&gt;                sbd.Begin();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // If the animation ran already, no need to reply&lt;br /&gt;        // to the message, allow shutdown.&lt;br /&gt;    }&lt;br /&gt;});&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;When a message of type NotificationMessageAction&amp;lt;bool&amp;gt; is sent (which is what the ShutdownService does), the lambda expression is executed. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;First we check a global variable that tells us if the animation ran already. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;If it didn’t run yet, we check if there is a Storyboard named ShutdownStoryboard in the resources. If we don’t find it, we let the shutdown happen (this is just a failsafe in case something went wrong with the Storyboard). &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;If we do find the storyboard, we execute the callback with &lt;strong&gt;true&lt;/strong&gt; meaning that we interrupt the shutdown sequence. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Finally, we assign a “completed” event to the Storyboard and we start it. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;Remember that it is now the responsibility of this object to restart the shutdown sequence! It is done in the completed event of the Storyboard:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;void ShutdownStoryboardCompleted(object sender, System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;    _shutdownAnimationHasRun = true;&lt;br /&gt;&lt;br /&gt;    // Now that our pre-shutdown task is done&lt;br /&gt;    // we can request shutdown again.&lt;br /&gt;    ShutdownService.RequestShutdown();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Note: The animation is defined in the Page.xaml (for Silverlight) and in MainWindow.xaml (for WPF) and not in MainSkin.xaml. While storing the animation in the external resource dictionary would work in WPF, it fails in Silverlight.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Saving settings to a file&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The class SettingsViewModel defines three properties (Red, Green and Blue) that are databound to the 3 sliders. In fact, the SettingsViewModel is the D&lt;em&gt;ataContext &lt;/em&gt;of the half-white panel on the left of the X button.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public SettingsViewModel()&lt;br /&gt;{&lt;br /&gt;    if (!IsInDesignMode)&lt;br /&gt;    {&lt;br /&gt;        Messenger.Default.Register&amp;lt;CommandMessage&amp;gt;(this, m =&amp;gt;&lt;br /&gt;        {&lt;br /&gt;            if (m.Command == Notifications.NotifyShutdown)&lt;br /&gt;            {&lt;br /&gt;                SaveSettings();&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;        &lt;br /&gt;        _settingsFile = new SettingsFileHandler();&lt;br /&gt;&lt;br /&gt;        var savedSettings = _settingsFile.LoadSettings();&lt;br /&gt;        Messenger.Default.Send&amp;lt;Brush, MainViewModel&amp;gt;(&lt;br /&gt;            savedSettings.ApplicationBackgroundBrush);&lt;br /&gt;&lt;br /&gt;        _isLoading = true;&lt;br /&gt;&lt;br /&gt;        var solidBrush&lt;br /&gt;            = savedSettings.ApplicationBackgroundBrush as SolidColorBrush;&lt;br /&gt;        if (solidBrush != null)&lt;br /&gt;        {&lt;br /&gt;            Red = solidBrush.Color.R;&lt;br /&gt;            Green = solidBrush.Color.G;&lt;br /&gt;            Blue = solidBrush.Color.B;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        _isLoading = false;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;SettingsViewModel registers to receive messages of type CommandMessage. If the CommandMessage’s content is NotifyShutdown, it means the application is closing, and the object saves its state in a file. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;The rest of the constructor is used to load existing settings, and send an initial message to the MainViewModel to set the saved brush as the application background (see the section below titled “Sending messages from a ViewModel to another” for more details). &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Finally, we set the sliders to values corresponding to the saved ones. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;The saving itself happens in SettingsFileHandler, which is also responsible for loading the settings when the application starts.&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;In WPF, saving the settings and reading them back is made with the XamlWriter, resp XamlReader. These two classes are very useful to save any CLR object to a XAML file, and to restore it. In this sample, we save to the Temp folder, but a normal implementation would save to the AppData folder. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;In Silverlight, we don’t have XamlWriter, so we save to a plain text file in the IsolatedStorage instead, as explained in the section titled “Specific implementation details for Silverlight”. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;&lt;/h3&gt;&lt;br /&gt;
&lt;h3&gt;Requesting shutdown when the button is pressed&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The MainViewModel is set as the DataContext of the application’s window (in Silverlight, of the Page), with the exception of the half-white area with the 3 sliders (which is bound to the SettingsViewModel). Clicking the X button executes a RelayCommand defined in the MainViewModel. This command is very simple: It just calls the RequestShutdown method.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;ShutdownCommand = new RelayCommand(ShutdownService.RequestShutdown);&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Sending messages from a ViewModel to another&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Another thing the MainViewModel does it define a bindable property called BackgroundBrush. This property, when updated, automatically sets the background of the application (through databinding). However, how do we know when the user changes the Brush?&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In this simple application, we don’t really need two ViewModels. However, it makes sense to have them: If we decided to move the 3 sliders to a popup, for example, or to another window, it would be very easy to do, thanks to the separation of concerns: MainViewModel takes care of the MainWindow, SettingsViewModel takes care of the settings.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This poses a problem however: Since both ViewModels are separated, how can they communicate without being tightly coupled, which we really want to avoid. Well this is another usage for the Messenger: The MainViewModel registers for any message of type Brush:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public MainViewModel()&lt;br /&gt;{&lt;br /&gt;    if (IsInDesignMode)&lt;br /&gt;    {&lt;br /&gt;        BackgroundBrush = new SolidColorBrush(Colors.Orange);&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    {&lt;br /&gt;        Messenger.Default.Register&amp;lt;Brush&amp;gt;(&lt;br /&gt;            this, &lt;br /&gt;            true, &lt;br /&gt;            m =&amp;gt; BackgroundBrush = m);&lt;br /&gt;&lt;br /&gt;        ShutdownCommand&lt;br /&gt;            = new RelayCommand(ShutdownService.RequestShutdown);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;&lt;br /&gt;    &lt;p&gt;Whenever a message of type Brush is received, we just set the BackgroundBrush to it. &lt;br /&gt;      &lt;br /&gt;&lt;em&gt;The Messenger class can be used to send any message type, from simple values to complex objects!&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;  &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;&lt;br /&gt;    &lt;p&gt;Note that we use an overload of the Register application: The second parameter is set to true, indicating that we want to receive all messages of type Brush, and derived types too (SolidColorBrush, LinearGradientBrush, etc…).&lt;/p&gt;&lt;br /&gt;  &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;&lt;br /&gt;    &lt;p&gt;If we are in design mode (running in Expression Blend for example), we set the brush to Orange, so that we have something to see (otherwise the window would be transparent).&lt;/p&gt;&lt;br /&gt;  &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;Finally, we need someone to send updates! This is the SettingsViewModel’s task: When the user moves the sliders, we send a message of type SolidColorBrush, corresponding to the value of the 3 sliders. We do, however, send this message only to MainViewModel, thus avoiding too much unnecessary communication.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;private void SendBrushUpdate()&lt;br /&gt;{&lt;br /&gt;    if (_isLoading)&lt;br /&gt;    {&lt;br /&gt;        return;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    Messenger.Default.Send&amp;lt;Brush, MainViewModel&amp;gt;(&lt;br /&gt;      GetCurrentBrush());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private Brush GetCurrentBrush()&lt;br /&gt;{&lt;br /&gt;    return new SolidColorBrush(&lt;br /&gt;      Color.FromArgb(255, Red, Green, Blue));&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Specific implementation details for Silverlight&lt;/h3&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Most objects in this application are shared between WPF and Silverlight. &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Reminder: To share objects, you can right click on a folder, select “Add, Existing Item” from the context menu. Browse to the item you want to share, then instead of clicking on the “Add” button, click on the small arrow within this button, and choose “Add as a Link” from the menu that opens.&lt;/em&gt; &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Instead of saving the settings to the file system (which is not allowed in Silverlight), we save to the IsolatedStorage. The class SettingsFileHandler is not the same in Silverlight than in WPF, and takes care of this implementation detail. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Similarly, we do not have a XAML Writer in Silverlight, unfortunately. Instead of saving the settings to XAML (which is very easy and convenient), we use an extension of the partial class Settings (available only in the Silverlight version of the application) to serialize to a text format, and to deserialize from it. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Finally, we cannot shut down the application in Silverlight. We can, however, navigate to a different web page. Since the Shutdown() method doesn’t exist in the Application class in Silverlight, we provide an extension method (in the class ApplicationExtensions) with the same name. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;These few techniques (partial class with specific Silverlight extensions, extension methods, adding items as link) help to “bridge the gap” between WPF and Silverlight and to write less code while providing similar functionality.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;About NotificationMessageAction&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This useful message type (allowing to send a notification and providing a callback to the recipient) is not yet part of the MVVM Light Toolkit V2, but will be included in future versions. An implementation is provided as part of the sample application, but is not final yet. Comments or feedback is welcomed!&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Source code&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The &lt;a href="http://galasoft.ch/mvvm/resources/Samples/CleanShutdown.zip"&gt;sample application’s source code&lt;/a&gt; can be downloaded from my site.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This sample application shows two usages of the Messenger class:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Enable communication between decoupled ViewModels. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Create a clean shutdown sequence that can easily be extended with new objects if necessary. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;There are of course many other situations where a Messenger can be useful in an application. I hope to have awaken your interest for this very powerful yet simple to use component. For more information about the Messenger, RelayCommands or other parts of the MVVM Light Toolkit, please refer &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;to the Get Started page&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt;| &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135531"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135531" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/135531.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/10/18/mvvm-light-toolkit-on-codeplex.aspx"&gt;MVVM Light Toolkit on Codeplex&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, October 18, 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Responding to a few requests from MVVM Light Toolkit users, I opened a project on Codeplex and published the installer as well as the source code there.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mvvmlight.codeplex.com/"&gt;http://mvvmlight.codeplex.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Formally, nothing much changes, &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;my site&lt;/a&gt; and &lt;a href="http://blog.galasoft.ch/lbugnion/category/10201.aspx"&gt;my blog&lt;/a&gt; remain the main location to find information on the toolkit. Being on Codeplex gives the project more visibility, and provides a convenient place for discussions too.&lt;/p&gt;  &lt;p&gt;Happy coding!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em;"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt;| &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135527"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135527" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/135527.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/10/03/mvvm-light-toolkit-v2-whatrsquos-new.aspx"&gt;MVVM Light Toolkit V2: What&amp;rsquo;s new?&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, October 04, 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;I am happy and proud to announce that the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit V2 has been published&lt;/a&gt;! &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Shortcut: &lt;a href="http://www.galasoft.ch/mvvm/installing/"&gt;Jump directly to the installation instructions&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Excerpt from the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;Get Started page&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;The main purpose of the toolkit is to accelerate the creation and development of MVVM applications in WPF and Silverlight.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Like other MVVM implementations, the toolkit helps you to &lt;strong&gt;separate your View from your Model&lt;/strong&gt; which creates applications that are &lt;strong&gt;cleaner and easier to maintain and extend&lt;/strong&gt;. It also creates &lt;strong&gt;testable applications&lt;/strong&gt; and allows you to have a much thinner user interface layer (which is more difficult to test automatically).&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;This toolkit puts a special emphasis on the &lt;strong&gt;"blendability"&lt;/strong&gt; of the created application (i.e. the ability to open and &lt;strong&gt;edit the user interface into Expression Blend)&lt;/strong&gt;, including the creation of design-time data to enable the Blend users to "see something" when they work with data controls.&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;What’s new?&lt;/h2&gt;  &lt;p&gt;So what is new in V2? Here is a list that should help you adapt your existing applications to the new version.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;New Messenger API&lt;/h3&gt;  &lt;p&gt;The major change in this release is the &lt;strong&gt;new and improved Messenger class&lt;/strong&gt;. The API has been reworked and simplified to make sending and registering for messages a one-liner each. Any type of message can now be sent, from simple values (int, double, string etc…) to complex messages.&lt;/p&gt;  &lt;p&gt;The old methods are still available, however they have been marked Obsolete, which will cause warnings to appear in the Output window of Visual Studio when you build an existing application. I encourage you to upgrade to the new API, which should be quite harmless and rewarding.&lt;/p&gt;  &lt;p&gt;There is also an IMessenger interface that the Messenger implements, which makes mocking and testing easier.&lt;/p&gt;  &lt;p&gt;The new methods are &lt;a href="http://blog.galasoft.ch/archive/2009/09/27/mvvm-light-toolkit-messenger-v2-beta.aspx"&gt;described in an existing blog post&lt;/a&gt;, and additional blog posts around this component will follow.&lt;/p&gt;  &lt;h3&gt;Expression Blend templates&lt;/h3&gt;  &lt;p&gt;The MVVM Light templates (project templates and item templates) are &lt;strong&gt;now installed for Expression Blend 3 too&lt;/strong&gt;. You can create and run new MVVM Light applications in this fantastic tool. With the help of the Blend source code editor, you can even consider writing simple MVVM applications without using Visual Studio at all (though for more complex applications, this might prove difficult).&lt;/p&gt;  &lt;p&gt;More information about creating new applications in Expression Blend can be found &lt;a href="http://www.galasoft.ch/mvvm/creatingblend/"&gt;in a related article&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Never miss a new version!&lt;/h3&gt;  &lt;p&gt;I wanted to make a small application to help you check really fast if a new version of the MVVM Light Toolkit is available for download. Simply choose Start / MVVM Light Toolkit / Check Version On Server, et voila. It’s simple and fast (of course, an Internet connection is required ;)) More information &lt;a href="http://www.galasoft.ch/mvvm/installing/#newversion"&gt;about this application is available here&lt;/a&gt;. Oh, by the way, this is, of course, an MVVM Light application.&lt;/p&gt;  &lt;h3&gt;Easier to find in the Start menu&lt;/h3&gt;  &lt;p&gt;The shortcuts for V1.1 were installed in Start / All Programs / Laurent Bugnion (GalaSoft) / MVVM Light Toolkit. This was not very convenient, and made them more difficult to find than it should be. I changed this, and the shortcuts are now under Start / All Programs / MVVM Light Toolkit.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Note: The V2 installer attempts to delete the shortcut folder “Laurent Bugnion (GalaSoft)”, since it is not needed anymore. Depending on your system’s configuration, this step might be unsuccessful, and you might have to delete this shortcut folder manually.&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;Minor changes&lt;/h3&gt;  &lt;p&gt;A few minor changes have been made, that shouldn’t affect the way that the Toolkit works, but make things a bit cleaner:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The method RelayCommand.RaiseCanExecuteChanged(bool) has been marked Obsolete and replaced by RelayCommand.RaiseCanExecuteChanged(). The parameter was not really necessary and has been removed. &lt;/li&gt;    &lt;li&gt;In the “Add new project” dialog in Visual Studio, the WPF project template has been moved from “MVVM” to “Windows / MVVM”. It makes more sense to put all the WPF content under the Windows category. &lt;/li&gt;    &lt;li&gt;In the project template for WPF, I moved the resource dictionary "Skin.xaml” to a folder named “Skins” and I renamed the file “MainSkin.xaml”. &lt;/li&gt;    &lt;li&gt;For consistency, in Silverlight, I also added a “Skins” folder in the project template, and moved all the resources from App.xaml to MainSkin.xaml. Note that this features will not work in Silverlight 2 applications (but hey it’s time to move on, right?). &lt;/li&gt;    &lt;li&gt;Cosmetic changes: Quite a few small improvements (“polish”) have been made to make the experience (installing and using the toolkit) more consistent and clean. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Bugs corrections&lt;/h3&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;p&gt;There were a few issues with V1.1 that have been corrected in V2:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A scenario I had not envisioned was causing issues: When a recipient would receive a message, and in the method handling that message would register another recipient for the same message type, an Exception occurred. This bug has been corrected and unit tests added to verify this behavior.      &lt;br /&gt;&lt;em&gt;Thanks to &lt;a href="http://www.techheadbrothers.com/Auteurs.aspx/laurent-kempe" target="_blank"&gt;Laurent Kempé&lt;/a&gt; for finding this one and helping me solve it, &lt;a href="http://www.innoveo.com" target="_blank"&gt;and to Innoveo&lt;/a&gt; for giving him some time to do this.&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;The property ViewModelBase.IsInDesignMode was returning false all the time when the assembly was compiled in Release mode. The value is now correct in Debug and Release modes. &lt;/li&gt;    &lt;li&gt;(Silverlight only) When a RelayCommand was bound to a control, the control was not disabled properly if the command’s CanExecute method was returning false before it was bound.      &lt;br /&gt;&lt;em&gt;Props go to &lt;a href="http://blogs.ugidotnet.org/corrado/Default.aspx" target="_blank"&gt;Corrado Cavalli&lt;/a&gt; for finding this bug.&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;The manual step that was required when creating a new Silverlight MVVM Light application is not required anymore. I modified the project template to take care of this. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Conclusion&lt;/h2&gt;  &lt;p&gt;With these changes, the MVVM Light Toolkit should be easier to use, which is my main goal and the motivation that drives me.&lt;/p&gt;  &lt;p&gt;In next releases, new components will be added to make MVVM application development more fun and enjoyable. I am very careful when I add a new component to the toolkit to keep it “light”. The MVVM Light Toolkit is not a “solution to all the problems”, and never will be. It does, however, make it quite easy to start creating clean applications in Silverlight and Windows Presentation Foundation. Its stated goals (improving the blendability of applications, making them easier to test, separation of concerns, avoiding “component overload”) are, I hope, respected. I encourage you to give me feedback (many already did, and I am grateful for that) and new ideas.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="margin-bottom: -1em"&gt;   &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt;| &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135287"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135287" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/135287.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/09/27/mvvm-light-toolkit-messenger-v2-beta.aspx"&gt;MVVM Light Toolkit Messenger V2 beta&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, September 27, 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;div class="frame"&gt;&lt;strong&gt;Update&lt;/strong&gt;: &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit V2 has been released&lt;/a&gt;. Please use the new installer to upgrade your installation.&lt;/div&gt;  &lt;p&gt;Ever since I released V1.1 of the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit&lt;/a&gt;, I have received wonderful and constructive feedback from users. Most of it is flowing into V2, which is almost ready (I am still fighting a little with MSI installers and project/item templates for one feature I am particularly happy about, which is making project templates and item templates available in Expression Blend. That’s right, with V2 you can start Blend, and choose “File / New Project / MVVM Light”, then press F5 to have an application running.&lt;/p&gt;  &lt;p&gt;IMHO the most interesting and innovative change in the toolkit is the new &lt;strong&gt;Messenger&lt;/strong&gt;. In V1.1, quite a lot of plumbing as involved to register for messages, and to send messages. You had to implement IMessageRecipient to get messages, and all messages had to inherit the MessageBase class. Let’s face it, this was a bad idea. Thankfully, Glenn Block (of MEF and Prism fame) called me on that, and suggested a much, much cleaner implementation: Get rid of IMessageRecipient and use Actions instead to register for messages. Get rid of MessageBase and allow me to send anything through the Messenger.&lt;/p&gt;  &lt;h2&gt;The new API&lt;/h2&gt;  &lt;p&gt;This immediately appealed to me (and to some of my users whom I talked to) and I propose to you the Messenger V2. It implements the&lt;strong&gt; IMessenger&lt;/strong&gt; interface, which should make mocking and testing easier. The interface looks like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="csharp" name="code"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Registers a recipient for a type of message TMessage. The &amp;lt;see cref="action" /&amp;gt;&lt;br /&gt;/// parameter will be executed when a corresponding message is sent.&lt;br /&gt;/// &amp;lt;para&amp;gt;Registering a recipient does not create a hard reference to it,&lt;br /&gt;/// so if this recipient is deleted, no memory leak is caused.&amp;lt;/para&amp;gt;&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;typeparam name="TMessage"&amp;gt;The type of message that the recipient registers&lt;br /&gt;/// for.&amp;lt;/typeparam&amp;gt;&lt;br /&gt;/// &amp;lt;param name="recipient"&amp;gt;The recipient that will receive the messages.&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="action"&amp;gt;The action that will be executed when a message&lt;br /&gt;/// of type TMessage is sent.&amp;lt;/param&amp;gt;&lt;br /&gt;void Register&amp;lt;TMessage&amp;gt;(object recipient, Action&amp;lt;TMessage&amp;gt; action);&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Registers a recipient for a type of message TMessage.&lt;br /&gt;/// The &amp;lt;see cref="action" /&amp;gt; parameter will be executed when a corresponding &lt;br /&gt;/// message is sent. See the &amp;lt;see cref="receiveDerivedMessagesToo" /&amp;gt; parameter&lt;br /&gt;/// for details on how messages deriving from TMessage (or, if TMessage is an interface,&lt;br /&gt;/// messages implementing TMessage) can be received too.&lt;br /&gt;/// &amp;lt;para&amp;gt;Registering a recipient does not create a hard reference to it,&lt;br /&gt;/// so if this recipient is deleted, no memory leak is caused.&amp;lt;/para&amp;gt;&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;typeparam name="TMessage"&amp;gt;The type of message that the recipient registers&lt;br /&gt;/// for.&amp;lt;/typeparam&amp;gt;&lt;br /&gt;/// &amp;lt;param name="recipient"&amp;gt;The recipient that will receive the messages.&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="receiveDerivedMessagesToo"&amp;gt;If true, message types deriving from&lt;br /&gt;/// TMessage will also be transmitted to the recipient. For example, if a SendOrderMessage&lt;br /&gt;/// and an ExecuteOrderMessage derive from OrderMessage, registering for OrderMessage&lt;br /&gt;/// and setting receiveDerivedMessagesToo to true will send SendOrderMessage&lt;br /&gt;/// and ExecuteOrderMessage to the recipient that registered.&lt;br /&gt;/// &amp;lt;para&amp;gt;Also, if TMessage is an interface, message types implementing TMessage will also be&lt;br /&gt;/// transmitted to the recipient. For example, if a SendOrderMessage&lt;br /&gt;/// and an ExecuteOrderMessage implement IOrderMessage, registering for IOrderMessage&lt;br /&gt;/// and setting receiveDerivedMessagesToo to true will send SendOrderMessage&lt;br /&gt;/// and ExecuteOrderMessage to the recipient that registered.&amp;lt;/para&amp;gt;&lt;br /&gt;/// &amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="action"&amp;gt;The action that will be executed when a message&lt;br /&gt;/// of type TMessage is sent.&amp;lt;/param&amp;gt;&lt;br /&gt;void Register&amp;lt;TMessage&amp;gt;(object recipient, bool receiveDerivedMessagesToo, Action&amp;lt;TMessage&amp;gt; action);&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Sends a message to registered recipients. The message will&lt;br /&gt;/// reach all recipients that registered for this message type&lt;br /&gt;/// using one of the Register methods.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;typeparam name="TMessage"&amp;gt;The type of message that will be sent.&amp;lt;/typeparam&amp;gt;&lt;br /&gt;/// &amp;lt;param name="message"&amp;gt;The message to send to registered recipients.&amp;lt;/param&amp;gt;&lt;br /&gt;void Send&amp;lt;TMessage&amp;gt;(TMessage message);&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Sends a message to registered recipients. The message will&lt;br /&gt;/// reach only recipients that registered for this message type&lt;br /&gt;/// using one of the Register methods, and that are&lt;br /&gt;/// of the targetType.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;typeparam name="TMessage"&amp;gt;The type of message that will be sent.&amp;lt;/typeparam&amp;gt;&lt;br /&gt;/// &amp;lt;typeparam name="TTarget"&amp;gt;The type of recipients that will receive&lt;br /&gt;/// the message. The message won't be sent to recipients of another type.&amp;lt;/typeparam&amp;gt;&lt;br /&gt;/// &amp;lt;param name="message"&amp;gt;The message to send to registered recipients.&amp;lt;/param&amp;gt;&lt;br /&gt;void Send&amp;lt;TMessage, TTarget&amp;gt;(TMessage message);&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Unregisters a messager recipient completely. After this method&lt;br /&gt;/// is executed, the recipient will not receive any messages anymore.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="recipient"&amp;gt;The recipient that must be unregistered.&amp;lt;/param&amp;gt;&lt;br /&gt;void Unregister(object recipient);&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Unregisters a message recipient for a given type of messages only. &lt;br /&gt;/// After this method is executed, the recipient will not receive messages&lt;br /&gt;/// of type TMessage anymore, but will still receive other message types (if it&lt;br /&gt;/// registered for them previously).&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;typeparam name="TMessage"&amp;gt;The type of messages that the recipient wants&lt;br /&gt;/// to unregister from.&amp;lt;/typeparam&amp;gt;&lt;br /&gt;/// &amp;lt;param name="recipient"&amp;gt;The recipient that must be unregistered.&amp;lt;/param&amp;gt;&lt;br /&gt;void Unregister&amp;lt;TMessage&amp;gt;(object recipient);&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Unregisters a message recipient for a given type of messages and for&lt;br /&gt;/// a given action. Other message types will still be transmitted to the&lt;br /&gt;/// recipient (if it registered for them previously). Other actions that have&lt;br /&gt;/// been registered for the message type TMessage and for the given recipient (if&lt;br /&gt;/// available) will also remain available.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;typeparam name="TMessage"&amp;gt;The type of messages that the recipient wants&lt;br /&gt;/// to unregister from.&amp;lt;/typeparam&amp;gt;&lt;br /&gt;/// &amp;lt;param name="recipient"&amp;gt;The recipient that must be unregistered.&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="action"&amp;gt;The action that must be unregistered for&lt;br /&gt;/// the recipient and for the message type TMessage.&amp;lt;/param&amp;gt;&lt;br /&gt;void Unregister&amp;lt;TMessage&amp;gt;(object recipient, Action&amp;lt;TMessage&amp;gt; action);&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;

&lt;h2&gt;No Memory Leaks&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  &lt;p&gt;One neat thing with the Messenger (already in V1 and of course also in V2) is that the objects are referenced using &lt;a href="http://msdn.microsoft.com/en-us/library/system.weakreference.aspx"&gt;WeakReferences&lt;/a&gt;. Even though &lt;strong&gt;I recommend to unregister explicitly&lt;/strong&gt; when you want to delete the message recipient, if you omit to do so, you won’t cause a memory leak, because the Messenger does not keep a hard reference to the recipient.&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;

&lt;h2&gt;Backwards compatibility&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;All V1 methods are still available, but marked as Obsolete. This allows a smooth evolution of existing projects to the new syntax. When you build existing projects with the new toolkit, you will get warnings with a suggestion to move to the new syntax.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The &lt;strong&gt;MessageBase&lt;/strong&gt; class and the deriving message types (GenericMessage, CommandMessage, CommandMessageGeneric, DialogMessage, PropertyChangedMessage) are still available as suggestions for the payload (i.e. you can use them if you like, but you can also build your own messages, or send anything you want (objects, simple value types, etc…). It is perfectly legal to do:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;// Somewhere&lt;br /&gt;Messenger.Default.Register&amp;lt;string&amp;gt;(this, DoSomething);&lt;br /&gt;&lt;br /&gt;// Further&lt;br /&gt;private void DoSomething(string message)&lt;br /&gt;{&lt;br /&gt;    // ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Somewhere else&lt;br /&gt;Messenger.Default.Send(“Hello world”);&lt;/pre&gt;&lt;br /&gt;
&lt;h2&gt;Default Messenger, mocking, testing, IoC&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Note that like in V1, you can either use the default Messenger (Messenger.Default) or create your own messengers, for example to create specialized channels of communication. Since the IMessenger interface is now available, you can easily mock, test, use IoC containers, etc…&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The Messenger V2 as well as the rest of the toolkit will be available in a few days, and I will also prepare sample applications to demonstrate the use more in-depth.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt;| &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135121"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135121" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/135121.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx"&gt;Using RelayCommands in Silverlight and WPF&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Saturday, September 26, 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;Like most of us have found out the hard way, Silverlight 3 and Windows Presentation Foundation 3.5 are two quite similar beasts, but not totally the same. Silverlight is often presented as a subset of WPF (in fact, some features are available in Silverlight but not yet in WPF; generally speaking, though, it is true that Silverlight has less features than its big sister WPF) (yeah WPF is a girl, don’t tell me you didn’t know ;))&lt;/p&gt;  &lt;h2&gt;No Commands in Silverlight&lt;/h2&gt;  &lt;p&gt;One of the missing parts is &lt;a href="http://msdn.microsoft.com/en-us/library/ms752308.aspx" target="_blank"&gt;Commanding&lt;/a&gt;. Commands in WPF are used as a kind of “weak events”, i.e. they can be used to execute an action when a control is actuated (just like an event), but without the tight coupling that an event brings with it. You can specify a Command on an object, and &lt;em&gt;bind&lt;/em&gt; this command to a control in a completely different part of your application. You can have one person write the Command (typically a developer), and a completely other person (typically a designer) use the Command in the user interface. More interestingly, the designer can change the look and feel, for example replacing a series of Buttons by a Menu and MenuItems, and the developer doesn’t need to change anything to the code.&lt;/p&gt;  &lt;p&gt;In Silverlight, parts of the “plumbing” are available already (the &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.input.icommand.aspx" target="_blank"&gt;ICommand&lt;/a&gt;&lt;/strong&gt; interface) but most of it is missing. This led some very clever people to implement Commands in Silverlight, to replace the missing pieces by a custom implementation. In &lt;a href="http://compositewpf.codeplex.com/" target="_blank"&gt;Prism&lt;/a&gt;, the command implementation is called &lt;strong&gt;DelegateCommand&lt;/strong&gt;. In my &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit&lt;/a&gt;, I use a command that my good friend, colleague at IdentityMine and fellow WPF Disciple &lt;a href="http://joshsmithonwpf.wordpress.com/" target="_blank"&gt;Josh Smith&lt;/a&gt; created, called the &lt;strong&gt;RelayCommand&lt;/strong&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Now, the beautiful part is that RelayCommands (and DelegateCommands too) work wonders in Silverlight, but also in WPF. RelayCommands are making your life much easier in WPF too. No need to implement complicated code to bind the control to your method, just use a RelayCommand to do that. And since the implementation is (almost) the same in Silverlight too, you can share code between Silverlight and WPF.&lt;/p&gt;  &lt;h2&gt;The Execute Method&lt;/h2&gt;  &lt;p&gt;When the control to which a Command is bound is actuated by the user, the &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.input.icommand.execute.aspx" target="_blank"&gt;Execute&lt;/a&gt;&lt;/strong&gt; method is called. This method is specified by the ICommand interface, and every ICommand implementation must offer it (and of course RelayCommand does).&lt;/p&gt;  &lt;p&gt;The Execute method is passed to the RelayCommand’s constructor in form of an &lt;a href="http://msdn.microsoft.com/en-us/library/system.action.aspx" target="_blank"&gt;Action&lt;/a&gt; (or &lt;a href="http://msdn.microsoft.com/en-us/library/018hxwa8.aspx" target="_blank"&gt;Action&amp;lt;T&amp;gt;&lt;/a&gt; if the command has a parameter, in which case you must use the RelayCommand&amp;lt;T&amp;gt; class).&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Note: An Action is a method  (returning void) that can be passed to another object, for example as a parameter. It is something like a method pointer. If the method that the Action represents has a parameter, you must use Action&amp;lt;T&amp;gt; where T is the parameter’s type. There are also additional Action implementations with more than one parameters, but RelayCommand can only have 0 or 1 parameter. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The code to create a RelayCommand is:&lt;/p&gt;  &lt;pre class="csharp" name="code"&gt;public RelayCommand MyCommand&lt;br /&gt;{&lt;br /&gt;    get;&lt;br /&gt;    private set;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public MainViewModel()&lt;br /&gt;{&lt;br /&gt;    MyCommand = new RelayCommand(&lt;br /&gt;        () =&amp;gt; DoSomething());&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h6&gt;&lt;/h6&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Note: The syntax () =&amp;gt; DoSomething() is called a &lt;a href="http://msdn.microsoft.com/en-us/library/bb397687.aspx" target="_blank"&gt;lambda expression&lt;/a&gt;, and is the shortest way to define and pass an Action to an object. In the sample here, the method DoSomething will be called without any parameter when the Command is executed.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;CanExecute and CanExecuteChanged&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Apart from the Execute method that the ICommand interface specifies, there is an additional method and an event that every ICommand (including, of course, RelayCommand) must offer.&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;&lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.input.icommand.canexecute.aspx" target="_blank"&gt;CanExecute&lt;/a&gt;&lt;/strong&gt;: This method should return true if the command can be executed. When the Command is used on a control, the control will be disabled automatically when CanExecute returns false. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;&lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.input.icommand.canexecutechanged.aspx" target="_blank"&gt;CanExecuteChanged&lt;/a&gt;&lt;/strong&gt;: This event should be raised when the CanExecute method must be “requeried” (when the value of CanExecute might have changed, and should be re-evaluated). &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;p&gt;The CanExecute method can be passed to the RelayCommand constructor as a &lt;a href="http://msdn.microsoft.com/en-us/library/bb534960.aspx" target="_blank"&gt;Func&amp;lt;bool&amp;gt;&lt;/a&gt; (or a &lt;a href="http://msdn.microsoft.com/en-us/library/bb549151.aspx" target="_blank"&gt;Func&amp;lt;T, bool&amp;gt;&lt;/a&gt; if the command has a parameter).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Note: A Func is exactly like an Action, except that it has a return type. In the case of RelayCommands, the return type is bool: True if the command can be executed, false otherwise.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To create a command with an Execute and a CanExecute methods, you can do:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public RelayCommand MyCommand&lt;br /&gt;{&lt;br /&gt;    get;&lt;br /&gt;    private set;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public MainViewModel()&lt;br /&gt;{&lt;br /&gt;    MyCommand = new RelayCommand(&lt;br /&gt;        () =&amp;gt; DoSomething(),&lt;br /&gt;        () =&amp;gt; return MyValue);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the code above, if MyValue is true, the command can be executed; if it is false, the command cannot be executed (and controls using that command are disabled). This can depend on multiple parameters such as the state of the application, the time of the day, the weather outside, etc.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Note: When using lambda expressions, if the expression is just “return something”, the “return” keyword can be omitted. So the code becomes:&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public RelayCommand MyCommand&lt;br /&gt;{&lt;br /&gt;    get;&lt;br /&gt;    private set;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public MainViewModel()&lt;br /&gt;{&lt;br /&gt;    MyCommand = new RelayCommand(&lt;br /&gt;        () =&amp;gt; DoSomething(),&lt;br /&gt;        () =&amp;gt; MyValue);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h2&gt;The CommandManager&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;RelayCommands are available for WPF and Silverlight. However, one piece is missing in Silverlight: Windows Presentation Foundation has a class that is watching your UI, and that polls the commands’ state when something happens (for example when the user clicks a button, checks a checkbox, open a menu, etc…). This class is called the &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.input.commandmanager.aspx" target="_blank"&gt;CommandManager&lt;/a&gt;&lt;/strong&gt; and it doesn’t exist in Silverlight. Not at all. Nada.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;So when a user actions the UI in WPF, this triggers the CommandManager to &lt;em&gt;requery&lt;/em&gt; all the commands. In Silverlight you have to do the work yourself. This is why the RelayCommand class has a method called &lt;strong&gt;RaiseCanExecuteChanged&lt;/strong&gt;. This method forces the control that uses the command to check again if the command may be executed or not. And if the command may not be executed, the control is disabled.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;In WPF&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Strictly speaking, in WPF, and if your command is bound to a control that is watched by the CommandManager, you shouldn’t have to raise the CanExecuteChanged event yourself. You can let the CommandManager handle the situation. That said, external events might also change the state of the UI. Let’s imagine that the UI should be enabled from 9AM to 5PM, and then disabled for the night. The user is not triggering the UI, so the code should request (politely) that the CommandManager requeries the state of the commands. This is done by calling the method &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.input.commandmanager.invalidaterequerysuggested.aspx" target="_blank"&gt;InvalidateRequerySuggested&lt;/a&gt;&lt;/strong&gt; on the CommandManager. And as you guessed, the method RaiseCanExecuteChanged of the RelayCommand class does just that.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;And in Silverlight&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;However, since Silverlight doesn’t have the CommandManager, a little more manual work is involved. When the state of your object changes in a way that affects the UI, you must RaiseCanExecuteChanged on the corresponding commands. In Silverlight, this will raise the CanExecuteChanged event, thus forcing the bound controls to call CanExecute. In WPF,  like we just saw, this will call InvalidateRequerySuggested on the CommandManager.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Show me the code&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I created a small demo to illustrate this in Silverlight and in WPF, using the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit&lt;/a&gt;. Most of the code is shared between WPF and Silverlight. &lt;a href="http://galasoft.ch/mvvm/resources/Samples/RaiseCanExecuteChanged.zip"&gt;The source code for the application is available as usual&lt;/a&gt; (WPF 3.5 SP1 and Silverlight 3).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The demo exposes one command, created in the MainViewModel class:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public RelayCommand IncreaseCounterCommand&lt;br /&gt;{&lt;br /&gt;    get;&lt;br /&gt;    private set;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public MainViewModel()&lt;br /&gt;{&lt;br /&gt;    IncreaseCounterCommand = new RelayCommand(&lt;br /&gt;        () =&amp;gt; Counter++,&lt;br /&gt;        () =&amp;gt; CanIncrement);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The &lt;em&gt;Counter&lt;/em&gt; and &lt;em&gt;CanIncrement&lt;/em&gt; properties are raising the &lt;em&gt;PropertyChanged &lt;/em&gt;event when they are modified, thus data bindings that refer to these two properties will be updated whenever the properties are modified. What the code above means is: When the IncreaseCounterCommand is executed, check the CanIncrement property. If it is true, increment the Counter property.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;a title="2009092601 by lbugnionblog, on Flickr" href="http://www.flickr.com/photos/36917929@N06/3955642039/"&gt;&lt;img alt="2009092601" src="http://farm3.static.flickr.com/2427/3955642039_c37f9ac59d_o.png" width="640" height="238" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Figure 1: WPF demo application, Enabled and Disabled&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Disabling the button&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;We have a manual way to enable/disable the “increment” button: If you click on the “Enabled” text, it will turn into “Disabled”. This text (it’s a ToggleButton) is bound to the CanIncrement property directly. So in fact, when the text is “Disabled”, the CanIncrement property is set to false.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Of course, we want the controls using this command to be automatically disabled/enabled when the CanIncrement property changed. In WPF, nothing needs to be done, because the CommandManager will automatically requery the state of the commands when the user clicks on the UI. In fact the state of the commands is requeried very, very often during the course of the application. Even just moving the mouse on the UI causes the CommandManager to requery the state of commands bound to visible UI element.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In Silverlight however, no CommandManager, so we need to raise the CanExecuteChanged event on the command manually. Note that raising the CanExecuteChanged event can be useful in WPF too if you change the CanIncrement property in the code, for example through a timer. So, in fact, we will just call IncreaseCounterCommand.RaiseCanExecuteChanged() in Silverlight and in WPF too when CanIncrement changes:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public bool CanIncrement&lt;br /&gt;{&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;        return _canIncrement;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;        if (_canIncrement == value)&lt;br /&gt;        {&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        _canIncrement = value;&lt;br /&gt;&lt;br /&gt;        // Update bindings, no broadcast&lt;br /&gt;        RaisePropertyChanged(CanIncrementPropertyName);&lt;br /&gt;&lt;br /&gt;        IncreaseCounterCommand.RaiseCanExecuteChanged();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Just a warning: In V1 of the MVVM Light Toolkit, the method RaiseCanExecuteChanged was taking a boolean parameter. This boolean was actually not very useful, and has been removed in V2. Calling the old method still works in V2, but the parameter has no effect, and the method has been marked Obsolete. It will be removed in a future version of the toolkit.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;This sample uses V2 beta of the MVVM Light Toolkit.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Silverlight/WPF Compatibility&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Much of the code is shared between Silverlight and WPF in this small demo.&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;The ViewModel code is completely shared. The source code files are physically into the WPF project, and added as links into the Silverlight project. Implement once, compile twice. &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;To add a source code file as a link, choose “Add existing item” in Visual Studio. Then, select a file. Instead of clicking on Add, click on the arrow on the right of the Add button, and select “Add as a link”.&lt;/em&gt; &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;The resources defining the look&amp;amp;feel of the application are placed into the file Skins\MainSkin.xaml. The code n this file is 100% the same in WPF and in Silverlight. To reuse the Silverlight control templates in WPF too, I use the &lt;a href="http://www.codeplex.com/wpf" target="_blank"&gt;WPF Toolkit’s&lt;/a&gt; implementation of the &lt;a href="http://windowsclient.net/wpf/wpf35/wpf-35sp1-toolkit-visual-state-manager-overview.aspx" target="_blank"&gt;Visual State Manager&lt;/a&gt;. &lt;/li&gt;
&lt;br /&gt;  &lt;li&gt;Finally, the XAML code in the main UI element (MainWindow.xaml in WPF, and Page.xaml in Silverlight) is almost the same, except for one little difference: Since Silverlight doesn’t support commands out of the box, we rely on an &lt;em&gt;attached behaviour&lt;/em&gt; to bind the RelayCommand to the Button: &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;Button cmd:ButtonBaseExtensions.Command="{Binding IncreaseCounterCommand}"&lt;br /&gt;        Grid.Row="2"&lt;br /&gt;        Style="{StaticResource IncrementButtonStyle}"&lt;br /&gt;        Content="Increment" /&amp;gt;&lt;/pre&gt;&lt;br /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Commands in WPF are quite a complex topic, and I must admit that I didn’t completely understand them before I discovered the RelayCommand class. I totally fell in love with this fantastic helper. Josh Smith has been fantastic in allowing me to re-use his code in the MVVM Light Toolkit. I hope that this article will help you understand the power and convenience of RelayCommands. Happy coding!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: -1em"&gt;&lt;br /&gt;  &lt;div style="vertical-align: middle"&gt;&lt;a href="http://www.galasoft.ch/"&gt;&lt;img title="GalaSoft Laurent Bugnion" alt="GalaSoft Laurent Bugnion" src="http://www.galasoft.ch/logo/Current/logo_120x30.png" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div style="position: relative; top: -36px; left: 130px"&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/contact_en.html"&gt;Laurent Bugnion (GalaSoft)&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/galasoft"&gt;Subscribe&lt;/a&gt; | &lt;a href="http://twitter.com/lbugnion"&gt;Twitter&lt;/a&gt; | &lt;a href="http://www.facebook.com/lbugnion"&gt;Facebook&lt;/a&gt;| &lt;a href="http://www.flickr.com/photos/lbugnion"&gt;Flickr&lt;/a&gt; | &lt;a href="http://www.linkedin.com/in/lbugnion"&gt;LinkedIn&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135111"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135111" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/135111.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/09/09/new-articles-about-the-mvvm-light-toolkit-v1.1.1.aspx"&gt;New articles about the MVVM Light Toolkit V1.1.1&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Wednesday, September 09, 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;To help you get started with the MVVM Light Toolkit V1.1.1, I published two new articles:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.galasoft.ch/mvvm/creating/"&gt;Creating a new MVVM Light application in Visual Studio&lt;/a&gt;      &lt;br /&gt;This article will show you how to use Visual Studio to create a brand new MVVM Light application in Windows Presentation Foundation and in Silverlight.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.galasoft.ch/mvvm/sample1/"&gt;Understanding the MVVM Light application sample&lt;/a&gt;      &lt;br /&gt;When you create a new MVVM Light application, the application can be run and serves as a sample. This post helps you to understand the various components and layers in the MVVM Light application, and how they interact together.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Of course, before you read these two articles, you should probably check the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;Get Started page&lt;/a&gt; and &lt;a href="http://www.galasoft.ch/mvvm/installing"&gt;the Installation instructions&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Happy coding!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134589"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134589" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/134589.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/09/06/mvvm-light-toolkit-v1.1.1-whatrsquos-new.aspx"&gt;MVVM Light Toolkit V1.1.1: What&amp;rsquo;s new?&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, September 06, 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;The new version of the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit was just posted&lt;/a&gt;. So what is new? Well, to be honest not much.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;The biggest change is the new installer&lt;/strong&gt;. It is now a &lt;a href="http://www.galasoft.ch/mvvm/installing/"&gt;standalone MSI installer&lt;/a&gt;, because some of you reported some issues with the previous ClickOnce based setup. I personally liked the ClickOnce setup (and I got a few good comments about it), but of course a standalone, offline installer is more versatile, so be it :) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;The following shortcuts are created&lt;/strong&gt; in Start / All programs / Laurent Bugnion (GalaSoft) / MVVM Light Toolkit:       &lt;ul&gt;       &lt;li&gt;A shortcut to the locally installed source code. &lt;/li&gt;        &lt;li&gt;A shortcut to the locally installed binaries (DLLs). &lt;/li&gt;        &lt;li&gt;A shortcut to the Get Started web page online. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;You can change the paths of the files and the installation type&lt;/strong&gt; (WPF, SL or both) by executing the MVVM Light Toolkit setup and choosing the “repair” option. This is useful if you change the settings of Visual Studio for some reason. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Corrected a bug in the ViewModelBase.IsInDesignMode property&lt;/strong&gt;. This property returns true when the code (XAML or C#) is executed inside a design tool such as Expression Blend or Visual Studio. The bug and the solution are exposed &lt;a href="http://blog.galasoft.ch/archive/2009/09/05/detecting-design-time-mode-in-wpf-and-silverlight.aspx"&gt;in a previous blog post&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;The ViewModelBase class implements IDisposable now&lt;/strong&gt;. This is a scenario that occurs very often so it makes sense to make it the default. View Models can override the Dispose(bool) method if needed to clean up their resources. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Added two snippets for WPF and two for Silverlight&lt;/strong&gt;. These new snippets create an attached property or a dependency property using a constant as the property name. This makes it easier to handle the name and to avoid “magic strings”.       &lt;ul&gt;       &lt;li&gt;&lt;strong&gt;mvvmpropa&lt;/strong&gt; creates an attached property for WPF. &lt;/li&gt;        &lt;li&gt;&lt;strong&gt;mvvmpropdp&lt;/strong&gt; creates a dependency property for WPF. &lt;/li&gt;        &lt;li&gt;&lt;strong&gt;mvvmslpropa&lt;/strong&gt; creates an attached property for Silverlight. &lt;/li&gt;        &lt;li&gt;&lt;strong&gt;mvvmslpropdp&lt;/strong&gt; creates a dependency property for Silverlight. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Changed a few implementation details in the Project Template&lt;/strong&gt; to make the creation and deletion of View Models cleaner. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;That’s all for now. From today I will be working on the next version with a few interesting features added to the toolkit, and a few changes in the interface to make it even easier to use the MVVM Light Toolkit and create your MVVM applications in WPF and in Silverlight!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134527"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134527" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/134527.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/09/06/installing-the-mvvm-light-toolkit.aspx"&gt;Installing the MVVM Light Toolkit&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Sunday, September 06, 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;I just published a new version of the MVVM Light Toolkit. For more information about the toolkit in general, please refer to the &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;Get Started page on my website&lt;/a&gt;. Also, more blog posts will follow soon and help you get started with the MVVM Light Toolkit, and also help you understanding how you can use it to solve various issues related to the development of View Model based applications in Windows Presentation Foundation and in Silverlight.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://www.galasoft.ch/mvvm/installing/"&gt;installation procedure is explained in details on my website&lt;/a&gt;. Have fun!!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134524"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134524" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/134524.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="entry"&gt;&lt;div class="title"&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/09/05/detecting-design-time-mode-in-wpf-and-silverlight.aspx"&gt;Detecting design time mode in WPF and Silverlight&lt;/a&gt;&lt;/div&gt;&lt;div class="moreinfo"&gt;&lt;span class="date"&gt;Saturday, September 05, 2009&lt;/span&gt; &amp;nbsp;|&amp;nbsp; &lt;span class="source"&gt;From &lt;a target="_blank" href="http://blog.galasoft.ch/category/10201.aspx/rss"&gt;MVVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;We already talked often about providing design time data to your designers in Windows Presentation Foundation and in Silverlight, thus enabling them to work visually in design editors such as Expression Blend or the Visual Studio designer (codenamed Cider).&lt;/p&gt;  &lt;p&gt;The goal here is very simple: Designers should see something on their design surface. This sounds simple, but it can get quite tricky. Since Blend and Cider run (parts of) your application’s code to render the WPF or Silverlight elements, you need to make sure that the whole code can be executed safely. For some simple operations, it is not a problem (for example, getting today’s date and time is something that Blend and Cider can do easily) but others are more difficult. Here are two examples off the top of my head:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Connecting to a database to get data: Since the code that runs in Blend or Cider is executed in a different context than in the real application, this kind of code will fail in Blend/Cider and should be replaced by something else. &lt;/li&gt;    &lt;li&gt;Getting data from the internet: Here too, most attempts to connect to the internet from Blend/Cider will fail. In the best case you will still see your data controls, but they will be empty. In the worst case you might even get an exception in Blend, which will hide everything on the design surface. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Detecting this kind of issues requires a bit of experience, and to be very systematic. Thankfully you can easily attach a debugger to Expression Blend and execute the code from your application that Blend is running (how else did you think I found out how Blend works and developed my &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit&lt;/a&gt;? ;)) Attaching the debugger to Blend will be the topic for a next article.&lt;/p&gt;  &lt;h2&gt;Isolating/Replacing the code&lt;/h2&gt;  &lt;p&gt;Once you detected the offending lines in your code (and if you do WPF and Silverlight right, this will probably be within your View Model classes), you should provide something else to Blend/Cider to execute. But how can you make sure that you are executing this code in a design time editor and not at runtime?&lt;/p&gt;  &lt;p&gt;In fact this is a bit tricky. The problem is that there are a few, very different scenarios that need to be supported:&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="553"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="323"&gt;&lt;strong&gt;Running environment&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="228"&gt;&lt;strong&gt;IsInDesignMode&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="323"&gt;WPF element within Expression Blend&lt;/td&gt;        &lt;td valign="top" width="228"&gt;True&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="323"&gt;Silverlight element within Expression Blend&lt;/td&gt;        &lt;td valign="top" width="228"&gt;True&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="323"&gt;WPF element within Cider&lt;/td&gt;        &lt;td valign="top" width="228"&gt;True&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="323"&gt;Silverlight element within Cider&lt;/td&gt;        &lt;td valign="top" width="228"&gt;N/A (no Silverlight designer in Visual Studio for now)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="323"&gt;WPF application (runtime)&lt;/td&gt;        &lt;td valign="top" width="228"&gt;False&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="323"&gt;Silverlight application (runtime)&lt;/td&gt;        &lt;td valign="top" width="228"&gt;False&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="323"&gt;WPF user control embedded in a Windows Forms application (runtime)&lt;/td&gt;        &lt;td valign="top" width="228"&gt;False&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="323"&gt;WPF user control embedded in a Windows Forms application within Blend&lt;/td&gt;        &lt;td valign="top" width="228"&gt;N/A (Blend can open, but not render Windows Forms applications)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="323"&gt;WPF user control embedded in a Windows Forms application within Cider&lt;/td&gt;        &lt;td valign="top" width="228"&gt;True&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Yeah, I am pretty sure that many of you guys forgot that WPF user controls can be embedded in a Windows Forms application. I am guilty of not having tested this particular case in my MVVM Light Toolkit, and the IsInDesignMode property will return true even when the WinForms application is running, forcing the WPF user control to use design time data. Not good (this particular bug is corrected already and will be published in the next few days with V1.1.1 of the MVVM Light Toolkit).&lt;/p&gt;  &lt;h2&gt;Providing the IsInDesignMode property&lt;/h2&gt;  &lt;p&gt;I spent a bit of time talking to friends and checking the web, trying to find a unified code that would work in all situations. As much as I can, I try to get the exact same code to run in WPF and in Silverlight (most of the MVVM toolkit’s code is actually shared between WPF and SL), but in that particular case, nothing seemed to work reliably in both environments. So my solution is:&lt;/p&gt;  &lt;pre class="csharp" name="code"&gt;private static bool? _isInDesignMode;&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Gets a value indicating whether the control is in design mode (running in Blend&lt;br /&gt;/// or Visual Studio).&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public static bool IsInDesignModeStatic&lt;br /&gt;{&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;        if (!_isInDesignMode.HasValue)&lt;br /&gt;        {&lt;br /&gt;#if SILVERLIGHT&lt;br /&gt;            _isInDesignMode = DesignerProperties.IsInDesignTool;&lt;br /&gt;#else&lt;br /&gt;            var prop = DesignerProperties.IsInDesignModeProperty;&lt;br /&gt;            _isInDesignMode&lt;br /&gt;                = (bool)DependencyPropertyDescriptor&lt;br /&gt;                .FromProperty(prop, typeof(FrameworkElement))&lt;br /&gt;                .Metadata.DefaultValue;&lt;br /&gt;#endif&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return _isInDesignMode.Value;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;h2&gt;Known issues&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;There is one known issue with this code though: When you open the WinForms designer with the embedded WPF user control in Cider, &lt;strong&gt;the code returns false&lt;/strong&gt;, and thus the runtime mode data is used. This might be a problem because runtime data can crash the designer and nothing will be rendered. After turning the problem in my head a few nights, I decided that this would just be a documented bug. If you are in the situation where you must absolutely use the Windows Forms designer in Cider, and you have an embedded WPF user control in your window, and the designer crashes, I recommend commenting out the code that causes the crash, designing your WinForms window, and then restoring the code. This is annoying, granted, but I don’t have a better solution right now. If anyone knows a way around this problem, please feel free to leave a comment!!&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Usage&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This property is used over and over again as soon as you do development in Blend. It makes sense to expose it in a way that makes it easy to use.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In my &lt;a href="http://www.galasoft.ch/mvvm/getstarted"&gt;MVVM Light Toolkit&lt;/a&gt;, the property is a static property of the ViewModelBase class. This makes it very easy to use in the source code. However, binding to a static property is a bit cumbersome in WPF and impossible in Silverlight. So I also provide a non static property, that is just a wrapper around the static one. The full code is found below. Using the property becomes:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;In XAML:&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;Window x:Class="MvvmLight6.MainWindow"&lt;br /&gt;        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;        Height="400"&lt;br /&gt;        Width="300"&lt;br /&gt;        DataContext="{Binding Main, Source={StaticResource Locator}}"&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;Window.Resources&amp;gt;&lt;br /&gt;        &amp;lt;BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /&amp;gt;&lt;br /&gt;    &amp;lt;/Window.Resources&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;Grid&amp;gt;&lt;br /&gt;        &amp;lt;TextBlock Text="Design mode only!!"&lt;br /&gt;            Visibility="{Binding IsInDesignMode, &lt;br /&gt;                Converter={StaticResource BooleanToVisibilityConverter}}" /&amp;gt;&lt;br /&gt;    &amp;lt;/Grid&amp;gt;&lt;br /&gt;&amp;lt;/Window&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;In C# (within the View Model)&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public MainViewModel()&lt;br /&gt;{&lt;br /&gt;    if (IsInDesignMode)&lt;br /&gt;    {&lt;br /&gt;        // Code runs in Blend --&amp;gt;&lt;br /&gt;        // create design time data.&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    {&lt;br /&gt;        // Code runs in runtime --&amp;gt;&lt;br /&gt;        // Connect to DB, services, etc...&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;In C# (outside of the View Model)&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public MainWindow()&lt;br /&gt;{&lt;br /&gt;    this.InitializeComponent();&lt;br /&gt;&lt;br /&gt;    if (!ViewModelBase.IsInDesignModeStatic)&lt;br /&gt;    {&lt;br /&gt;        this.Closing += (s, e) =&amp;gt; ViewModelLocator.Dispose();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;The full code&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The whole property, including static and non-static accessor is:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;private static bool? _isInDesignMode;&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Gets a value indicating whether the control is in design mode (running in Blend&lt;br /&gt;/// or Visual Studio).&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public static bool IsInDesignModeStatic&lt;br /&gt;{&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;        if (!_isInDesignMode.HasValue)&lt;br /&gt;        {&lt;br /&gt;#if SILVERLIGHT&lt;br /&gt;            _isInDesignMode = DesignerProperties.IsInDesignTool;&lt;br /&gt;#else&lt;br /&gt;            var prop = DesignerProperties.IsInDesignModeProperty;&lt;br /&gt;            _isInDesignMode&lt;br /&gt;                = (bool)DependencyPropertyDescriptor&lt;br /&gt;                .FromProperty(prop, typeof(FrameworkElement))&lt;br /&gt;                .Metadata.DefaultValue;&lt;br /&gt;#endif&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return _isInDesignMode.Value;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Gets a value indicating whether the control is in design mode (running under Blend&lt;br /&gt;/// or Visual Studio).&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;[SuppressMessage(&lt;br /&gt;    "Microsoft.Performance",&lt;br /&gt;    "CA1822:MarkMembersAsStatic",&lt;br /&gt;    Justification = "Non static member needed for data binding")]&lt;br /&gt;public bool IsInDesignMode&lt;br /&gt;{&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;        return IsInDesignModeStatic;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134519"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134519" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;&lt;br /&gt;&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;img src="http://blog.galasoft.ch/aggbug/134519.aspx" width="1" height="1" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="accentbar"&gt;&lt;span class="left"&gt;&amp;nbsp;&lt;/span&gt;MVVM News Feed&lt;span class="right"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>lbugnion</author><pubDate>Tue, 03 Nov 2009 09:14:53 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20091103091453A</guid></item></channel></rss>