<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>MIX</title>
        <link>http://blog.galasoft.ch/category/6583.aspx</link>
        <description>MIX conference in Las Vegas</description>
        <language>en-US</language>
        <copyright>Laurent Bugnion</copyright>
        <managingEditor>laurent@galasoft.ch</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
        <item>
            <title>Sample code for my #mix10 talk online</title>
            <link>http://blog.galasoft.ch/archive/2010/03/16/sample-code-for-my-mix10-talk-online.aspx</link>
            <description>&lt;div class="frame"&gt;&lt;strong&gt;Update:&lt;/strong&gt; Seems that not everyone is running on the latest and greatest, which is understandable. To avoid confusion, I added the version of the framework for which these samples are available. In the next few days, I will try to port them to other versions in order to have working samples in WPF3.5, WPF4, SL3 and SL4. Please be patient, thanks!&lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="frame"&gt;&lt;strong&gt;Update 2: &lt;/strong&gt;I reconfigured the samples to include all the external assemblies you need to run them (including Microsoft.Practices.Unity.dll, System.Windows.Interactivity and Microsoft.Expression.Interactions.dll)&lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="frame"&gt;&lt;strong&gt;Update 3:&lt;/strong&gt; The MVVM Demo 2 (end) now contains the MVVM Light application for Windows Phone 7 that I demoed at TechDays Belgium 2010 in Antwerpen. It features sharing most of the code between the Silverlight 4 application and the Windows Phone 7 application, and creating a new view for the phone application on top of the MainViewModel.&lt;/div&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-MVVM-Samples.zip"&gt;All the source code (including the referenced assemblies)&lt;/a&gt;       &lt;ul&gt;       &lt;li&gt;MVVM Demo 1 (start) &lt;strong&gt;[SL4]&lt;/strong&gt; &lt;/li&gt;        &lt;li&gt;MVVM Demo 1 (final) &lt;strong&gt;[SL4]&lt;/strong&gt; &lt;/li&gt;        &lt;li&gt;Command sample &lt;strong&gt;[SL4]&lt;/strong&gt; &lt;/li&gt;        &lt;li&gt;RelayCommand sample &lt;strong&gt;[SL4]&lt;/strong&gt; &lt;/li&gt;        &lt;li&gt;Messaging sample &lt;strong&gt;[WPF4]&lt;/strong&gt; &lt;/li&gt;        &lt;li&gt;MVVM Demo 2 (start) &lt;strong&gt;[SL4]&lt;/strong&gt; &lt;/li&gt;        &lt;li&gt;MVVM Demo 2 (final) &lt;strong&gt;[SL4]&lt;/strong&gt; &lt;/li&gt;     &lt;/ul&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;/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/03/16/sample-code-for-my-mix10-talk-online.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=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;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;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;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;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://blog.galasoft.ch/aggbug/138561.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://blog.galasoft.ch/archive/2010/03/16/sample-code-for-my-mix10-talk-online.aspx</guid>
            <pubDate>Tue, 16 Mar 2010 22:19:40 GMT</pubDate>
            <wfw:comment>http://blog.galasoft.ch/comments/138561.aspx</wfw:comment>
            <comments>http://blog.galasoft.ch/archive/2010/03/16/sample-code-for-my-mix10-talk-online.aspx#feedback</comments>
            <slash:comments>49</slash:comments>
            <wfw:commentRss>http://blog.galasoft.ch/comments/commentRss/138561.aspx</wfw:commentRss>
            <trackback:ping>http://blog.galasoft.ch/services/trackbacks/138561.aspx</trackback:ping>
        </item>
        <item>
            <title>What&amp;rsquo;s new in MVVM Light V3</title>
            <link>http://blog.galasoft.ch/archive/2010/03/16/whatrsquos-new-in-mvvm-light-v3.aspx</link>
            <description>&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)

private void Application_Startup(
    object sender,
    StartupEventArgs e)
{
    RootVisual = new MainPage();
    DispatcherHelper.Initialize();
}


// Initializing in WPF (in App.xaml)

static App()
{
    DispatcherHelper.Initialize();
}&lt;/pre&gt;

&lt;h3&gt;Verifying if a property exists&lt;/h3&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;h3&gt;Replacing IDisposable with ICleanup&lt;/h3&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;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;h3&gt;Passing EventArgs to command with EventToCommand&lt;/h3&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;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;p&gt;&lt;em&gt;Setting EventToCommand and PassEventArgsToCommand:&lt;/em&gt;&lt;/p&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;Grid x:Name="LayoutRoot"&amp;gt;
    &amp;lt;i:Interaction.Triggers&amp;gt;
        &amp;lt;i:EventTrigger EventName="MouseEnter"&amp;gt;
            &amp;lt;cmd:EventToCommand Command="{Binding MyCommand}"
                                PassEventArgsToCommand="True" /&amp;gt;
        &amp;lt;/i:EventTrigger&amp;gt;
    &amp;lt;/i:Interaction.Triggers&amp;gt;
&amp;lt;/Grid&amp;gt;&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;Getting the EventArgs in the command&lt;/em&gt;&lt;/p&gt;

&lt;pre class="csharp" name="code"&gt;public RelayCommand&amp;lt;MouseEventArgs&amp;gt; MyCommand
{
    get;
    private set;
}

public MainViewModel()
{
    MyCommand = new RelayCommand&amp;lt;MouseEventArgs&amp;gt;(e =&amp;gt;
    {
        // e is of type MouseEventArgs
    });
}&lt;/pre&gt;

&lt;h3&gt;Changes to templates&lt;/h3&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;h3&gt;Bug corrections&lt;/h3&gt;

&lt;ul&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;p&gt;The following features have been added &lt;strong&gt;after&lt;/strong&gt; V2.&lt;/p&gt;

&lt;h3&gt;Sending messages with callback&lt;/h3&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;ul&gt;
  &lt;li&gt;NotificationMessageWithCallback: Base class for messages with callback. &lt;/li&gt;

  &lt;li&gt;NotificationMessageAction: A class with string notification, and a parameterless callback. &lt;/li&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;p&gt;To send a message with callback, use the following code:&lt;/p&gt;

&lt;pre class="csharp" name="code"&gt;var message = new NotificationMessageAction&amp;lt;bool&amp;gt;(
    "Hello world",
    callbackMessage =&amp;gt;
    {
        // This is the callback code
        if (callbackMessage)
        {
            // ...
        }
    });

Messenger.Default.Send(message);&lt;/pre&gt;

&lt;p&gt;To register and receive a message with callback, use the following code:&lt;/p&gt;

&lt;pre class="xml" name="code"&gt;Messenger.Default.Register&amp;lt;NotificationMessageAction&amp;lt;bool&amp;gt;&amp;gt;(
    this,
    message =&amp;gt;
    {
        // Do something
        
        // Execute the callback
        message.Execute(true);
    });&lt;/pre&gt;

&lt;h3&gt;Messenger.Default can be overriden&lt;/h3&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;h3&gt;&lt;/h3&gt;

&lt;h3&gt;Sending messages to interfaces&lt;/h3&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;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;h3&gt;Sending messages with a token&lt;/h3&gt;

&lt;p&gt;Messages can now be sent through the Messenger with a token.&lt;/p&gt;

&lt;ul&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;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;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;h3&gt;Renaming CommandMessage to NotificationMessage&lt;/h3&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;h3&gt;ViewModelBase constructor with IMessenger&lt;/h3&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;p&gt;In the default ViewModelBase constructor is used, the Messenger.Default instance will be used instead.&lt;/p&gt;

&lt;h3&gt;EventToCommand behavior&lt;/h3&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;h3&gt;Updated the project templates to remove the sample application&lt;/h3&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;h3&gt;Bug corrections&lt;/h3&gt;

&lt;p&gt;Some bugs that were in Version 2 have been corrected:&lt;/p&gt;

&lt;ul&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;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;h3&gt;WPF3.5SP1, Silverlight 3&lt;/h3&gt;

&lt;p&gt;When using the DLLs, make sure that you use the correct versions.&lt;/p&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;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;h3&gt;WPF4, Silverlight 4&lt;/h3&gt;

&lt;p&gt;When using the DLLs, make sure that you use the correct versions.&lt;/p&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;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;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/03/16/whatrsquos-new-in-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;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;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;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;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;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://blog.galasoft.ch/aggbug/138557.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://blog.galasoft.ch/archive/2010/03/16/whatrsquos-new-in-mvvm-light-v3.aspx</guid>
            <pubDate>Tue, 16 Mar 2010 16:42:53 GMT</pubDate>
            <wfw:comment>http://blog.galasoft.ch/comments/138557.aspx</wfw:comment>
            <comments>http://blog.galasoft.ch/archive/2010/03/16/whatrsquos-new-in-mvvm-light-v3.aspx#feedback</comments>
            <slash:comments>18</slash:comments>
            <wfw:commentRss>http://blog.galasoft.ch/comments/commentRss/138557.aspx</wfw:commentRss>
            <trackback:ping>http://blog.galasoft.ch/services/trackbacks/138557.aspx</trackback:ping>
        </item>
        <item>
            <title>MVVM Light V3 released at #MIX10</title>
            <link>http://blog.galasoft.ch/archive/2010/03/16/mvvm-light-v3-released-at-mix10.aspx</link>
            <description>&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;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/03/16/mvvm-light-v3-released-at-mix10.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=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;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;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;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;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://blog.galasoft.ch/aggbug/138556.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://blog.galasoft.ch/archive/2010/03/16/mvvm-light-v3-released-at-mix10.aspx</guid>
            <pubDate>Tue, 16 Mar 2010 16:40:46 GMT</pubDate>
            <wfw:comment>http://blog.galasoft.ch/comments/138556.aspx</wfw:comment>
            <comments>http://blog.galasoft.ch/archive/2010/03/16/mvvm-light-v3-released-at-mix10.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.galasoft.ch/comments/commentRss/138556.aspx</wfw:commentRss>
            <trackback:ping>http://blog.galasoft.ch/services/trackbacks/138556.aspx</trackback:ping>
        </item>
        <item>
            <title>My program at #MIX10</title>
            <link>http://blog.galasoft.ch/archive/2010/03/10/my-program-at-mix10.aspx</link>
            <description>&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;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;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;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;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://blog.galasoft.ch/aggbug/138433.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://blog.galasoft.ch/archive/2010/03/10/my-program-at-mix10.aspx</guid>
            <pubDate>Wed, 10 Mar 2010 18:01:28 GMT</pubDate>
            <wfw:comment>http://blog.galasoft.ch/comments/138433.aspx</wfw:comment>
            <comments>http://blog.galasoft.ch/archive/2010/03/10/my-program-at-mix10.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.galasoft.ch/comments/commentRss/138433.aspx</wfw:commentRss>
            <trackback:ping>http://blog.galasoft.ch/services/trackbacks/138433.aspx</trackback:ping>
        </item>
        <item>
            <title>Schedule for my session at MIX10</title>
            <link>http://blog.galasoft.ch/archive/2010/03/04/schedule-for-my-session-at-mix10.aspx</link>
            <description>&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;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;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;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;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://blog.galasoft.ch/aggbug/138350.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://blog.galasoft.ch/archive/2010/03/04/schedule-for-my-session-at-mix10.aspx</guid>
            <pubDate>Fri, 05 Mar 2010 07:48:58 GMT</pubDate>
            <wfw:comment>http://blog.galasoft.ch/comments/138350.aspx</wfw:comment>
            <comments>http://blog.galasoft.ch/archive/2010/03/04/schedule-for-my-session-at-mix10.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.galasoft.ch/comments/commentRss/138350.aspx</wfw:commentRss>
            <trackback:ping>http://blog.galasoft.ch/services/trackbacks/138350.aspx</trackback:ping>
        </item>
        <item>
            <title>The MVVM landscape at MIX10</title>
            <link>http://blog.galasoft.ch/archive/2010/01/21/the-mvvm-landscape-at-mix10.aspx</link>
            <description>&lt;div class="frame"&gt;&lt;strong&gt;Update: Shawn Wildermuth has changed his session and will be talking about Silverlight Security instead.&lt;/strong&gt;&lt;/div&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;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 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;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;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;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;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://blog.galasoft.ch/aggbug/137570.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://blog.galasoft.ch/archive/2010/01/21/the-mvvm-landscape-at-mix10.aspx</guid>
            <pubDate>Thu, 21 Jan 2010 15:06:26 GMT</pubDate>
            <wfw:comment>http://blog.galasoft.ch/comments/137570.aspx</wfw:comment>
            <comments>http://blog.galasoft.ch/archive/2010/01/21/the-mvvm-landscape-at-mix10.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.galasoft.ch/comments/commentRss/137570.aspx</wfw:commentRss>
            <trackback:ping>http://blog.galasoft.ch/services/trackbacks/137570.aspx</trackback:ping>
        </item>
        <item>
            <title>Talking in Las Vegas: MIX2010 and MVVM</title>
            <link>http://blog.galasoft.ch/archive/2010/01/19/talking-in-las-vegas-mix2010-and-mvvm.aspx</link>
            <description>&lt;div class="frame"&gt;&lt;strong&gt;Update:&lt;/strong&gt; The session is officially on. &lt;a href="http://live.visitmix.com/MIX10/Sessions/EX14"&gt;See the MIX10 website&lt;/a&gt;.&lt;/div&gt;  &lt;p&gt;&lt;a href="http://live.visitmix.com/Sessions"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 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 MVVM 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;/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=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;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;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;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;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://blog.galasoft.ch/aggbug/137541.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://blog.galasoft.ch/archive/2010/01/19/talking-in-las-vegas-mix2010-and-mvvm.aspx</guid>
            <pubDate>Tue, 19 Jan 2010 12:28:40 GMT</pubDate>
            <wfw:comment>http://blog.galasoft.ch/comments/137541.aspx</wfw:comment>
            <comments>http://blog.galasoft.ch/archive/2010/01/19/talking-in-las-vegas-mix2010-and-mvvm.aspx#feedback</comments>
            <slash:comments>12</slash:comments>
            <wfw:commentRss>http://blog.galasoft.ch/comments/commentRss/137541.aspx</wfw:commentRss>
            <trackback:ping>http://blog.galasoft.ch/services/trackbacks/137541.aspx</trackback:ping>
        </item>
        <item>
            <title>MIX 2010: Voting for sessions has begun (I got two)</title>
            <link>http://blog.galasoft.ch/archive/2010/01/05/mix-2010-voting-for-sessions-has-begun-i-got-two.aspx</link>
            <description>&lt;a title="Vote for my sessions" href="http://visitmix.com/opencallvote/?query=laurent+bugnion" alt="Vote for my sessions"&gt;&lt;img style="margin: 0px 10px 0px 0px; display: inline" align="left" src="http://farm3.static.flickr.com/2719/4249943999_de21185ac5.jpg" width="240" height="320" /&gt;&lt;/a&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;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;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;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;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://blog.galasoft.ch/aggbug/137356.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://blog.galasoft.ch/archive/2010/01/05/mix-2010-voting-for-sessions-has-begun-i-got-two.aspx</guid>
            <pubDate>Wed, 06 Jan 2010 00:12:15 GMT</pubDate>
            <wfw:comment>http://blog.galasoft.ch/comments/137356.aspx</wfw:comment>
            <comments>http://blog.galasoft.ch/archive/2010/01/05/mix-2010-voting-for-sessions-has-begun-i-got-two.aspx#feedback</comments>
            <wfw:commentRss>http://blog.galasoft.ch/comments/commentRss/137356.aspx</wfw:commentRss>
            <trackback:ping>http://blog.galasoft.ch/services/trackbacks/137356.aspx</trackback:ping>
        </item>
        <item>
            <title>Using a Behavior to magnify your WPF applications</title>
            <link>http://blog.galasoft.ch/archive/2009/04/05/using-a-behavior-to-magnify-your-wpf-applications.aspx</link>
            <description>&lt;p&gt;At MIX 2009, the Expression Blend team cam up with a new concept called Behaviors. In fact, the only thing new is the way that the Behaviors are packed. WPF developers have been doing what we called "Attached Behaviors" for quite some time already: see &lt;a href="http://groups.google.com/group/wpf-disciples/browse_thread/thread/bbf3a9d83bd9c21e/d2b8e66663e01224?lnk=gst&amp;amp;q=attached+behavior#d2b8e66663e01224"&gt;this thread&lt;/a&gt; (dated July 2008) to read a discussion around this topic at the WPF Disciples group.&lt;/p&gt;  &lt;p&gt;Attached Behaviors leverage a feature of WPF called Attached Properties, that allows you to add a property to an element even if this element doesn't implement it. When the Attached Property value is set (or changes), you get an access to the element to which the property is attached, and you get a chance to attach an event handler to it, or to modify how it looks, reacts, etc... This is why we call this Attached Behavior. In fact it is similar to extension methods in C#: You define a method somewhere in your code, and you attach it to another element that doesn't know about it. For more information about attached behaviors, you can read the article that my good friend and fellow WPF Disciple Josh Smith &lt;a href="http://www.codeproject.com/KB/WPF/AttachedBehaviors.aspx" target="_blank"&gt;wrote about them&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The Behaviors proposed by the Blend team are using Attached Behaviors under the covers, and propose a neat way to "pack" them and to attach them to an element. In this post, we will see how I built a Behavior that you can use to add a magnifying glass to a WPF application in just a few lines of XAML (the Behavior implementation needs more than that though ;) but it is neatly packed and can be reused).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;In this article, you will see&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;How to download the assemblies needed. &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;How to add them into Expression Blend 3 or in Visual Studio 2008. &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;How to set the ZoomBehavior's properties. &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;How the ZoomBehavior is built (and of course you can download the source code). &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;And a sample application.&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt; &lt;img src="http://farm4.static.flickr.com/3647/3412149897_0e350c7ba9.jpg?v=0" /&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;Default magnifier on a picture&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;h2&gt;Why Expression.Interactivity?&lt;/h2&gt;  &lt;p&gt;This question was asked many times after the Behaviors were shown at MIX: Why do I need to add a reference to an Expression Blend assembly to use Behaviors in my application, even though they do not really have anything to do with Blend? Sure, Blend provides a nice way to add a Behavior to an element visually, but you can do the same in XAML.&lt;/p&gt;  &lt;p&gt;The answer is that Behaviors have been implemented by members of the Blend team, and are still very new. They just needed a place to store them, and it made sense to them to put that code in an assembly that comes with Blend. In my opinion it was not the best choice, and putting Behaviors in the WPF Toolkit (and in the Silverlight Toolkit) would have been a better option. I suppose that this will change later, and that Behaviors will maybe even flow into the .NET framework (and maybe even into the System.* namespace).&lt;/p&gt;  &lt;h2&gt;What does the behavior do?&lt;/h2&gt;  &lt;p&gt;The ZoomBehavior I developed and expose here allows to easily add a magnifying glass to any WPF window. With just a few lines of XAML code, you add a relative complex functionality. You can have any shape and any content - photos, videos, user interface elements, shapes, etc...&lt;/p&gt; &lt;img src="http://farm4.static.flickr.com/3627/3412150387_540c388c9a.jpg?v=0" /&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;Custom magnifier on a video&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;img src="http://farm4.static.flickr.com/3381/3412954854_2a21635ebc.jpg?v=0" /&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;Custom magnifier on text&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;img src="http://farm4.static.flickr.com/3360/3412954946_4d818229f6.jpg?v=0" /&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;Default magnifier with custom width on UI elements&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;h2&gt;What about Silverlight?&lt;/h2&gt;  &lt;p&gt;Behaviors work in Silverlight as well as in WPF. The mechanisms they rely on are compatible. However, my ZoomBehavior does not work in Silverlight, because it relies on a class named VisualBrush that is not available in Silverlight yet. Also, I draw the magnifying glass on the Adorner layer, which is not available in Silverlight applications (but we could imagine a workaround for that particular limitation).&lt;/p&gt;  &lt;p&gt;In other words, if you do Silverlight code, you can learn from this sample, but you cannot use it.&lt;/p&gt;  &lt;h2&gt;Using the ZoomBehavior in Expression Blend 3&lt;/h2&gt;  &lt;p&gt;Expression Blend 3 is probably the easiest way to add a Behavior to an application. You will need Expression Blend 3, which is currently in Community Technology Preview state, and &lt;a href="http://www.microsoft.com/expression/try-it/blendpreview.aspx"&gt;can be downloaded here&lt;/a&gt;.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Download my &lt;a href="http://www.galasoft.ch/mydotnet/GalaSoft.Utilities/GalaSoft.Utilities.Release.V1.zip"&gt;Utilities assembly&lt;/a&gt;. This assembly is in a Zip file. Extract it to a local folder. &lt;/li&gt;    &lt;li&gt;In Blend 3, right click on the Project tab, on the References folder. &lt;/li&gt;    &lt;li&gt;From the context menu, select Add Reference. Navigate to the folder containing the Utilities assembly, select it and press OK. &lt;/li&gt;    &lt;li&gt;Build the application. This ensures that all the referenced assemblies are copied to the bin/Debug folder. &lt;/li&gt;    &lt;li&gt;Open the Assets Library. &lt;/li&gt;    &lt;li&gt;You should see the ZoomBehavior in the Behaviors tab. &lt;/li&gt; &lt;/ul&gt; &lt;img src="http://farm4.static.flickr.com/3309/3412149179_a917343cb8.jpg?v=0" /&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;The Asset Library and the ZoomBehavior&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Drag and drop the ZoomBehavior on any element in the Window.      &lt;br /&gt;&lt;em&gt;Note: Typically, you want to add this behavior to the LayoutRoot panel (the first element under the main window). Even if you add the ZoomBehavior to a child element somewhere in the window, the magnifier will be added to the window's Content element, and will be visible in the whole window.&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;You should see the behavior appear in the Objects and Timeline panel. &lt;/li&gt; &lt;/ul&gt; &lt;img src="http://farm4.static.flickr.com/3590/3412953756_5e7fa8d798.jpg?v=0" /&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;Objects and Timeline panel&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;To toggle the magnifier on and off, you need a little snippet of code. For example, you can use a ToggleButton and then write the following C# code:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;First add the following using directive to the top of the page: &lt;/li&gt; &lt;/ul&gt;  &lt;pre class="csharp" name="code"&gt;using GalaSoft.Utilities.Wpf.Zoom;&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;Then, use this snippet for the Click event handler on the Button: &lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="csharp" name="code"&gt;/// &lt;summary&gt;
/// Test the ToggleZoom extension method
/// &lt;/summary&gt;
private void Button_Click(object sender, RoutedEventArgs e)
{
  TestRectangle.ToggleZoom();
}&lt;/pre&gt;

&lt;p&gt;The result is a round magnifier, with a magnifying factor of 2.0 and a diameter of 200 pixels. You will see below how to change the size and aspect of the magniifier.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Alternatively, you can use the IsVisible dependency property on the ZoomBehavior object, set it directly or data bind it, for example to a checkbox or a ToggleButton, or any other boolean property. &lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://farm4.static.flickr.com/3555/3412150697_265ce4955e.jpg?v=0" /&gt; 

&lt;p&gt;&lt;strong&gt;&lt;em&gt;ZoomBehavior properties in Blend 3&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;img src="http://farm4.static.flickr.com/3350/3412150743_12329f50d9.jpg?v=0" /&gt; 

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Binding the IsVisible property in Blend 3&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;img src="http://farm4.static.flickr.com/3363/3412955168_024520a69f.jpg?v=0" /&gt; 

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Binding the IsVisible property in Blend 3&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;Using the ZoomBehavior in Visual Studio&lt;/h2&gt;

&lt;p&gt;Adding the magnifier can also be done directly in XAML, without using Blend 3:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Download my &lt;a href="http://www.galasoft.ch/mydotnet/GalaSoft.Utilities/GalaSoft.Utilities.Release.V1.zip"&gt;Utilities assembly and the Microsoft Expression Interactivity assembly&lt;/a&gt;. These assemblies are in a Zip file. Extract them to a local folder. &lt;/li&gt;

  &lt;li&gt;In Visual Studio, add a reference to both assemblies to your WPF application 
    &lt;ul&gt;
      &lt;li&gt;Right click on the References folder &lt;/li&gt;

      &lt;li&gt;Select Add Reference from the context menu &lt;/li&gt;

      &lt;li&gt;Browse to the folder in which you saved both assemblies above, and select them. Then press OK. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;In XAML, add two XML namespaces to the Window tag: &lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="xml" name="code"&gt;xmlns:i="http://schemas.microsoft.com/expression/2009/interactivity"
xmlns:zoom="clr-namespace:GalaSoft.Utilities.Wpf.Zoom;assembly=GalaSoft.Utilities"&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;Add the following attached property to the element you want to attach the magnifier to (in that case, the Rectangle named TestRectangle). 
    &lt;br /&gt;&lt;em&gt;Note: Typically, you want to add this behavior to the LayoutRoot panel (the first element under the main window). Even if you add the ZoomBehavior to a child element somewhere in the window (like in this sample), the magnifier will be added to the window's Content element, and will be visible in the whole window.&lt;/em&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;Rectangle x:Name="TestRectangle"
           Fill="#FF821A32"
           Stroke="#FF000000"
           HorizontalAlignment="Right"
           Margin="0,260,17,354"
           Width="179"&amp;gt;

  &amp;lt;i:Interaction.Behaviors&amp;gt;
    &amp;lt;zoom:ZoomBehavior x:Name="MyZoom" /&amp;gt;
  &amp;lt;/i:Interaction.Behaviors&amp;gt;

&amp;lt;/Rectangle&amp;gt;&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;Here too, to toggle the magnifier on/off, you need to add the namespace GalaSoft.Utilities.Wpf.Zoom to your code-behind, and then call the extension method ToggleZoom() on the element to which you added the behavior. For example: &lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="csharp" name="code"&gt;TestRectangle.ToggleZoom();&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;And of course here too you can use a binding on the IsVisible property &lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;i:Interaction.Behaviors&amp;gt;
  &amp;lt;zoom:ZoomBehavior x:Name="MyZoom"
                     IsVisible="{Binding ElementName=ToggleZoomCheckBox,
                                         Path=IsChecked, Mode=TwoWay}" /&amp;gt;
&amp;lt;/i:Interaction.Behaviors&amp;gt;&lt;/pre&gt;

&lt;h2&gt;Using properties&lt;/h2&gt;

&lt;p&gt;There are a number of properties that you can use to customize the magnifier's look and feel. All these properties are Dependency Properties, which means that they can be data bound or animated, such as in the sample that you can download below.&lt;/p&gt;

&lt;h3&gt;Zoom factor&lt;/h3&gt;

&lt;p&gt;The property ZoomFactor can be set to any value between 1.0 and Double.MaxValue. The default value is 2.0.&lt;/p&gt;

&lt;h3&gt;Magnifier height and width&lt;/h3&gt;

&lt;p&gt;The properties MagnifierWidth and MagnifierHeight govern the dimensions of the magnifying glass. Default value: 200 px * 200 px.&lt;/p&gt;

&lt;h3&gt;Distance from the mouse&lt;/h3&gt;

&lt;p&gt;When the magnifier is visible, the mouse cursor turns into a cross. The magnifier appears next to the cursor, either left or right, below or above, depending on the mouse position. If you move the mouse too fast, the cursor might "land" on the magnifier, which you want to avoid. In that case, and depending on the shape of the magnifier, you may want to increase the distance from the mouse, using the DistanceFromMouse property. Default value: 5 pixels.&lt;/p&gt;

&lt;h3&gt;Magnifier shape&lt;/h3&gt;

&lt;p&gt;By default, the magnifier is an Ellipse. You can however specify any shape you want, using the Template property.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Create a ControlTemplate, either in Blend or in Visual Studio. &lt;/li&gt;

  &lt;li&gt;The ControlTemplate must target a Control (TargetType property). &lt;/li&gt;

  &lt;li&gt;One of the elements of the ControlTemplate must set its Fill (or Background) property to a TemplateBinding on the Control's Background. This is where the magnified view will appear. &lt;/li&gt;

  &lt;li&gt;Save this template in the window's resources (for example). &lt;/li&gt;

  &lt;li&gt;Set the ZoomBehavior's Template property to the saved ControlTemplate. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For instance:&lt;/p&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;ControlTemplate x:Key="ZoomGlassTemplate1"
                 TargetType="{x:Type Control}"&amp;gt;
  &amp;lt;Grid Background="Silver"&amp;gt;
    &amp;lt;Rectangle Fill="{TemplateBinding Background}"
               Stroke="#FF000000"
               StrokeThickness="5"
               StrokeDashArray="1 2" /&amp;gt;
  &amp;lt;/Grid&amp;gt;
&amp;lt;/ControlTemplate&amp;gt;&lt;/pre&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;i:Interaction.Behaviors&amp;gt;
  &amp;lt;zoom:ZoomBehavior x:Name="MyZoom"
                     Template="{StaticResource ZoomGlassTemplate1}"
                     DistanceFromMouse="20" /&amp;gt;
&amp;lt;/i:Interaction.Behaviors&amp;gt;&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;Tip: You want to make sure that an opaque background is set in your template (in that case, the Grid's Background is set to Silver), to avoid having a transparent background and seeing the window's content below the magnifier when it is close to the window's edges.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IsVisible&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This boolean property can be set directly, or data bound for example to a checkbox, to toggle the magnifier on and off.&lt;/p&gt;

&lt;h2&gt;Downloads&lt;/h2&gt;

&lt;p&gt;You can download the following files:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Assemblies needed to add the ZoomBehavior to your application (&lt;a href="http://www.galasoft.ch/mydotnet/GalaSoft.Utilities/GalaSoft.Utilities.Release.V1.zip"&gt;GalaSoft.Utilities and Microsoft.Expression.Interactivity&lt;/a&gt;). &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.galasoft.ch/mydotnet/GalaSoft.Utilities/GalaSoft.Utilities.Source.zip"&gt;Source code for my Utilities classes&lt;/a&gt; (the ZoomBehavior classes are into the Wpf/Zoom subfolder) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope you'll have fun playing with this behavior, and feel free to give me your feedback!&lt;/p&gt;

&lt;h2&gt;Sample application&lt;/h2&gt;

&lt;p&gt;The &lt;a href="http://www.galasoft.ch/mydotnet/GalaSoft.Utilities/ZoomBehaviorTest.zip" target="_blank"&gt;sample application&lt;/a&gt; allows you to test the ZoomBehavior with multiple shapes, sliders for dependency properties and dynamic content.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Use the shapes on the left to change the shape of the magnifier. The round shape sets the default template. The other two templates are defined in Window1.xaml. &lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://farm4.static.flickr.com/3611/3412150907_9abde79d68.jpg?v=0" /&gt; 

&lt;p&gt;&lt;strong&gt;&lt;em&gt;RadioButtons to choose templates&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Use the button and checkbox on the top right to toggle the magnifier on/off. You can use the ToggleZoom extension method, or use the IsVisble dependency property on the ZoomBehavior. &lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://farm4.static.flickr.com/3396/3412955264_8ab850cbca.jpg?v=0" /&gt; 

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Toggling the magnifier on/off&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Press the "Z" key to toggle the ZoomBehavior on/off. &lt;/li&gt;

  &lt;li&gt;Pass the cursor on UI elements, shapes, image and even video and see the magnified content &lt;/li&gt;

  &lt;li&gt;Use the sliders on the bottom right to change the width, height and the zoom factor of the magnifier. &lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://farm4.static.flickr.com/3654/3412151281_75945c7aea.jpg?v=0" /&gt; 

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Changing the width, height and zoom factor&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;How does it even work?&lt;/h2&gt;

&lt;p&gt;The ZomBehavior relies on three classes.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;ZoomBehavior&lt;/strong&gt; 

    &lt;ul&gt;
      &lt;li&gt;This class inherits the Microsoft.Expression.Interactivity.Behavior class, which is a generic class. The ZoomBehavior can be attached to any FrameworkElement. However, the magnifier will always be available for the whole window containing the FrameworkElement. &lt;/li&gt;

      &lt;li&gt;This class also defines a set of dependency properties detailed above in the Using Properties section. &lt;/li&gt;

      &lt;li&gt;The ZoomBehavior also defines a method used to toggle the magnifier on/off. There is also another way to toggle the magnifier, using an attached method. &lt;/li&gt;

      &lt;li&gt;To get a grip on the FrameworkElement using the behavior, you can override the OnAttached method, which will be called when the behavior is attached to an element. Then use the AssociatedObject of the Behavior class, which is automatically casted to a FrameworkElement in ZoomBehavior (thanks to the generic implementation). &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;ZoomAdorner&lt;/strong&gt; 

    &lt;ul&gt;
      &lt;li&gt;This class inherits the System.Windows.Documents.Adorner class, that defines objects that can be added to the AdornerLayer. &lt;/li&gt;

      &lt;li&gt;The AdornerLayer is a special layer that is guaranteed to always appear in front of all the other elements on the window. This is perfect to draw decorations for objects (such as handles to resize an element) or in our case, to make sure that the magnifier is on top of all other elements. &lt;/li&gt;

      &lt;li&gt;If no template is defined, the method CreateGlass will create an Ellipse to display the magnified view. &lt;/li&gt;

      &lt;li&gt;If a template is defined, the method CreateGlass will create a Control and apply the template to that element. This allows using any shape to display the magnified view. &lt;/li&gt;

      &lt;li&gt;We override a few methods and properties in the ZoomAdorner class, to allow placing any element in the AdornerLayer. We use the helper class VisualCollection to create a tree of visual elements below the adorner. This requires overriding VisualChildrenCount, GetVisualChild, ArrangeOverride and MeasureOverride. &lt;/li&gt;

      &lt;li&gt;We attach an event handler to the root element on which the magnifier is displayed, to track mouse movements. When we detach the adorner, we must remember to remove the event handler to avoid memory leaks. &lt;/li&gt;

      &lt;li&gt;The magnified view is provided by a VisualBrush. This is a representation of the observed scene, which we can move by changing the ViewBox property. &lt;/li&gt;

      &lt;li&gt;The method SetGlass is called everytime that the mouse moves, or that the aspect of the magnifier changes (through a dependency property). It is used to calculate the magnifier's size, position, and the ViewBox of the VisualBrush. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;ZoomExtension&lt;/strong&gt; 

    &lt;ul&gt;
      &lt;li&gt;This class is a utility class, that defines an extension method available on every FrameworkElement. &lt;/li&gt;

      &lt;li&gt;The method ToggleZoom will only be active on the element on which you added the ZoomBehavior. On other elements, it will simply be ignored. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;License&lt;/h2&gt;
&lt;a href="http://creativecommons.org/licenses/by/3.0/" target="_blank"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" align="left" src="http://creativecommons.org/images/public/somerights20.png" /&gt;&lt;/a&gt; 

&lt;p&gt;The GalaSoft.Utilities assembly and all the classes it contains are distributed under the &lt;strong&gt;Creative Commons License (Attribution 3.0 Unported).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a title="http://creativecommons.org/licenses/by/3.0/" href="http://creativecommons.org/licenses/by/3.0/"&gt;http://creativecommons.org/licenses/by/3.0/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;I hope you will have fun using this behavior. For me it was a great occasion to learn how to program behaviors, and to review the Adorner Layer, a great feature of WPF applications. But having played with the ZoomBehavior quite a lot in the last few days, I think it has a potential for many WPF applications. Feel free to use it!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130749"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130749" 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;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;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;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;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://blog.galasoft.ch/aggbug/130749.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://blog.galasoft.ch/archive/2009/04/05/using-a-behavior-to-magnify-your-wpf-applications.aspx</guid>
            <pubDate>Sun, 05 Apr 2009 12:32:21 GMT</pubDate>
            <wfw:comment>http://blog.galasoft.ch/comments/130749.aspx</wfw:comment>
            <comments>http://blog.galasoft.ch/archive/2009/04/05/using-a-behavior-to-magnify-your-wpf-applications.aspx#feedback</comments>
            <slash:comments>12</slash:comments>
            <wfw:commentRss>http://blog.galasoft.ch/comments/commentRss/130749.aspx</wfw:commentRss>
            <trackback:ping>http://blog.galasoft.ch/services/trackbacks/130749.aspx</trackback:ping>
        </item>
        <item>
            <title>Solving cross domain access problems (via Jon Galloway)</title>
            <link>http://blog.galasoft.ch/archive/2009/03/30/solving-cross-domain-access-problems-via-jon-galloway.aspx</link>
            <description>&lt;p&gt;At my MIX09 and TechDays Belgium talk recently, I mentioned the issues that a Silverlight developer faces when trying to access a cross-domain web site. If the site has a clientaccesspolicy.xml (or crossdomain.xml) policy file in place, the call is allowed. If not, the call is rejected.&lt;/p&gt;  &lt;p&gt;The solution, I mentioned, is to put a "gateway" in place to forward the call to the cross domain site. In my talk, I said that you could do that on your own web server, the server the Silverlight application is served from. Well, of course that works, but will add some load to your server (not even mentioning that you have to write the gateway yourself, which is not the nicest task).&lt;/p&gt;  &lt;p&gt;Thankfully, others have thought about that, and apparently I had missed that my good friend Jon Galloway has a post back then in December that shows how to leverage Yahoo Pipes to act as a gateway from cross-domain access. Yahoo Pipes has a cross domain access policy file in place, so it will work.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/jgalloway/archive/2008/12/12/silverlight-crossdomain-access-workarounds.aspx"&gt;Read Jon's article here&lt;/a&gt;!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130516"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130516" 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;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;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;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;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://blog.galasoft.ch/aggbug/130516.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://blog.galasoft.ch/archive/2009/03/30/solving-cross-domain-access-problems-via-jon-galloway.aspx</guid>
            <pubDate>Mon, 30 Mar 2009 23:32:23 GMT</pubDate>
            <wfw:comment>http://blog.galasoft.ch/comments/130516.aspx</wfw:comment>
            <comments>http://blog.galasoft.ch/archive/2009/03/30/solving-cross-domain-access-problems-via-jon-galloway.aspx#feedback</comments>
            <wfw:commentRss>http://blog.galasoft.ch/comments/commentRss/130516.aspx</wfw:commentRss>
            <trackback:ping>http://blog.galasoft.ch/services/trackbacks/130516.aspx</trackback:ping>
        </item>
    </channel>
</rss>