<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" 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:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Wandering through the Wilderness - MVVM</title>
    <link>http://www.julmar.com/blog/mark/</link>
    <description>... a journey through WPF, MVVM and .NET4</description>
    <language>en-us</language>
    <copyright>Mark Smith</copyright>
    <lastBuildDate>Tue, 13 Apr 2010 15:34:06 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>mark@julmar.com</managingEditor>
    <webMaster>mark@julmar.com</webMaster>
    <item>
      <trackback:ping>http://www.julmar.com/blog/mark/Trackback.aspx?guid=9bfff0e8-8b0f-4e29-bb74-69402c3636f9</trackback:ping>
      <pingback:server>http://www.julmar.com/blog/mark/pingback.aspx</pingback:server>
      <pingback:target>http://www.julmar.com/blog/mark/PermaLink,guid,9bfff0e8-8b0f-4e29-bb74-69402c3636f9.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.julmar.com/blog/mark/CommentView,guid,9bfff0e8-8b0f-4e29-bb74-69402c3636f9.aspx</wfw:comment>
      <wfw:commentRss>http://www.julmar.com/blog/mark/SyndicationService.asmx/GetEntryCommentsRss?guid=9bfff0e8-8b0f-4e29-bb74-69402c3636f9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have updated MVVM Helpers against the RTM of Visual Studio 2010.  I will be
updating the codeplex site (<a href="http://mvvmhelpers.codeplex.com">http://mvvmhelpers.codeplex.com</a>)
shortly, but in the meantime, here’s the project template for Visual Studio 2010. 
Copy the .zip into your templates directory, mine is located at:
</p>
        <p>
          <strong>C:\Users\Mark\Documents\Visual Studio 2010\Templates\ProjectTemplates\Visual
C#</strong>
        </p>
        <p>
          <a href="http://www.julmar.com/samples/WpfMvvmApplication.zip" target="_blank">Here’s
the file.</a>
        </p>
      </body>
      <title>MVVM Helpers for .NET 4.0</title>
      <guid isPermaLink="false">http://www.julmar.com/blog/mark/PermaLink,guid,9bfff0e8-8b0f-4e29-bb74-69402c3636f9.aspx</guid>
      <link>http://www.julmar.com/blog/mark/2010/04/13/MVVMHelpersForNET40.aspx</link>
      <pubDate>Tue, 13 Apr 2010 15:34:06 GMT</pubDate>
      <description>&lt;p&gt;
I have updated MVVM Helpers against the RTM of Visual Studio 2010.&amp;nbsp; I will be
updating the codeplex site (&lt;a href="http://mvvmhelpers.codeplex.com"&gt;http://mvvmhelpers.codeplex.com&lt;/a&gt;)
shortly, but in the meantime, here’s the project template for Visual Studio 2010.&amp;nbsp;
Copy the .zip into your templates directory, mine is located at:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;C:\Users\Mark\Documents\Visual Studio 2010\Templates\ProjectTemplates\Visual
C#&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.julmar.com/samples/WpfMvvmApplication.zip" target="_blank"&gt;Here’s
the file.&lt;/a&gt;
&lt;/p&gt;</description>
      <comments>http://www.julmar.com/blog/mark/CommentView,guid,9bfff0e8-8b0f-4e29-bb74-69402c3636f9.aspx</comments>
      <category>.NET</category>
      <category>MVVM</category>
      <category>WPF</category>
    </item>
    <item>
      <trackback:ping>http://www.julmar.com/blog/mark/Trackback.aspx?guid=f6809b09-7c04-4272-99fd-acfa5fc53ad9</trackback:ping>
      <pingback:server>http://www.julmar.com/blog/mark/pingback.aspx</pingback:server>
      <pingback:target>http://www.julmar.com/blog/mark/PermaLink,guid,f6809b09-7c04-4272-99fd-acfa5fc53ad9.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.julmar.com/blog/mark/CommentView,guid,f6809b09-7c04-4272-99fd-acfa5fc53ad9.aspx</wfw:comment>
      <wfw:commentRss>http://www.julmar.com/blog/mark/SyndicationService.asmx/GetEntryCommentsRss?guid=f6809b09-7c04-4272-99fd-acfa5fc53ad9</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In the last post, I referred to the <strong>DragPositionBehavior </strong>in the JulMar
MVVM library.  This behavior allows any <strong>UIElement </strong>to be dragged
and repositioned using the mouse without requiring any code logic on your part. 
It’s easy to apply – using the traditional Blend syntax (easiest done by dragging
the behavior onto an element):
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red163\green21\blue21;\red255\green255\blue255;\red0\green0\blue255;}??\fs28 \cf1     \cf3 &lt;\cf1 Interactivity\cf3 :\cf1 Interaction.Behaviors\cf3 &gt;\par ??\cf1         \cf3 &lt;\cf1 julmar\cf3 :\cf1 DragPositionBehavior\cf3  /&gt;\par ??\cf1     \cf3 &lt;/\cf1 Interactivity\cf3 :\cf1 Interaction.Behaviors\cf3 &gt;\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: #a31515">    </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Interactivity</span>
            <span style="color: blue">:</span>
            <span style="color: #a31515">Interaction.Behaviors</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">julmar</span>
            <span style="color: blue">:</span>
            <span style="color: #a31515">DragPositionBehavior</span>
            <span style="color: blue"> /&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">    </span>
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">Interactivity</span>
            <span style="color: blue">:</span>
            <span style="color: #a31515">Interaction.Behaviors</span>
            <span style="color: blue">&gt;</span>
          </p>
        </div>
        <p>
          <br />
This is the simplest way to use this, however it doesn’t work when the behavior is
to be applied with a Style – in my example in the prior post, we need to drag around
the <strong>ListBoxItem</strong> container, not just the content.  So I showed
an alternative syntax to apply the same behavior:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red163\green21\blue21;\red255\green255\blue255;\red0\green0\blue255;\red255\green0\blue0;}??\fs28 \cf1     \cf3 &lt;\cf1 ListBox.ItemContainerStyle\cf3 &gt;\par ??\cf1         \cf3 &lt;\cf1 Style\cf4  TargetType\cf3 ="ListBoxItem"&gt;\par ??\cf1             \cf3 &lt;\cf1 Setter\cf4  Property\cf3 ="julmar:DragPositionBehavior.IsEnabled"\cf4  Value\cf3 ="True" /&gt;\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: #a31515">    </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">ListBox.ItemContainerStyle</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Style</span>
            <span style="color: red"> TargetType</span>
            <span style="color: blue">="ListBoxItem"&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">            </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Setter</span>
            <span style="color: red"> Property</span>
            <span style="color: blue">="julmar:DragPositionBehavior.IsEnabled"</span>
            <span style="color: red"> Value</span>
            <span style="color: blue">="True"
/&gt;</span>
          </p>
        </div>
        <p>
          <br />
Here, the behavior is being applied by setting the <strong>IsEnabled attached property</strong> onto
the <strong>ListBoxItem</strong>.  Here’s the implementation for that:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs28 \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??///\cf3  This property allows the behavior to be used as a traditional\par ??\cf1 ///\cf3  attached property behavior.\par ??\cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf4 public\cf0  \cf4 static\cf0  \cf6 DependencyProperty\cf0  IsEnabledProperty =\par ??    \cf6 DependencyProperty\cf0 .RegisterAttached(\cf7 "IsEnabled"\cf0 , \cf4 typeof\cf0 (\cf4 bool\cf0 ), \cf4 typeof\cf0 (\cf6 DragPositionBehavior\cf0 ),\par ??        \cf4 new\cf0  \cf6 FrameworkPropertyMetadata\cf0 (\cf4 false\cf0 , OnIsEnabledChanged));\par ??\par ??\cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??///\cf3  Returns whether DragPositionBehavior is enabled via attached property\par ??\cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??///\cf3  \cf1 &lt;param name="uie"&gt;\cf3 Element\cf1 &lt;/param&gt;\par ??///\cf3  \cf1 &lt;returns&gt;\cf3 True/False\cf1 &lt;/returns&gt;\par ??\cf4 public\cf0  \cf4 static\cf0  \cf4 bool\cf0  GetIsEnabled(\cf6 DependencyObject\cf0  uie)\par ??\{\par ??    \cf4 return\cf0  (\cf4 bool\cf0 )uie.GetValue(IsEnabledProperty);\par ??\}\par ??\par ??\cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??///\cf3  Adds DragPositionBehavior to an element\par ??\cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??///\cf3  \cf1 &lt;param name="uie"&gt;\cf3 Element to apply\cf1 &lt;/param&gt;\par ??///\cf3  \cf1 &lt;param name="value"&gt;\cf3 True/False\cf1 &lt;/param&gt;\par ??\cf4 public\cf0  \cf4 static\cf0  \cf4 void\cf0  SetIsEnabled(\cf6 DependencyObject\cf0  uie, \cf4 bool\cf0  value)\par ??\{\par ??    uie.SetValue(IsEnabledProperty, value);\par ??\}\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: blue">public</span>
            <span style="color: blue">static</span>
            <span style="color: #2b91af">DependencyProperty</span> IsEnabledProperty
=
</p>
          <p style="margin: 0px">
    <span style="color: #2b91af">DependencyProperty</span>.RegisterAttached(<span style="color: #a31515">"IsEnabled"</span>, <span style="color: blue">typeof</span>(<span style="color: blue">bool</span>), 
<br />
        <span style="color: blue">typeof</span>(<span style="color: #2b91af">DragPositionBehavior</span>),
</p>
          <p style="margin: 0px">
        <span style="color: blue">new</span><span style="color: #2b91af">FrameworkPropertyMetadata</span>(<span style="color: blue">false</span>,
OnIsEnabledChanged));
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: blue">public</span>
            <span style="color: blue">static</span>
            <span style="color: blue">bool</span> GetIsEnabled(<span style="color: #2b91af">DependencyObject</span> uie)
</p>
          <p style="margin: 0px">
{
</p>
          <p style="margin: 0px">
    <span style="color: blue">return</span> (<span style="color: blue">bool</span>)uie.GetValue(IsEnabledProperty);
</p>
          <p style="margin: 0px">
}
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: blue">public</span>
            <span style="color: blue">static</span>
            <span style="color: blue">void</span> SetIsEnabled(<span style="color: #2b91af">DependencyObject</span> uie, <span style="color: blue">bool</span> value)
</p>
          <p style="margin: 0px">
{
</p>
          <p style="margin: 0px">
    uie.SetValue(IsEnabledProperty, value);
</p>
          <p style="margin: 0px">
}
</p>
        </div>
        <p>
          <br />
This is a boilerplate example of an attached property – nothing to see here. 
The magic happens in the <strong>PropertyChange </strong>callback:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red43\green145\blue175;}??\fs28 \cf1 private\cf0  \cf1 static\cf0  \cf1 void\cf0  OnIsEnabledChanged(\cf4 DependencyObject\cf0  dpo, \cf4 DependencyPropertyChangedEventArgs\cf0  e)\par ??\{\par ??    \cf4 UIElement\cf0  uie = dpo \cf1 as\cf0  \cf4 UIElement\cf0 ;\par ??    \cf1 if\cf0  (uie != \cf1 null\cf0 )\par ??    \{\par ??        \cf1 var\cf0  behColl = \cf4 Interaction\cf0 .GetBehaviors(uie);\par ??        \cf1 var\cf0  existingBehavior = behColl.FirstOrDefault(b =&gt; b.GetType() == \cf1 typeof\cf0 (\cf4 DragPositionBehavior\cf0 )) \cf1 as\cf0  \cf4 DragPositionBehavior\cf0 ;\par ??        \cf1 if\cf0  ((\cf1 bool\cf0 )e.NewValue == \cf1 false\cf0  &amp;&amp; existingBehavior != \cf1 null\cf0 )\par ??        \{\par ??            behColl.Remove(existingBehavior);\par ??        \}\par ??        \cf1 else\cf0  \cf1 if\cf0  ((\cf1 bool\cf0 )e.NewValue == \cf1 true\cf0  &amp;&amp; existingBehavior == \cf1 null\cf0 )\par ??        \{\par ??            behColl.Add(\cf1 new\cf0  \cf4 DragPositionBehavior\cf0 ());\par ??        \}\par ??    \}\par ??\}\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: blue">private</span>
            <span style="color: blue">static</span>
            <span style="color: blue">void</span> OnIsEnabledChanged(<span style="color: #2b91af">DependencyObject</span> dpo, 
</p>
          <p style="margin: 0px">
                                       <span style="color: #2b91af">DependencyPropertyChangedEventArgs</span> e)
</p>
          <p style="margin: 0px">
{
</p>
          <p style="margin: 0px">
    <span style="color: #2b91af">UIElement</span> uie = dpo <span style="color: blue">as</span><span style="color: #2b91af">UIElement</span>;
</p>
          <p style="margin: 0px">
    <span style="color: blue">if</span> (uie != <span style="color: blue">null</span>)
</p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
        <span style="color: blue">var</span> behColl
= <span style="color: #2b91af">Interaction</span>.GetBehaviors(uie);
</p>
          <p style="margin: 0px">
        <span style="color: blue">var</span> existingBehavior
= behColl.FirstOrDefault(b =&gt; b.GetType() == 
<br />
              <span style="color: blue">typeof</span>(<span style="color: #2b91af">DragPositionBehavior</span>)) <span style="color: blue">as</span><span style="color: #2b91af">DragPositionBehavior</span>;
</p>
          <p style="margin: 0px">
        <span style="color: blue">if</span> ((<span style="color: blue">bool</span>)e.NewValue
== <span style="color: blue">false</span> &amp;&amp; existingBehavior != <span style="color: blue">null</span>)
</p>
          <p style="margin: 0px">
        {
</p>
          <p style="margin: 0px">
            behColl.Remove(existingBehavior);
</p>
          <p style="margin: 0px">
        }
</p>
          <p style="margin: 0px">
        <span style="color: blue">else</span><span style="color: blue">if</span> ((<span style="color: blue">bool</span>)e.NewValue
== <span style="color: blue">true</span> &amp;&amp; existingBehavior == <span style="color: blue">null</span>)
</p>
          <p style="margin: 0px">
        {
</p>
          <p style="margin: 0px">
            behColl.Add(<span style="color: blue">new</span><span style="color: #2b91af">DragPositionBehavior</span>());
</p>
          <p style="margin: 0px">
        }
</p>
          <p style="margin: 0px">
    }
</p>
          <p style="margin: 0px">
}
</p>
        </div>
        <p>
          <br />
Let’s break this down a little.  When we have the IsEnabled property set onto
an element, first we verify it’s a <strong>UIElement </strong>(we cannot drag it on
anything that isn’t because the mouse events are defined at this level).  Next,
we check the behaviors collection on that element – if an existing behavior is there
and we are setting the property to “false”, then we remove the existing behavior from
the collection.  If there is no behavior, and we are setting the property to
“true”, then we add a new <strong>DragPositionBehavior </strong>instance to the collection
here.  This, in effect, is exactly what the first block of XAML is doing, and
it’s what we do as well here in code – so the Style setter works as expected.
</p>
        <p>
This isn’t really a trick – I’m sure others have thought of it as well, but it’s a
useful thing to add into your behaviors so they can be universally used, both by Blend
as well as by developers directly wanting to apply it in places where Blend cannot
today.
</p>
      </body>
      <title>Blend Behaviors in Styles: DragPositionBehavior</title>
      <guid isPermaLink="false">http://www.julmar.com/blog/mark/PermaLink,guid,f6809b09-7c04-4272-99fd-acfa5fc53ad9.aspx</guid>
      <link>http://www.julmar.com/blog/mark/2010/02/05/BlendBehaviorsInStylesDragPositionBehavior.aspx</link>
      <pubDate>Fri, 05 Feb 2010 23:01:51 GMT</pubDate>
      <description>&lt;p&gt;
In the last post, I referred to the &lt;strong&gt;DragPositionBehavior &lt;/strong&gt;in the JulMar
MVVM library.&amp;nbsp; This behavior allows any &lt;strong&gt;UIElement &lt;/strong&gt;to be dragged
and repositioned using the mouse without requiring any code logic on your part.&amp;nbsp;
It’s easy to apply – using the traditional Blend syntax (easiest done by dragging
the behavior onto an element):
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red163\green21\blue21;\red255\green255\blue255;\red0\green0\blue255;}??\fs28 \cf1     \cf3 &amp;lt;\cf1 Interactivity\cf3 :\cf1 Interaction.Behaviors\cf3 &amp;gt;\par ??\cf1         \cf3 &amp;lt;\cf1 julmar\cf3 :\cf1 DragPositionBehavior\cf3  /&amp;gt;\par ??\cf1     \cf3 &amp;lt;/\cf1 Interactivity\cf3 :\cf1 Interaction.Behaviors\cf3 &amp;gt;\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interactivity&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interaction.Behaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;DragPositionBehavior&lt;/span&gt;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interactivity&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interaction.Behaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
This is the simplest way to use this, however it doesn’t work when the behavior is
to be applied with a Style – in my example in the prior post, we need to drag around
the &lt;strong&gt;ListBoxItem&lt;/strong&gt; container, not just the content.&amp;nbsp; So I showed
an alternative syntax to apply the same behavior:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red163\green21\blue21;\red255\green255\blue255;\red0\green0\blue255;\red255\green0\blue0;}??\fs28 \cf1     \cf3 &amp;lt;\cf1 ListBox.ItemContainerStyle\cf3 &amp;gt;\par ??\cf1         \cf3 &amp;lt;\cf1 Style\cf4  TargetType\cf3 ="ListBoxItem"&amp;gt;\par ??\cf1             \cf3 &amp;lt;\cf1 Setter\cf4  Property\cf3 ="julmar:DragPositionBehavior.IsEnabled"\cf4  Value\cf3 ="True" /&amp;gt;\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ListBox.ItemContainerStyle&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Style&lt;/span&gt;&lt;span style="color: red"&gt; TargetType&lt;/span&gt;&lt;span style="color: blue"&gt;="ListBoxItem"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="color: red"&gt; Property&lt;/span&gt;&lt;span style="color: blue"&gt;="julmar:DragPositionBehavior.IsEnabled"&lt;/span&gt;&lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="True"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Here, the behavior is being applied by setting the &lt;strong&gt;IsEnabled attached property&lt;/strong&gt; onto
the &lt;strong&gt;ListBoxItem&lt;/strong&gt;.&amp;nbsp; Here’s the implementation for that:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs28 \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  This property allows the behavior to be used as a traditional\par ??\cf1 ///\cf3  attached property behavior.\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf4 public\cf0  \cf4 static\cf0  \cf6 DependencyProperty\cf0  IsEnabledProperty =\par ??    \cf6 DependencyProperty\cf0 .RegisterAttached(\cf7 "IsEnabled"\cf0 , \cf4 typeof\cf0 (\cf4 bool\cf0 ), \cf4 typeof\cf0 (\cf6 DragPositionBehavior\cf0 ),\par ??        \cf4 new\cf0  \cf6 FrameworkPropertyMetadata\cf0 (\cf4 false\cf0 , OnIsEnabledChanged));\par ??\par ??\cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  Returns whether DragPositionBehavior is enabled via attached property\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??///\cf3  \cf1 &amp;lt;param name="uie"&amp;gt;\cf3 Element\cf1 &amp;lt;/param&amp;gt;\par ??///\cf3  \cf1 &amp;lt;returns&amp;gt;\cf3 True/False\cf1 &amp;lt;/returns&amp;gt;\par ??\cf4 public\cf0  \cf4 static\cf0  \cf4 bool\cf0  GetIsEnabled(\cf6 DependencyObject\cf0  uie)\par ??\{\par ??    \cf4 return\cf0  (\cf4 bool\cf0 )uie.GetValue(IsEnabledProperty);\par ??\}\par ??\par ??\cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  Adds DragPositionBehavior to an element\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??///\cf3  \cf1 &amp;lt;param name="uie"&amp;gt;\cf3 Element to apply\cf1 &amp;lt;/param&amp;gt;\par ??///\cf3  \cf1 &amp;lt;param name="value"&amp;gt;\cf3 True/False\cf1 &amp;lt;/param&amp;gt;\par ??\cf4 public\cf0  \cf4 static\cf0  \cf4 void\cf0  SetIsEnabled(\cf6 DependencyObject\cf0  uie, \cf4 bool\cf0  value)\par ??\{\par ??    uie.SetValue(IsEnabledProperty, value);\par ??\}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DependencyProperty&lt;/span&gt; IsEnabledProperty
=
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;DependencyProperty&lt;/span&gt;.RegisterAttached(&lt;span style="color: #a31515"&gt;"IsEnabled"&lt;/span&gt;, &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: blue"&gt;bool&lt;/span&gt;), 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;DragPositionBehavior&lt;/span&gt;),
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;FrameworkPropertyMetadata&lt;/span&gt;(&lt;span style="color: blue"&gt;false&lt;/span&gt;,
OnIsEnabledChanged));
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;bool&lt;/span&gt; GetIsEnabled(&lt;span style="color: #2b91af"&gt;DependencyObject&lt;/span&gt; uie)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;return&lt;/span&gt; (&lt;span style="color: blue"&gt;bool&lt;/span&gt;)uie.GetValue(IsEnabledProperty);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; SetIsEnabled(&lt;span style="color: #2b91af"&gt;DependencyObject&lt;/span&gt; uie, &lt;span style="color: blue"&gt;bool&lt;/span&gt; value)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; uie.SetValue(IsEnabledProperty, value);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
This is a boilerplate example of an attached property – nothing to see here.&amp;nbsp;
The magic happens in the &lt;strong&gt;PropertyChange &lt;/strong&gt;callback:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red43\green145\blue175;}??\fs28 \cf1 private\cf0  \cf1 static\cf0  \cf1 void\cf0  OnIsEnabledChanged(\cf4 DependencyObject\cf0  dpo, \cf4 DependencyPropertyChangedEventArgs\cf0  e)\par ??\{\par ??    \cf4 UIElement\cf0  uie = dpo \cf1 as\cf0  \cf4 UIElement\cf0 ;\par ??    \cf1 if\cf0  (uie != \cf1 null\cf0 )\par ??    \{\par ??        \cf1 var\cf0  behColl = \cf4 Interaction\cf0 .GetBehaviors(uie);\par ??        \cf1 var\cf0  existingBehavior = behColl.FirstOrDefault(b =&amp;gt; b.GetType() == \cf1 typeof\cf0 (\cf4 DragPositionBehavior\cf0 )) \cf1 as\cf0  \cf4 DragPositionBehavior\cf0 ;\par ??        \cf1 if\cf0  ((\cf1 bool\cf0 )e.NewValue == \cf1 false\cf0  &amp;amp;&amp;amp; existingBehavior != \cf1 null\cf0 )\par ??        \{\par ??            behColl.Remove(existingBehavior);\par ??        \}\par ??        \cf1 else\cf0  \cf1 if\cf0  ((\cf1 bool\cf0 )e.NewValue == \cf1 true\cf0  &amp;amp;&amp;amp; existingBehavior == \cf1 null\cf0 )\par ??        \{\par ??            behColl.Add(\cf1 new\cf0  \cf4 DragPositionBehavior\cf0 ());\par ??        \}\par ??    \}\par ??\}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; OnIsEnabledChanged(&lt;span style="color: #2b91af"&gt;DependencyObject&lt;/span&gt; dpo, 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;DependencyPropertyChangedEventArgs&lt;/span&gt; e)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;UIElement&lt;/span&gt; uie = dpo &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;UIElement&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (uie != &lt;span style="color: blue"&gt;null&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;var&lt;/span&gt; behColl
= &lt;span style="color: #2b91af"&gt;Interaction&lt;/span&gt;.GetBehaviors(uie);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;var&lt;/span&gt; existingBehavior
= behColl.FirstOrDefault(b =&amp;gt; b.GetType() == 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;DragPositionBehavior&lt;/span&gt;)) &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DragPositionBehavior&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; ((&lt;span style="color: blue"&gt;bool&lt;/span&gt;)e.NewValue
== &lt;span style="color: blue"&gt;false&lt;/span&gt; &amp;amp;&amp;amp; existingBehavior != &lt;span style="color: blue"&gt;null&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; behColl.Remove(existingBehavior);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;else&lt;/span&gt; &lt;span style="color: blue"&gt;if&lt;/span&gt; ((&lt;span style="color: blue"&gt;bool&lt;/span&gt;)e.NewValue
== &lt;span style="color: blue"&gt;true&lt;/span&gt; &amp;amp;&amp;amp; existingBehavior == &lt;span style="color: blue"&gt;null&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; behColl.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DragPositionBehavior&lt;/span&gt;());
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Let’s break this down a little.&amp;nbsp; When we have the IsEnabled property set onto
an element, first we verify it’s a &lt;strong&gt;UIElement &lt;/strong&gt;(we cannot drag it on
anything that isn’t because the mouse events are defined at this level).&amp;nbsp; Next,
we check the behaviors collection on that element – if an existing behavior is there
and we are setting the property to “false”, then we remove the existing behavior from
the collection.&amp;nbsp; If there is no behavior, and we are setting the property to
“true”, then we add a new &lt;strong&gt;DragPositionBehavior &lt;/strong&gt;instance to the collection
here.&amp;nbsp; This, in effect, is exactly what the first block of XAML is doing, and
it’s what we do as well here in code – so the Style setter works as expected.
&lt;/p&gt;
&lt;p&gt;
This isn’t really a trick – I’m sure others have thought of it as well, but it’s a
useful thing to add into your behaviors so they can be universally used, both by Blend
as well as by developers directly wanting to apply it in places where Blend cannot
today.
&lt;/p&gt;</description>
      <comments>http://www.julmar.com/blog/mark/CommentView,guid,f6809b09-7c04-4272-99fd-acfa5fc53ad9.aspx</comments>
      <category>.NET</category>
      <category>MVVM</category>
      <category>WPF</category>
    </item>
    <item>
      <trackback:ping>http://www.julmar.com/blog/mark/Trackback.aspx?guid=3d40b8c3-fab0-4e64-90a8-59a3582a2e31</trackback:ping>
      <pingback:server>http://www.julmar.com/blog/mark/pingback.aspx</pingback:server>
      <pingback:target>http://www.julmar.com/blog/mark/PermaLink,guid,3d40b8c3-fab0-4e64-90a8-59a3582a2e31.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.julmar.com/blog/mark/CommentView,guid,3d40b8c3-fab0-4e64-90a8-59a3582a2e31.aspx</wfw:comment>
      <wfw:commentRss>http://www.julmar.com/blog/mark/SyndicationService.asmx/GetEntryCommentsRss?guid=3d40b8c3-fab0-4e64-90a8-59a3582a2e31</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In this post, we will look at the <strong>IUIVisualizer</strong>, and bring together
some of the concepts we’ve talked about already through a new sample – a simple picture
viewer:
</p>
        <p>
          <a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_thumb.png" width="520" height="393" />
          </a>
        </p>
        <p>
The application grabs all the images from the user’s photo folder and then displays
each one onto the surface of a corkboard.  You can change the properties of an
image, remove an image or add additional images.  It’s not designed to be a true
image application ala photoSuru, it’s really more of a sample of MVVM practices with
the helper library.  Here’s some of the coding examples present in the sample:
</p>
        <ul>
          <li>
It registers a <strong>ISelectFile</strong> service and implements it as an OpenFileDialog. 
</li>
          <li>
It displays a “Picture Properties” dialog using the <strong>IUIVisualizer</strong> service. 
</li>
          <li>
It maps mouse DoubleClick on an image into a command in the ViewModel to display the
properties. 
</li>
          <li>
It provides drag support through a behavior on the style.</li>
        </ul>
        <p>
Let’s look at this four features in particular.  Download the sample from here:
</p>
        <p>
          <a href="http://www.julmar.com/samples/PictureViewer.zip" target="_blank">PictureViewer</a>
        </p>
        <p>
Open the project in Visual Studio 2008 SP1, it should build and run without any issues. 
The project structure is pretty much like all the other samples I’ve blogged about
– I’m trying to keep to a consistent model:
</p>
        <p>
          <a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_4.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_thumb_1.png" width="283" height="595" />
          </a>
        </p>
        <h4>Service Registration
</h4>
        <p>
If you look at the <strong>App.xaml.cs</strong> code behind, you’ll find the registration
work being done in the constructor:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red0\green128\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs28 \cf1 public\cf0  App()\par ??\{\par ??    \cf4 // Register the typical services (UI, Error, etc.) for this application.\par ??\cf0     \cf5 ViewModel\cf0 .RegisterKnownServiceTypes();\par ??\par ??    \cf4 // Register the file selector service.\par ??\cf0     \cf5 ViewModel\cf0 .ServiceProvider.Add(\cf1 typeof\cf0 (\cf5 ISelectFile\cf0 ), \cf1 new\cf0  \cf5 OpenFileDialogSelector\cf0 ());\par ??\par ??    \cf4 // Register the UI dialogs.\par ??\cf0     \cf1 var\cf0  uiVisualizer = \cf5 ViewModel\cf0 .ServiceProvider.Resolve&lt;\cf5 IUIVisualizer\cf0 &gt;();\par ??        uiVisualizer.Register(\cf6 "ShowElementProperties"\cf0 , \cf1 typeof\cf0 (\cf5 PropertyWindow\cf0 ));\par ??\}\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: blue">public</span> App()
</p>
          <p style="margin: 0px">
{
</p>
          <p style="margin: 0px">
    <span style="color: green">// Register the typical services (UI,
Error, etc.) for this application.</span></p>
          <p style="margin: 0px">
    <span style="color: #2b91af">ViewModel</span>.RegisterKnownServiceTypes();
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
    <span style="color: green">// Register the file selector service.</span></p>
          <p style="margin: 0px">
    <span style="color: #2b91af">ViewModel</span>.ServiceProvider.Add(<span style="color: blue">typeof</span>(<span style="color: #2b91af">ISelectFile</span>), <span style="color: blue">new</span><span style="color: #2b91af">OpenFileDialogSelector</span>());
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
    <span style="color: green">// Register the UI dialogs.</span></p>
          <p style="margin: 0px">
    <span style="color: blue">var</span> uiVisualizer = <span style="color: #2b91af">ViewModel</span>.ServiceProvider.Resolve&lt;<span style="color: #2b91af">IUIVisualizer</span>&gt;();
</p>
          <p style="margin: 0px">
        uiVisualizer.Register(<span style="color: #a31515">"ShowElementProperties"</span>, <span style="color: blue">typeof</span>(<span style="color: #2b91af">PropertyWindow</span>));
</p>
          <p style="margin: 0px">
}
</p>
        </div>
        <p>
          <br />
First, note that it registers the standard services – that’s something I always do,
even if I don’t anticipate needing them all, it doesn’t hurt to have them there. Next,
it adds the file selector service by calling <strong>ServiceProvider.Add </strong>on
the <strong>ViewModel </strong>class.  The interface is defined as a single method:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red43\green145\blue175;}??\fs28 \cf1 namespace\cf0  PictureViewer.Interfaces\par ??\{\par ??    \cf1 public\cf0  \cf1 interface\cf0  \cf4 ISelectFile\par ??\cf0     \{\par ??        \cf1 string\cf0  SelectFile(\cf1 string\cf0  fileFilters);\par ??    \}\par ??\}\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: blue">namespace</span> PictureViewer.Interfaces
</p>
          <p style="margin: 0px">
{
</p>
          <p style="margin: 0px">
    <span style="color: blue">public</span><span style="color: blue">interface</span><span style="color: #2b91af">ISelectFile</span></p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
        <span style="color: blue">string</span> SelectFile(<span style="color: blue">string</span> fileFilters);
</p>
          <p style="margin: 0px">
    }
</p>
          <p style="margin: 0px">
}
</p>
        </div>
        <p>
          <br />
The registration ties this interface to an implementation that displays the <strong>OpenFileDialog</strong>,
for testing purposes, that would be replaced with a minimum of two implementations:
one that returns null/empty and one that returns a valid filename to test both cases.
</p>
        <p>
The final line in the <strong>app.xaml.cs </strong>file registers a UI dialog to display
the properties of the image.  This is done through the <strong>IUIVisualizer </strong>interface
which is defined in the helper library:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red43\green145\blue175;}??\fs28 \cf1 namespace\cf0  JulMar.Windows.Interfaces\par ??\{\par ??    \cf1 public\cf0  \cf1 interface\cf0  \cf4 IUIVisualizer\par ??\cf0     \{\par ??        \cf1 void\cf0  Register(\cf1 string\cf0  key, \cf4 Type\cf0  winType);\par ??        \cf1 bool\cf0  Unregister(\cf1 string\cf0  key);\par ??        \cf1 bool\cf0  Show(\cf1 string\cf0  key, \cf1 object\cf0  state, \cf1 bool\cf0  setOwner, \cf4 EventHandler\cf0 &lt;UICompletedEventArgs&gt; completedProc);\par ??        \cf1 bool\cf0 ? ShowDialog(\cf1 string\cf0  key, \cf1 object\cf0  state);\par ??    \}\par ??\}\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: blue">namespace</span> JulMar.Windows.Interfaces
</p>
          <p style="margin: 0px">
{
</p>
          <p style="margin: 0px">
    <span style="color: blue">public</span><span style="color: blue">interface</span><span style="color: #2b91af">IUIVisualizer</span></p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
        <span style="color: blue">void</span> Register(<span style="color: blue">string</span> key, <span style="color: #2b91af">Type</span> winType);
</p>
          <p style="margin: 0px">
        <span style="color: blue">bool</span> Unregister(<span style="color: blue">string</span> key);
</p>
          <p style="margin: 0px">
        <span style="color: blue">bool</span> Show(<span style="color: blue">string</span> key, <span style="color: blue">object</span> state, <span style="color: blue">bool</span> setOwner,
</p>
          <p style="margin: 0px">
                  <span style="color: #2b91af">EventHandler</span>&lt;UICompletedEventArgs&gt;
completedProc);
</p>
          <p style="margin: 0px">
        <span style="color: blue">bool</span>?
ShowDialog(<span style="color: blue">string</span> key, <span style="color: blue">object</span> state);
</p>
          <p style="margin: 0px">
    }
</p>
          <p style="margin: 0px">
}
</p>
        </div>
        <p>
          <br />
Notice the <strong>Register</strong> and <strong>Unregister </strong>methods take
a string defined as a “key”.  This is the key that invokers will use to display
the UI visually; I often use the typename of the View, but you can use any string
here as long as you are consistent in registration vs. invocation.  In this sample,
I’ve used the key <strong>“ShowElementProperties”</strong> – we’ll see in a moment
how it is displayed.  The second parameter for the Register method takes the
Type to display.  The type must be a WPF Window-derived type (i.e. <strong>NavigationWindow </strong>or <strong>Window</strong>)
and will represent the View in our MVVM pattern.
</p>
        <h4>Displaying a UI with IUIVisualizer
</h4>
        <p>
In the <strong>PictureViewModel</strong> type, there is an <strong>ICommand </strong>that
is used to drive the Property window:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;}??\fs28 \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??///\cf3  Command to show the image properties.\par ??\cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf4 public\cf0  \cf6 ICommand\cf0  ShowPropertiesCommand \{ \cf4 get\cf0 ; \cf4 private\cf0  \cf4 set\cf0 ; \}\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: gray">///</span>
            <span style="color: green">
            </span>
            <span style="color: gray">&lt;summary&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: gray">///</span>
            <span style="color: green"> Command to show the
image properties.</span>
          </p>
          <p style="margin: 0px">
            <span style="color: gray">///</span>
            <span style="color: green">
            </span>
            <span style="color: gray">&lt;/summary&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">public</span>
            <span style="color: #2b91af">ICommand</span> ShowPropertiesCommand
{ <span style="color: blue">get</span>; <span style="color: blue">private</span><span style="color: blue">set</span>;
}
</p>
        </div>
        <p>
          <br />
The default constructor fills that in with a <strong>DelegatingCommand </strong>to
jump to a method of the ViewModel:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red43\green145\blue175;}??\fs28 \cf1 public\cf0  PictureViewModel()\par ??\{\par ??    _picture = \cf1 new\cf0  \cf4 PictureInfo\cf0 ();\par ??    ShowPropertiesCommand = \cf1 new\cf0  \cf4 DelegatingCommand\cf0 (ShowProperties);\par ??    SelectNewImageFile = \cf1 new\cf0  \cf4 DelegatingCommand\cf0 (OnSelectNewFile);\par ??    RemovePicture = \cf1 new\cf0  \cf4 DelegatingCommand\cf0 (() =&gt; SendMessage(\cf4 MainViewModel\cf0 .RemovePictureMessage, \cf1 this\cf0 ));\par ??\}\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: blue">public</span> PictureViewModel()
</p>
          <p style="margin: 0px">
{
</p>
          <p style="margin: 0px">
    _picture = <span style="color: blue">new</span><span style="color: #2b91af">PictureInfo</span>();
</p>
          <p style="margin: 0px">
    ShowPropertiesCommand = <span style="color: blue">new</span><span style="color: #2b91af">DelegatingCommand</span>(ShowProperties);
</p>
          <p style="margin: 0px">
    SelectNewImageFile = <span style="color: blue">new</span><span style="color: #2b91af">DelegatingCommand</span>(OnSelectNewFile);
</p>
          <p style="margin: 0px">
    RemovePicture = <span style="color: blue">new</span><span style="color: #2b91af">DelegatingCommand</span>(
</p>
          <p style="margin: 0px">
                 
() =&gt; SendMessage(<span style="color: #2b91af">MainViewModel</span>.RemovePictureMessage, <span style="color: blue">this</span>));
</p>
          <p style="margin: 0px">
}
</p>
        </div>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs28 \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??///\cf3  Display the UI associated with this picture\par ??\cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf4 internal\cf0  \cf4 void\cf0  ShowProperties()\par ??\{\par ??    \cf4 var\cf0  uiVisualizer = Resolve&lt;\cf6 IUIVisualizer\cf0 &gt;();\par ??    \cf4 if\cf0  (uiVisualizer != \cf4 null\cf0 )\par ??    \{\par ??        uiVisualizer.ShowDialog(\cf7 "ShowElementProperties"\cf0 , \cf4 this\cf0 );\par ??    \}\par ??\}\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: gray">
            </span> 
</p>
          <p style="margin: 0px">
            <span style="color: gray">///</span>
            <span style="color: green">
            </span>
            <span style="color: gray">&lt;summary&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: gray">///</span>
            <span style="color: green"> Display the UI associated
with this picture</span>
          </p>
          <p style="margin: 0px">
            <span style="color: gray">///</span>
            <span style="color: green">
            </span>
            <span style="color: gray">&lt;/summary&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">internal</span>
            <span style="color: blue">void</span> ShowProperties()
</p>
          <p style="margin: 0px">
{
</p>
          <p style="margin: 0px">
    <span style="color: blue">var</span> uiVisualizer = Resolve&lt;<span style="color: #2b91af">IUIVisualizer</span>&gt;();
</p>
          <p style="margin: 0px">
    <span style="color: blue">if</span> (uiVisualizer != <span style="color: blue">null</span>)
</p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
        uiVisualizer.ShowDialog(<span style="color: #a31515">"ShowElementProperties"</span>, <span style="color: blue">this</span>);
</p>
          <p style="margin: 0px">
    }
</p>
          <p style="margin: 0px">
}
</p>
        </div>
        <p>
          <br />
The handler method is marked as <strong>internal</strong> because the <strong>MainViewModel </strong>forwards
it’s own command to this same method handler (from the menu and toolbar).  Notice
that the method first gets the <strong>IUIVisualizer</strong> service; you must use
the same service instance where you registered the UI view.  Next, it calls <strong>ShowDialog</strong> to
display a modal view.  It takes two parameters – the view key, and the view model.
</p>
        <p>
A <em>modal view </em>is one that forces the user to interact and dismiss the dialog
before they can continue working with the other elements in the application. 
It is what, as an example, applications often use for Options dialogs.  <strong>ShowDialog</strong> will
display the View associated with the given string key (<strong>“ShowElementProperties”</strong>). 
The second parameter is the ViewModel you want to associate to it – in this case we
are passing the associated picture we want to work with.  The dialog is then
displayed and allows the user to edit the picture properties:
</p>
        <p>
          <a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_6.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_thumb_2.png" width="244" height="228" />
          </a>
        </p>
        <p>
The XAML code for this view is contained in the PropertyWindow.xaml file – it has
a couple of interesting elements to it which you will see when you interact with this
dialog:
</p>
        <p>
1. <strong>Watermarked Text display</strong>: if you remove the title, it will display
some grayed out text in it’s place “Enter the Title Here”:
</p>
        <p>
          <a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_8.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_thumb_3.png" width="244" height="228" />
          </a>
        </p>
        <p>
        </p>
        <p>
2. <strong>Numeric TextBox</strong>:  if you move your mouse cursor over the
X/Y/Width/Height boxes you will see a sizing arrow that allows you to drag and change
the values without typing.  You can also double-click to change the values and
it enforces numeric text box behavior.
</p>
        <p>
          <a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_10.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_thumb_4.png" width="244" height="228" />
          </a>
        </p>
        <p>
Both of these are accomplished with Blend Behaviors. There are plenty of resources
on the web about these so I won’t go into detail on their creation – check the library
source code if you want to see how they work, but using them involves taking a dependency
on two assemblies:
</p>
        <ol>
          <li>
            <strong>System.Windows.Interactivity.dll</strong>
          </li>
          <li>
            <strong>JulMar.Wpf.Behaviors.dll</strong>
          </li>
        </ol>
        <p>
Both of these are included in the Dependencies folder.  The first comes from
the Blend SDK and is freely redistributable with your project.  To use them,
you add the behavior to the visual element in question, for example, the watermarked
textbox behavior gets applied like this:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;}??\fs28 \cf1 &lt;\cf3 TextBox\cf4  Text\cf1 ="\{\cf3 Binding\cf4  Title\cf1 \}"&gt;\par ??\cf3 \tab \cf1 &lt;\cf3 Interactivity\cf1 :\cf3 Interaction.Behaviors\cf1 &gt;\par ??\cf3 \tab \tab \cf1 &lt;\cf3 julmar\cf1 :\cf3 WatermarkTextBoxBehavior\cf4  Text\cf1 ="Enter the Title Here"/&gt;\par ??\cf3 \tab \cf1 &lt;/\cf3 Interactivity\cf1 :\cf3 Interaction.Behaviors\cf1 &gt;\par ??\cf3     \cf1 &lt;\cf3 TextBox.Style\cf1 &gt;\par ??\cf3         \cf1 &lt;\cf3 Style\cf4  TargetType\cf1 ="TextBox"\cf4  BasedOn\cf1 ="\{\cf3 StaticResource\cf1  \{\cf3 x\cf1 :\cf3 Type\cf4  TextBox\cf1 \}\}"&gt;\par ??\cf3             \cf1 &lt;\cf3 Setter\cf4  Property\cf1 ="FontStyle"\cf4  Value\cf1 ="Normal" /&gt;\par ??\cf3             \cf1 &lt;\cf3 Style.Triggers\cf1 &gt;\par ??\cf3                 \cf1 &lt;\cf3 Trigger\cf4  Property\cf1 ="julmar:WatermarkTextBoxBehavior.IsWatermarked"\cf4  Value\cf1 ="True"&gt;\par ??\cf3                     \cf1 &lt;\cf3 Setter\cf4  Property\cf1 ="FontStyle"\cf4  Value\cf1 ="Italic" /&gt;\par ??\cf3                     \cf1 &lt;\cf3 Setter\cf4  Property\cf1 ="Foreground"\cf4  Value\cf1 ="LightGray" /&gt;\par ??\cf3                 \cf1 &lt;/\cf3 Trigger\cf1 &gt;\par ??\cf3             \cf1 &lt;/\cf3 Style.Triggers\cf1 &gt;\par ??\cf3         \cf1 &lt;/\cf3 Style\cf1 &gt;\par ??\cf3     \cf1 &lt;/\cf3 TextBox.Style\cf1 &gt;\par ??&lt;/\cf3 TextBox\cf1 &gt;\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">TextBox</span>
            <span style="color: red"> Text</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> Title</span>
            <span style="color: blue">}"&gt;</span>
          </p>
          <p style="margin: 0px">
            <strong>
              <span style="color: #a31515">    </span>
              <span style="color: blue">&lt;</span>
              <span style="color: #a31515">Interactivity</span>
              <span style="color: blue">:</span>
              <span style="color: #a31515">Interaction.Behaviors</span>
              <span style="color: blue">&gt;</span>
            </strong>
          </p>
          <p style="margin: 0px">
            <strong>
              <span style="color: #a31515">        </span>
              <span style="color: blue">&lt;</span>
              <span style="color: #a31515">julmar</span>
              <span style="color: blue">:</span>
              <span style="color: #a31515">WatermarkTextBoxBehavior</span>
              <span style="color: red"> Text</span>
              <span style="color: blue">="Enter
the Title Here"/&gt;</span>
            </strong>
          </p>
          <p style="margin: 0px">
            <strong>
              <span style="color: #a31515">    </span>
              <span style="color: blue">&lt;/</span>
              <span style="color: #a31515">Interactivity</span>
              <span style="color: blue">:</span>
              <span style="color: #a31515">Interaction.Behaviors</span>
              <span style="color: blue">&gt;</span>
            </strong>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">    </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">TextBox.Style</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Style</span>
            <span style="color: red"> TargetType</span>
            <span style="color: blue">="TextBox"</span>
            <span style="color: red"> BasedOn</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">StaticResource</span>
            <span style="color: blue"> {</span>
            <span style="color: #a31515">x</span>
            <span style="color: blue">:</span>
            <span style="color: #a31515">Type</span>
            <span style="color: red"> TextBox</span>
            <span style="color: blue">}}"&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">            </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Setter</span>
            <span style="color: red"> Property</span>
            <span style="color: blue">="FontStyle"</span>
            <span style="color: red"> Value</span>
            <span style="color: blue">="Normal"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">            </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Style.Triggers</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">                </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Trigger</span>
            <span style="color: red"> Property</span>
            <span style="color: blue">="julmar:WatermarkTextBoxBehavior.IsWatermarked"</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">                        </span>
            <span style="color: red">Value</span>
            <span style="color: blue">="True"&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">                    </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Setter</span>
            <span style="color: red"> Property</span>
            <span style="color: blue">="FontStyle"</span>
            <span style="color: red"> Value</span>
            <span style="color: blue">="Italic"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">                    </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Setter</span>
            <span style="color: red"> Property</span>
            <span style="color: blue">="Foreground"</span>
            <span style="color: red"> Value</span>
            <span style="color: blue">="LightGray"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">                </span>
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">Trigger</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">            </span>
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">Style.Triggers</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">Style</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">    </span>
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">TextBox.Style</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">TextBox</span>
            <span style="color: blue">&gt;</span>
          </p>
        </div>
        <p>
          <br />
I’ve also applied a Trigger to change the font/colors when the TextBox is watermarked.
</p>
        <p>
The numeric behavior looks like this:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;}??\fs28 \cf1 &lt;\cf3 TextBox\cf4  Grid.Row\cf1 ="5"\cf4  Text\cf1 ="\{\cf3 Binding\cf4  Width\cf1 ,\cf4  UpdateSourceTrigger\cf1 =PropertyChanged\}"&gt;\par ??\cf3     \cf1 &lt;\cf3 Interactivity\cf1 :\cf3 Interaction.Behaviors\cf1 &gt;\par ??\cf3         \cf1 &lt;\cf3 julmar\cf1 :\cf3 NumericTextBoxBehavior\cf4  AllowMouseDrag\cf1 ="True" /&gt;\par ??\cf3     \cf1 &lt;/\cf3 Interactivity\cf1 :\cf3 Interaction.Behaviors\cf1 &gt;\par ??&lt;/\cf3 TextBox\cf1 &gt;\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">TextBox</span>
            <span style="color: red"> Grid.Row</span>
            <span style="color: blue">="5"</span>
            <span style="color: red"> Text</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> Width</span>
            <span style="color: blue">,</span>
            <span style="color: red"> UpdateSourceTrigger</span>
            <span style="color: blue">=PropertyChanged}"&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">    </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Interactivity</span>
            <span style="color: blue">:</span>
            <span style="color: #a31515">Interaction.Behaviors</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">julmar</span>
            <span style="color: blue">:</span>
            <span style="color: #a31515">NumericTextBoxBehavior</span>
            <span style="color: red"> AllowMouseDrag</span>
            <span style="color: blue">="True"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">    </span>
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">Interactivity</span>
            <span style="color: blue">:</span>
            <span style="color: #a31515">Interaction.Behaviors</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">TextBox</span>
            <span style="color: blue">&gt;</span>
          </p>
        </div>
        <p>
          <br />
Notice that I’ve changed the <strong>Binding.UpdateSourceTrigger </strong>to be <strong>PropertyChanged</strong> –
this is so the dragging effect works properly and updates the value in the underlying
view model.
</p>
        <h4>Ways to invoke commands in the view
</h4>
        <p>
So let’s look now at how we get the command executed.  Switching to the <strong>MainWindow.xaml </strong>you
will find three places where the Show Properties command is wired up.
</p>
        <p>
First, it can be invoked using a keyboard accelerator. This requires using a <strong>BindableCommand </strong>from
the library, placing it into resources and then binding against that.  The command
we will be executing is the one on the <strong>MainViewModel </strong>so it requires
the actual picture element as a parameter:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green0\blue0;}??\fs28 \cf1 &lt;\cf3 Window.Resources\cf1 &gt;\par ??\cf3     \cf1 &lt;\cf3 julmar\cf1 :\cf3 BindableCommand\cf4  x\cf1 :\cf4 Key\cf1 ="propsCommand"\cf4  Command\cf1 ="\{\cf3 Binding\cf4  ShowPropertiesCommand\cf1 \}"\cf0  \par ??                           \cf4  CommandParameter\cf1 ="\{\cf3 Binding\cf4  SelectedPicture\cf1 \}" /&gt;\par ??&lt;/\cf3 Window.Resources\cf1 &gt;\par ??\par ??&lt;\cf3 Window.InputBindings\cf1 &gt;\par ??\cf3     \cf1 &lt;\cf3 KeyBinding\cf4  Key\cf1 ="r"\cf4  Modifiers\cf1 ="Ctrl+Alt"\cf4  Command\cf1 ="\{\cf3 StaticResource\cf4  propsCommand\cf1 \}" /&gt;\par ??&lt;/\cf3 Window.InputBindings\cf1 &gt;\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Window.Resources</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">    </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">julmar</span>
            <span style="color: blue">:</span>
            <span style="color: #a31515">BindableCommand</span>
            <span style="color: red"> x</span>
            <span style="color: blue">:</span>
            <span style="color: red">Key</span>
            <span style="color: blue">="propsCommand"</span>
            <span style="color: red"> Command</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> ShowPropertiesCommand</span>
            <span style="color: blue">}"</span>
          </p>
          <p style="margin: 0px">
                           <span style="color: red">CommandParameter</span><span style="color: blue">="{</span><span style="color: #a31515">Binding</span><span style="color: red"> SelectedPicture</span><span style="color: blue">}"
/&gt;</span></p>
          <p style="margin: 0px">
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">Window.Resources</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Window.InputBindings</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">    </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">KeyBinding</span>
            <span style="color: red"> Key</span>
            <span style="color: blue">="r"</span>
            <span style="color: red"> Modifiers</span>
            <span style="color: blue">="Ctrl+Alt"</span>
            <span style="color: red"> Command</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">StaticResource</span>
            <span style="color: red"> propsCommand</span>
            <span style="color: blue">}"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">Window.InputBindings</span>
            <span style="color: blue">&gt;</span>
          </p>
        </div>
        <p>
          <br />
The MainViewModel simply forwards this command onto the PictureViewModel using a typed <strong>DelegatingCommand</strong>:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;}??\fs28 ShowPropertiesCommand = \cf3 new\cf0  \cf4 DelegatingCommand\cf0 &lt;\cf4 PictureViewModel\cf0 &gt;(p =&gt; p.ShowProperties(), p =&gt; p != \cf3 null\cf0 );\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
ShowPropertiesCommand = <span style="color: blue">new</span><span style="color: #2b91af">DelegatingCommand</span>&lt;<span style="color: #2b91af">PictureViewModel</span>&gt;(
</p>
          <p style="margin: 0px">
                   
p =&gt; p.ShowProperties(), p =&gt; p != <span style="color: blue">null</span>);
</p>
        </div>
        <p>
          <br />
Next, we can invoke the command using the menu and toolbar:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red163\green21\blue21;\red255\green255\blue255;\red0\green0\blue255;\red255\green0\blue0;\red0\green0\blue0;}??\fs28 \cf1     \cf3 &lt;\cf1 MenuItem\cf4  Header\cf3 ="_Edit"&gt;\par ??\cf1         \cf3 &lt;\cf1 MenuItem\cf4  Header\cf3 ="Add _New Picture"\cf4  Command\cf3 ="\{\cf1 Binding\cf4  AddNewCommand\cf3 \}" /&gt;\par ??\cf1         \cf3 &lt;\cf1 MenuItem\cf4  Header\cf3 ="_Remove Picture"\cf4  Command\cf3 ="\{\cf1 Binding\cf4  RemoveCommand\cf3 \}"\cf4  CommandParameter\cf3 ="\{\cf1 Binding\cf4  SelectedPicture\cf3 \}" /&gt;\par ??\cf1         \cf3 &lt;\cf1 Separator\cf3  /&gt;\par ??\cf1         \cf3 &lt;\cf1 MenuItem\cf4  Header\cf3 ="P_roperties"\cf4  Command\cf3 ="\{\cf1 Binding\cf4  ShowPropertiesCommand\cf3 \}"\cf4  CommandParameter\cf3 ="\{\cf1 Binding\cf4  SelectedPicture\cf3 \}" /&gt;\par ??\cf1     \cf3 &lt;/\cf1 MenuItem\cf3 &gt;\par ??\cf1         \cf3 &lt;/\cf1 Menu\cf3 &gt;\par ??\cf1         \par ??    \cf3 &lt;\cf1 ToolBar\cf4  DockPanel.Dock\cf3 ="Top"&gt;\par ??\cf1         \cf3 &lt;\cf1 Button\cf4  ToolTip\cf3 ="Add New Picture"\cf4  Command\cf3 ="\{\cf1 Binding\cf4  AddNewCommand\cf3 \}"\cf4  Content\cf3 ="+"\cf4  FontWeight\cf3 ="Bold" /&gt;\par ??\cf1         \cf3 &lt;\cf1 Button\cf4  ToolTip\cf3 ="Remove Picture"\cf4  Command\cf3 ="\{\cf1 Binding\cf4  RemoveCommand\cf3 \}"\cf4  CommandParameter\cf3 ="\{\cf1 Binding\cf4  SelectedPicture\cf3 \}"\cf4  Content\cf3 ="-"\cf4  FontWeight\cf3 ="Bold" /&gt;\par ??\cf1         \cf3 &lt;\cf1 Button\cf4  ToolTip\cf3 ="Properties"\cf4  Command\cf3 ="\{\cf1 Binding\cf4  ShowPropertiesCommand\cf3 \}"\cf4  CommandParameter\cf3 ="\{\cf1 Binding\cf4  SelectedPicture\cf3 \}"&gt;\par ??\cf1             \cf3 &lt;\cf1 Path\cf4  Width\cf3 ="16"\cf4  Height\cf3 ="16"\cf4  Fill\cf3 ="\{\cf1 julmar\cf3 :\cf1 LinearGradientBrush\cf4  LightGreen\cf3 ,\cf4  DarkGreen\cf3 ,\cf0  90\cf3 \}"\cf4  Stroke\cf3 ="DarkGreen"\par ??\cf0                  \cf4  Data\cf3 ="M1,1 L15,7.5 L1,15 Z" /&gt;\par ??\cf1         \cf3 &lt;/\cf1 Button\cf3 &gt;\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: #a31515">    </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">MenuItem</span>
            <span style="color: red"> Header</span>
            <span style="color: blue">="_Edit"&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">MenuItem</span>
            <span style="color: red"> Header</span>
            <span style="color: blue">="Add
_New Picture"</span>
            <span style="color: red"> Command</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> AddNewCommand</span>
            <span style="color: blue">}"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">MenuItem</span>
            <span style="color: red"> Header</span>
            <span style="color: blue">="_Remove
Picture"</span>
            <span style="color: red"> Command</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> RemoveCommand</span>
            <span style="color: blue">}"</span>
            <span style="color: red">
            </span>
          </p>
          <p style="margin: 0px">
            <span style="color: red">                 
CommandParameter</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> SelectedPicture</span>
            <span style="color: blue">}"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Separator</span>
            <span style="color: blue"> /&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">MenuItem</span>
            <span style="color: red"> Header</span>
            <span style="color: blue">="P_roperties"</span>
            <span style="color: red"> Command</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> ShowPropertiesCommand</span>
            <span style="color: blue">}"</span>
            <span style="color: red">
            </span>
          </p>
          <p style="margin: 0px">
            <span style="color: red">                 
CommandParameter</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> SelectedPicture</span>
            <span style="color: blue">}"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">    </span>
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">MenuItem</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
   ...
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">ToolBar</span>
            <span style="color: red"> DockPanel.Dock</span>
            <span style="color: blue">="Top"&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Button</span>
            <span style="color: red"> ToolTip</span>
            <span style="color: blue">="Add
New Picture"</span>
            <span style="color: red"> Command</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> AddNewCommand</span>
            <span style="color: blue">}"</span>
            <span style="color: red">
            </span>
          </p>
          <p style="margin: 0px">
            <span style="color: red">               
Content</span>
            <span style="color: blue">="+"</span>
            <span style="color: red"> FontWeight</span>
            <span style="color: blue">="Bold"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Button</span>
            <span style="color: red"> ToolTip</span>
            <span style="color: blue">="Remove
Picture"</span>
            <span style="color: red"> Command</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> RemoveCommand</span>
            <span style="color: blue">}"</span>
            <span style="color: red">
            </span>
          </p>
          <p style="margin: 0px">
            <span style="color: red">           
CommandParameter</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> SelectedPicture</span>
            <span style="color: blue">}"</span>
            <span style="color: red"> Content</span>
            <span style="color: blue">="-"</span>
            <span style="color: red"> FontWeight</span>
            <span style="color: blue">="Bold"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Button</span>
            <span style="color: red"> ToolTip</span>
            <span style="color: blue">="Properties"</span>
            <span style="color: red"> Command</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> ShowPropertiesCommand</span>
            <span style="color: blue">}"</span>
            <span style="color: red">
            </span>
          </p>
          <p style="margin: 0px">
            <span style="color: red">           
CommandParameter</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> SelectedPicture</span>
            <span style="color: blue">}"
/&gt;</span>
          </p>
          <p style="margin: 0px">
   ...
</p>
          <p style="margin: 0px">
 
</p>
        </div>
        <p>
Note that here we are also binding to the <strong>MainViewModel </strong>command –
so we must supply the parameter using the <strong>CommandParameter</strong>. 
The final invocation place is when you double-click on the picture itself.  This
is done a little differently if you’ve not done much WPF work.  
</p>
        <h4>A quick segway – View code behind vs. View Models
</h4>
        <p>
First, the display of images is actually housed in a <strong>ListBox</strong>. 
It turns out that anytime you need to display multiple things grouped somehow, and
allow the user to select one or more of those things, a ListBox is almost always the
way to go.  WPF allows us to customize the visuals however we like, so here the
panel has been replaced with a <strong>Canvas </strong>(allowing pixel positioning),
and each item is drawn as a <strong>DataTemplate</strong>.  The template decides
how to render each item in the ListBox – the PictureViewModel in this case. 
In the sample, it is rendering an image and an optional TextBlock that is turned on
and off through a property (and can be changed through the tool bar).  I encourage
you to look at the code to see how all that is done.  
</p>
        <p>
One of the core things necessary in MVVM is the ability to interact with visuals and
then <em>sometimes</em> push notifications of that interaction back to the view model. 
I say “sometimes” because it’s perfectly acceptable to place code into the code behind
for the XAML as well. Where you put the logic depends on whether it is view-specific
and whether you want to test it independently of the view.  If it’s not view
specific OR you want to test it, then move it into the view model.  An example
of something that we probably don’t care about is closing the application – I’ve wired
it up to a command here just to show that you can, but it’s completely unnecessary
to do that.  The view model isn’t doing any closing logic, so it would be fine
to wire a handler into the MainWindow.xaml.cs and just call “this.Close()” in there.
</p>
        <p>
Ok, so back to the double-click implementation.  In the <strong>DataTemplate</strong> assigned
to the <strong>ListBox.ItemTemplate </strong>property you will find the definition
for the image itself:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green0\blue0;}??\fs28 \cf1 &lt;\cf3 Image\cf4  x\cf1 :\cf4 Name\cf1 ="imageHolder"\cf4  Width\cf1 ="\{\cf3 Binding\cf4  Width\cf1 \}"\cf4  Height\cf1 ="\{\cf3 Binding\cf4  Height\cf1 \}"\par ??\cf0       \cf4  Source\cf1 ="\{\cf3 Binding\cf4  Image\cf1 \}"\cf4  Stretch\cf1 ="Fill"\par ??\cf0        \cf4  HorizontalAlignment\cf1 ="Center"\cf4  VerticalAlignment\cf1 ="Center"&gt;\par ??\cf3     \cf1 &lt;\cf3 Interactivity\cf1 :\cf3 Interaction.Triggers\cf1 &gt;\par ??\cf3         \cf1 &lt;\cf3 julmar\cf1 :\cf3 DoubleClickTrigger\cf1 &gt;\par ??\cf3             \cf1 &lt;\cf3 julmar\cf1 :\cf3 InvokeCommand\cf4  Command\cf1 ="\{\cf3 Binding\cf4  ShowPropertiesCommand\cf1 \}" /&gt;\par ??\cf3         \cf1 &lt;/\cf3 julmar\cf1 :\cf3 DoubleClickTrigger\cf1 &gt;\par ??\cf3     \cf1 &lt;/\cf3 Interactivity\cf1 :\cf3 Interaction.Triggers\cf1 &gt;\par ??&lt;/\cf3 Image\cf1 &gt;\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Image</span>
            <span style="color: red"> x</span>
            <span style="color: blue">:</span>
            <span style="color: red">Name</span>
            <span style="color: blue">="imageHolder"</span>
            <span style="color: red"> Width</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> Width</span>
            <span style="color: blue">}"</span>
            <span style="color: red"> Height</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> Height</span>
            <span style="color: blue">}"</span>
          </p>
          <p style="margin: 0px">
      <span style="color: red">Source</span><span style="color: blue">="{</span><span style="color: #a31515">Binding</span><span style="color: red"> Image</span><span style="color: blue">}"</span><span style="color: red"> Stretch</span><span style="color: blue">="Fill"</span></p>
          <p style="margin: 0px">
       <span style="color: red">HorizontalAlignment</span><span style="color: blue">="Center"</span><span style="color: red"> VerticalAlignment</span><span style="color: blue">="Center"&gt;</span></p>
          <p style="margin: 0px">
            <strong>
              <span style="color: #a31515">    </span>
              <span style="color: blue">&lt;</span>
              <span style="color: #a31515">Interactivity</span>
              <span style="color: blue">:</span>
              <span style="color: #a31515">Interaction.Triggers</span>
              <span style="color: blue">&gt;</span>
            </strong>
          </p>
          <p style="margin: 0px">
            <strong>
              <span style="color: #a31515">        </span>
              <span style="color: blue">&lt;</span>
              <span style="color: #a31515">julmar</span>
              <span style="color: blue">:</span>
              <span style="color: #a31515">DoubleClickTrigger</span>
              <span style="color: blue">&gt;</span>
            </strong>
          </p>
          <p style="margin: 0px">
            <strong>
              <span style="color: #a31515">            </span>
              <span style="color: blue">&lt;</span>
              <span style="color: #a31515">julmar</span>
              <span style="color: blue">:</span>
              <span style="color: #a31515">InvokeCommand</span>
              <span style="color: red"> Command</span>
              <span style="color: blue">="{</span>
              <span style="color: #a31515">Binding</span>
              <span style="color: red"> ShowPropertiesCommand</span>
              <span style="color: blue">}"
/&gt;</span>
            </strong>
          </p>
          <p style="margin: 0px">
            <strong>
              <span style="color: #a31515">        </span>
              <span style="color: blue">&lt;/</span>
              <span style="color: #a31515">julmar</span>
              <span style="color: blue">:</span>
              <span style="color: #a31515">DoubleClickTrigger</span>
              <span style="color: blue">&gt;</span>
            </strong>
          </p>
          <p style="margin: 0px">
            <strong>
              <span style="color: #a31515">    </span>
              <span style="color: blue">&lt;/</span>
              <span style="color: #a31515">Interactivity</span>
              <span style="color: blue">:</span>
              <span style="color: #a31515">Interaction.Triggers</span>
              <span style="color: blue">&gt;</span>
            </strong>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">Image</span>
            <span style="color: blue">&gt;</span>
          </p>
        </div>
        <p>
          <br />
Note the use of the Interaction.Triggers tag – this is also part of the Blend behavior
implementation.  In this case, we are <em>triggering</em> off something (property
change, event, etc.) and then performance some <em>action</em>.  In the <strong>JulMar.Wpf.Behaviors </strong>assembly
you will find a whole bunch of triggers, behaviors and actions.  In this case,
I am using the <strong>DoubleClickTrigger</strong> which monitors for a quick double
tap of the left mouse button.  When that happens, it runs the list of actions
associated with it – in this case, it invokes the ShowPropertiesCommand.  Now,
here we are defining the trigger behavior on the UI that is bound to an actual <strong>PictureViewModel </strong>(note
the property bindings on the image and you will see that I’m telling you the truth!)
So here the command being invoked is the PictureViewModel command – so no parameter
is necessary.
</p>
        <h4>Drag/Position Behavior
</h4>
        <p>
The last thing I want to point out is the dragging behavior.  This is also done
through a Blend behavior, but it is being applied in a slightly different way: through
a Style.  
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;}??\fs28 \cf1 &lt;\cf3 ListBox.ItemContainerStyle\cf1 &gt;\par ??\cf3     \cf1 &lt;\cf3 Style\cf4  TargetType\cf1 ="ListBoxItem"&gt;\par ??\cf3         \cf1 &lt;\cf3 Setter\cf4  Property\cf1 ="julmar:DragPositionBehavior.IsEnabled"\cf4  Value\cf1 ="True" /&gt;\par ??\cf3         \cf1 &lt;\cf3 Setter\cf4  Property\cf1 ="Canvas.Left"\cf4  Value\cf1 ="\{\cf3 Binding\cf4  X\cf1 ,\cf4  Mode\cf1 =TwoWay\}" /&gt;\par ??\cf3         \cf1 &lt;\cf3 Setter\cf4  Property\cf1 ="Canvas.Top"\cf4  Value\cf1 ="\{\cf3 Binding\cf4  Y\cf1 ,\cf4  Mode\cf1 =TwoWay\}" /&gt;\par ??\cf3         \cf1 &lt;\cf3 Setter\cf4  Property\cf1 ="IsSelected"\cf4  Value\cf1 ="\{\cf3 Binding\cf4  IsSelected\cf1 ,\cf4  Mode\cf1 =TwoWay\}" /&gt;\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">ListBox.ItemContainerStyle</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">    </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Style</span>
            <span style="color: red"> TargetType</span>
            <span style="color: blue">="ListBoxItem"&gt;</span>
          </p>
          <p style="margin: 0px">
            <strong>
              <span style="color: #a31515">        </span>
              <span style="color: blue">&lt;</span>
              <span style="color: #a31515">Setter</span>
              <span style="color: red"> Property</span>
              <span style="color: blue">="julmar:DragPositionBehavior.IsEnabled"</span>
              <span style="color: red"> Value</span>
              <span style="color: blue">="True"
/&gt;</span>
            </strong>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Setter</span>
            <span style="color: red"> Property</span>
            <span style="color: blue">="Canvas.Left"</span>
            <span style="color: red"> Value</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> X</span>
            <span style="color: blue">,</span>
            <span style="color: red"> Mode</span>
            <span style="color: blue">=TwoWay}"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Setter</span>
            <span style="color: red"> Property</span>
            <span style="color: blue">="Canvas.Top"</span>
            <span style="color: red"> Value</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> Y</span>
            <span style="color: blue">,</span>
            <span style="color: red"> Mode</span>
            <span style="color: blue">=TwoWay}"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Setter</span>
            <span style="color: red"> Property</span>
            <span style="color: blue">="IsSelected"</span>
            <span style="color: red"> Value</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> IsSelected</span>
            <span style="color: blue">,</span>
            <span style="color: red"> Mode</span>
            <span style="color: blue">=TwoWay}"
/&gt;</span>
          </p>
        </div>
        <p>
...
</p>
        <p>
Now, for those who have used Blend behaviors a lot, you may now that it is currently
not possible to apply behaviors through Styles.  This is a restriction of the
Attached Property definition being used – the collection cannot be associated on a
style.  This is a very unfortunate problem because it makes my scenario very
hard: I want to drag and reposition these items around through the mouse.  If
I put the behavior onto the DataTemplate then I move the <em>content</em> but not
the item container itself (the thing that provides selection and focus rendering) 
So I would end up with a very weird visualization where you click on an item and the
focus rectangle is drawn in a completely different place than the item itself!
</p>
        <p>
So, in my set of behaviors, many of them allow you to setup the behavior <em>both
through Blend</em> and through Style setters (or directly on an element without the
full Blend syntax).  I do this by adding an attached property onto the behavior
class and then injecting my behavior into the element where the attached property
is set.  I’ll show this in a future blog post to give an example for those who’d
like to do the same for their own behaviors.
</p>
        <p>
Another question I’ve fielded is why did I even create this behavior at all when the
Blend sample already exists to do this?  Well, the short answer is because I
had a specific goal in mind here – this behavior knows about Canvas panels. 
If the behavior is attached to an element in a Canvas, it changes the position by
changing the <strong>Canvas.Left </strong>and <strong>Canvas.Top </strong>properties. 
If not, it uses a <strong>RenderTransform</strong>.  The supplied blend sample
only uses RenderTransform<strong></strong>(at least when I last looked at it).
</p>
        <p>
That about covers it, if you have any questions or comments, then contact me!
</p>
      </body>
      <title>MVVM: IUIVisualizer and event management with behaviors</title>
      <guid isPermaLink="false">http://www.julmar.com/blog/mark/PermaLink,guid,3d40b8c3-fab0-4e64-90a8-59a3582a2e31.aspx</guid>
      <link>http://www.julmar.com/blog/mark/2010/02/05/MVVMIUIVisualizerAndEventManagementWithBehaviors.aspx</link>
      <pubDate>Fri, 05 Feb 2010 22:43:16 GMT</pubDate>
      <description>&lt;p&gt;
In this post, we will look at the &lt;strong&gt;IUIVisualizer&lt;/strong&gt;, and bring together
some of the concepts we’ve talked about already through a new sample – a simple picture
viewer:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_thumb.png" width="520" height="393"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The application grabs all the images from the user’s photo folder and then displays
each one onto the surface of a corkboard.&amp;nbsp; You can change the properties of an
image, remove an image or add additional images.&amp;nbsp; It’s not designed to be a true
image application ala photoSuru, it’s really more of a sample of MVVM practices with
the helper library.&amp;nbsp; Here’s some of the coding examples present in the sample:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
It registers a &lt;strong&gt;ISelectFile&lt;/strong&gt; service and implements it as an OpenFileDialog. 
&lt;li&gt;
It displays a “Picture Properties” dialog using the &lt;strong&gt;IUIVisualizer&lt;/strong&gt; service. 
&lt;li&gt;
It maps mouse DoubleClick on an image into a command in the ViewModel to display the
properties. 
&lt;li&gt;
It provides drag support through a behavior on the style.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Let’s look at this four features in particular.&amp;nbsp; Download the sample from here:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.julmar.com/samples/PictureViewer.zip" target="_blank"&gt;PictureViewer&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Open the project in Visual Studio 2008 SP1, it should build and run without any issues.&amp;nbsp;
The project structure is pretty much like all the other samples I’ve blogged about
– I’m trying to keep to a consistent model:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_thumb_1.png" width="283" height="595"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h4&gt;Service Registration
&lt;/h4&gt;
&lt;p&gt;
If you look at the &lt;strong&gt;App.xaml.cs&lt;/strong&gt; code behind, you’ll find the registration
work being done in the constructor:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red0\green128\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs28 \cf1 public\cf0  App()\par ??\{\par ??    \cf4 // Register the typical services (UI, Error, etc.) for this application.\par ??\cf0     \cf5 ViewModel\cf0 .RegisterKnownServiceTypes();\par ??\par ??    \cf4 // Register the file selector service.\par ??\cf0     \cf5 ViewModel\cf0 .ServiceProvider.Add(\cf1 typeof\cf0 (\cf5 ISelectFile\cf0 ), \cf1 new\cf0  \cf5 OpenFileDialogSelector\cf0 ());\par ??\par ??    \cf4 // Register the UI dialogs.\par ??\cf0     \cf1 var\cf0  uiVisualizer = \cf5 ViewModel\cf0 .ServiceProvider.Resolve&amp;lt;\cf5 IUIVisualizer\cf0 &amp;gt;();\par ??        uiVisualizer.Register(\cf6 "ShowElementProperties"\cf0 , \cf1 typeof\cf0 (\cf5 PropertyWindow\cf0 ));\par ??\}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;public&lt;/span&gt; App()
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// Register the typical services (UI,
Error, etc.) for this application.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;ViewModel&lt;/span&gt;.RegisterKnownServiceTypes();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// Register the file selector service.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;ViewModel&lt;/span&gt;.ServiceProvider.Add(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;ISelectFile&lt;/span&gt;), &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;OpenFileDialogSelector&lt;/span&gt;());
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// Register the UI dialogs.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;var&lt;/span&gt; uiVisualizer = &lt;span style="color: #2b91af"&gt;ViewModel&lt;/span&gt;.ServiceProvider.Resolve&amp;lt;&lt;span style="color: #2b91af"&gt;IUIVisualizer&lt;/span&gt;&amp;gt;();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uiVisualizer.Register(&lt;span style="color: #a31515"&gt;"ShowElementProperties"&lt;/span&gt;, &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;PropertyWindow&lt;/span&gt;));
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
First, note that it registers the standard services – that’s something I always do,
even if I don’t anticipate needing them all, it doesn’t hurt to have them there. Next,
it adds the file selector service by calling &lt;strong&gt;ServiceProvider.Add &lt;/strong&gt;on
the &lt;strong&gt;ViewModel &lt;/strong&gt;class.&amp;nbsp; The interface is defined as a single method:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red43\green145\blue175;}??\fs28 \cf1 namespace\cf0  PictureViewer.Interfaces\par ??\{\par ??    \cf1 public\cf0  \cf1 interface\cf0  \cf4 ISelectFile\par ??\cf0     \{\par ??        \cf1 string\cf0  SelectFile(\cf1 string\cf0  fileFilters);\par ??    \}\par ??\}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;namespace&lt;/span&gt; PictureViewer.Interfaces
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;interface&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ISelectFile&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;string&lt;/span&gt; SelectFile(&lt;span style="color: blue"&gt;string&lt;/span&gt; fileFilters);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
The registration ties this interface to an implementation that displays the &lt;strong&gt;OpenFileDialog&lt;/strong&gt;,
for testing purposes, that would be replaced with a minimum of two implementations:
one that returns null/empty and one that returns a valid filename to test both cases.
&lt;/p&gt;
&lt;p&gt;
The final line in the &lt;strong&gt;app.xaml.cs &lt;/strong&gt;file registers a UI dialog to display
the properties of the image.&amp;nbsp; This is done through the &lt;strong&gt;IUIVisualizer &lt;/strong&gt;interface
which is defined in the helper library:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red43\green145\blue175;}??\fs28 \cf1 namespace\cf0  JulMar.Windows.Interfaces\par ??\{\par ??    \cf1 public\cf0  \cf1 interface\cf0  \cf4 IUIVisualizer\par ??\cf0     \{\par ??        \cf1 void\cf0  Register(\cf1 string\cf0  key, \cf4 Type\cf0  winType);\par ??        \cf1 bool\cf0  Unregister(\cf1 string\cf0  key);\par ??        \cf1 bool\cf0  Show(\cf1 string\cf0  key, \cf1 object\cf0  state, \cf1 bool\cf0  setOwner, \cf4 EventHandler\cf0 &amp;lt;UICompletedEventArgs&amp;gt; completedProc);\par ??        \cf1 bool\cf0 ? ShowDialog(\cf1 string\cf0  key, \cf1 object\cf0  state);\par ??    \}\par ??\}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;namespace&lt;/span&gt; JulMar.Windows.Interfaces
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;interface&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IUIVisualizer&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;void&lt;/span&gt; Register(&lt;span style="color: blue"&gt;string&lt;/span&gt; key, &lt;span style="color: #2b91af"&gt;Type&lt;/span&gt; winType);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;bool&lt;/span&gt; Unregister(&lt;span style="color: blue"&gt;string&lt;/span&gt; key);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;bool&lt;/span&gt; Show(&lt;span style="color: blue"&gt;string&lt;/span&gt; key, &lt;span style="color: blue"&gt;object&lt;/span&gt; state, &lt;span style="color: blue"&gt;bool&lt;/span&gt; setOwner,
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&amp;lt;UICompletedEventArgs&amp;gt;
completedProc);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;bool&lt;/span&gt;?
ShowDialog(&lt;span style="color: blue"&gt;string&lt;/span&gt; key, &lt;span style="color: blue"&gt;object&lt;/span&gt; state);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Notice the &lt;strong&gt;Register&lt;/strong&gt; and &lt;strong&gt;Unregister &lt;/strong&gt;methods take
a string defined as a “key”.&amp;nbsp; This is the key that invokers will use to display
the UI visually; I often use the typename of the View, but you can use any string
here as long as you are consistent in registration vs. invocation.&amp;nbsp; In this sample,
I’ve used the key &lt;strong&gt;“ShowElementProperties”&lt;/strong&gt; – we’ll see in a moment
how it is displayed.&amp;nbsp; The second parameter for the Register method takes the
Type to display.&amp;nbsp; The type must be a WPF Window-derived type (i.e. &lt;strong&gt;NavigationWindow &lt;/strong&gt;or &lt;strong&gt;Window&lt;/strong&gt;)
and will represent the View in our MVVM pattern.
&lt;/p&gt;
&lt;h4&gt;Displaying a UI with IUIVisualizer
&lt;/h4&gt;
&lt;p&gt;
In the &lt;strong&gt;PictureViewModel&lt;/strong&gt; type, there is an &lt;strong&gt;ICommand &lt;/strong&gt;that
is used to drive the Property window:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;}??\fs28 \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  Command to show the image properties.\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf4 public\cf0  \cf6 ICommand\cf0  ShowPropertiesCommand \{ \cf4 get\cf0 ; \cf4 private\cf0  \cf4 set\cf0 ; \}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Command to show the
image properties.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ICommand&lt;/span&gt; ShowPropertiesCommand
{ &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;set&lt;/span&gt;;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
The default constructor fills that in with a &lt;strong&gt;DelegatingCommand &lt;/strong&gt;to
jump to a method of the ViewModel:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red43\green145\blue175;}??\fs28 \cf1 public\cf0  PictureViewModel()\par ??\{\par ??    _picture = \cf1 new\cf0  \cf4 PictureInfo\cf0 ();\par ??    ShowPropertiesCommand = \cf1 new\cf0  \cf4 DelegatingCommand\cf0 (ShowProperties);\par ??    SelectNewImageFile = \cf1 new\cf0  \cf4 DelegatingCommand\cf0 (OnSelectNewFile);\par ??    RemovePicture = \cf1 new\cf0  \cf4 DelegatingCommand\cf0 (() =&amp;gt; SendMessage(\cf4 MainViewModel\cf0 .RemovePictureMessage, \cf1 this\cf0 ));\par ??\}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;public&lt;/span&gt; PictureViewModel()
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; _picture = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PictureInfo&lt;/span&gt;();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ShowPropertiesCommand = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DelegatingCommand&lt;/span&gt;(ShowProperties);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectNewImageFile = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DelegatingCommand&lt;/span&gt;(OnSelectNewFile);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; RemovePicture = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DelegatingCommand&lt;/span&gt;(
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
() =&amp;gt; SendMessage(&lt;span style="color: #2b91af"&gt;MainViewModel&lt;/span&gt;.RemovePictureMessage, &lt;span style="color: blue"&gt;this&lt;/span&gt;));
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs28 \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  Display the UI associated with this picture\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf4 internal\cf0  \cf4 void\cf0  ShowProperties()\par ??\{\par ??    \cf4 var\cf0  uiVisualizer = Resolve&amp;lt;\cf6 IUIVisualizer\cf0 &amp;gt;();\par ??    \cf4 if\cf0  (uiVisualizer != \cf4 null\cf0 )\par ??    \{\par ??        uiVisualizer.ShowDialog(\cf7 "ShowElementProperties"\cf0 , \cf4 this\cf0 );\par ??    \}\par ??\}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Display the UI associated
with this picture&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;internal&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ShowProperties()
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;var&lt;/span&gt; uiVisualizer = Resolve&amp;lt;&lt;span style="color: #2b91af"&gt;IUIVisualizer&lt;/span&gt;&amp;gt;();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (uiVisualizer != &lt;span style="color: blue"&gt;null&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uiVisualizer.ShowDialog(&lt;span style="color: #a31515"&gt;"ShowElementProperties"&lt;/span&gt;, &lt;span style="color: blue"&gt;this&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
The handler method is marked as &lt;strong&gt;internal&lt;/strong&gt; because the &lt;strong&gt;MainViewModel &lt;/strong&gt;forwards
it’s own command to this same method handler (from the menu and toolbar).&amp;nbsp; Notice
that the method first gets the &lt;strong&gt;IUIVisualizer&lt;/strong&gt; service; you must use
the same service instance where you registered the UI view.&amp;nbsp; Next, it calls &lt;strong&gt;ShowDialog&lt;/strong&gt; to
display a modal view.&amp;nbsp; It takes two parameters – the view key, and the view model.
&lt;/p&gt;
&lt;p&gt;
A &lt;em&gt;modal view &lt;/em&gt;is one that forces the user to interact and dismiss the dialog
before they can continue working with the other elements in the application.&amp;nbsp;
It is what, as an example, applications often use for Options dialogs.&amp;nbsp; &lt;strong&gt;ShowDialog&lt;/strong&gt; will
display the View associated with the given string key (&lt;strong&gt;“ShowElementProperties”&lt;/strong&gt;).&amp;nbsp;
The second parameter is the ViewModel you want to associate to it – in this case we
are passing the associated picture we want to work with.&amp;nbsp; The dialog is then
displayed and allows the user to edit the picture properties:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_thumb_2.png" width="244" height="228"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The XAML code for this view is contained in the PropertyWindow.xaml file – it has
a couple of interesting elements to it which you will see when you interact with this
dialog:
&lt;/p&gt;
&lt;p&gt;
1. &lt;strong&gt;Watermarked Text display&lt;/strong&gt;: if you remove the title, it will display
some grayed out text in it’s place “Enter the Title Here”:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_thumb_3.png" width="244" height="228"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
2. &lt;strong&gt;Numeric TextBox&lt;/strong&gt;:&amp;nbsp; if you move your mouse cursor over the
X/Y/Width/Height boxes you will see a sizing arrow that allows you to drag and change
the values without typing.&amp;nbsp; You can also double-click to change the values and
it enforces numeric text box behavior.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIUIVisualizerandeventmanagementwithb_DE92/image_thumb_4.png" width="244" height="228"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Both of these are accomplished with Blend Behaviors. There are plenty of resources
on the web about these so I won’t go into detail on their creation – check the library
source code if you want to see how they work, but using them involves taking a dependency
on two assemblies:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;System.Windows.Interactivity.dll&lt;/strong&gt; 
&lt;li&gt;
&lt;strong&gt;JulMar.Wpf.Behaviors.dll&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Both of these are included in the Dependencies folder.&amp;nbsp; The first comes from
the Blend SDK and is freely redistributable with your project.&amp;nbsp; To use them,
you add the behavior to the visual element in question, for example, the watermarked
textbox behavior gets applied like this:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;}??\fs28 \cf1 &amp;lt;\cf3 TextBox\cf4  Text\cf1 ="\{\cf3 Binding\cf4  Title\cf1 \}"&amp;gt;\par ??\cf3 \tab \cf1 &amp;lt;\cf3 Interactivity\cf1 :\cf3 Interaction.Behaviors\cf1 &amp;gt;\par ??\cf3 \tab \tab \cf1 &amp;lt;\cf3 julmar\cf1 :\cf3 WatermarkTextBoxBehavior\cf4  Text\cf1 ="Enter the Title Here"/&amp;gt;\par ??\cf3 \tab \cf1 &amp;lt;/\cf3 Interactivity\cf1 :\cf3 Interaction.Behaviors\cf1 &amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 TextBox.Style\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 Style\cf4  TargetType\cf1 ="TextBox"\cf4  BasedOn\cf1 ="\{\cf3 StaticResource\cf1  \{\cf3 x\cf1 :\cf3 Type\cf4  TextBox\cf1 \}\}"&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="FontStyle"\cf4  Value\cf1 ="Normal" /&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 Style.Triggers\cf1 &amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 Trigger\cf4  Property\cf1 ="julmar:WatermarkTextBoxBehavior.IsWatermarked"\cf4  Value\cf1 ="True"&amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="FontStyle"\cf4  Value\cf1 ="Italic" /&amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="Foreground"\cf4  Value\cf1 ="LightGray" /&amp;gt;\par ??\cf3                 \cf1 &amp;lt;/\cf3 Trigger\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;/\cf3 Style.Triggers\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 Style\cf1 &amp;gt;\par ??\cf3     \cf1 &amp;lt;/\cf3 TextBox.Style\cf1 &amp;gt;\par ??&amp;lt;/\cf3 TextBox\cf1 &amp;gt;\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: red"&gt; Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Title&lt;/span&gt;&lt;span style="color: blue"&gt;}"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;strong&gt;&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interactivity&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interaction.Behaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;strong&gt;&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;WatermarkTextBoxBehavior&lt;/span&gt;&lt;span style="color: red"&gt; Text&lt;/span&gt;&lt;span style="color: blue"&gt;="Enter
the Title Here"/&amp;gt;&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;strong&gt;&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interactivity&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interaction.Behaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Style&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Style&lt;/span&gt;&lt;span style="color: red"&gt; TargetType&lt;/span&gt;&lt;span style="color: blue"&gt;="TextBox"&lt;/span&gt;&lt;span style="color: red"&gt; BasedOn&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color: blue"&gt; {&lt;/span&gt;&lt;span style="color: #a31515"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Type&lt;/span&gt;&lt;span style="color: red"&gt; TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;}}"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="color: red"&gt; Property&lt;/span&gt;&lt;span style="color: blue"&gt;="FontStyle"&lt;/span&gt;&lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="Normal"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Style.Triggers&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Trigger&lt;/span&gt;&lt;span style="color: red"&gt; Property&lt;/span&gt;&lt;span style="color: blue"&gt;="julmar:WatermarkTextBoxBehavior.IsWatermarked"&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;Value&lt;/span&gt;&lt;span style="color: blue"&gt;="True"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="color: red"&gt; Property&lt;/span&gt;&lt;span style="color: blue"&gt;="FontStyle"&lt;/span&gt;&lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="Italic"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="color: red"&gt; Property&lt;/span&gt;&lt;span style="color: blue"&gt;="Foreground"&lt;/span&gt;&lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="LightGray"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Trigger&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Style.Triggers&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Style&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Style&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
I’ve also applied a Trigger to change the font/colors when the TextBox is watermarked.
&lt;/p&gt;
&lt;p&gt;
The numeric behavior looks like this:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;}??\fs28 \cf1 &amp;lt;\cf3 TextBox\cf4  Grid.Row\cf1 ="5"\cf4  Text\cf1 ="\{\cf3 Binding\cf4  Width\cf1 ,\cf4  UpdateSourceTrigger\cf1 =PropertyChanged\}"&amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 Interactivity\cf1 :\cf3 Interaction.Behaviors\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 julmar\cf1 :\cf3 NumericTextBoxBehavior\cf4  AllowMouseDrag\cf1 ="True" /&amp;gt;\par ??\cf3     \cf1 &amp;lt;/\cf3 Interactivity\cf1 :\cf3 Interaction.Behaviors\cf1 &amp;gt;\par ??&amp;lt;/\cf3 TextBox\cf1 &amp;gt;\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="color: blue"&gt;="5"&lt;/span&gt;&lt;span style="color: red"&gt; Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Width&lt;/span&gt;&lt;span style="color: blue"&gt;,&lt;/span&gt;&lt;span style="color: red"&gt; UpdateSourceTrigger&lt;/span&gt;&lt;span style="color: blue"&gt;=PropertyChanged}"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interactivity&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interaction.Behaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;NumericTextBoxBehavior&lt;/span&gt;&lt;span style="color: red"&gt; AllowMouseDrag&lt;/span&gt;&lt;span style="color: blue"&gt;="True"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interactivity&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interaction.Behaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Notice that I’ve changed the &lt;strong&gt;Binding.UpdateSourceTrigger &lt;/strong&gt;to be &lt;strong&gt;PropertyChanged&lt;/strong&gt; –
this is so the dragging effect works properly and updates the value in the underlying
view model.
&lt;/p&gt;
&lt;h4&gt;Ways to invoke commands in the view
&lt;/h4&gt;
&lt;p&gt;
So let’s look now at how we get the command executed.&amp;nbsp; Switching to the &lt;strong&gt;MainWindow.xaml &lt;/strong&gt;you
will find three places where the Show Properties command is wired up.
&lt;/p&gt;
&lt;p&gt;
First, it can be invoked using a keyboard accelerator. This requires using a &lt;strong&gt;BindableCommand &lt;/strong&gt;from
the library, placing it into resources and then binding against that.&amp;nbsp; The command
we will be executing is the one on the &lt;strong&gt;MainViewModel &lt;/strong&gt;so it requires
the actual picture element as a parameter:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green0\blue0;}??\fs28 \cf1 &amp;lt;\cf3 Window.Resources\cf1 &amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 julmar\cf1 :\cf3 BindableCommand\cf4  x\cf1 :\cf4 Key\cf1 ="propsCommand"\cf4  Command\cf1 ="\{\cf3 Binding\cf4  ShowPropertiesCommand\cf1 \}"\cf0  \par ??                           \cf4  CommandParameter\cf1 ="\{\cf3 Binding\cf4  SelectedPicture\cf1 \}" /&amp;gt;\par ??&amp;lt;/\cf3 Window.Resources\cf1 &amp;gt;\par ??\par ??&amp;lt;\cf3 Window.InputBindings\cf1 &amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 KeyBinding\cf4  Key\cf1 ="r"\cf4  Modifiers\cf1 ="Ctrl+Alt"\cf4  Command\cf1 ="\{\cf3 StaticResource\cf4  propsCommand\cf1 \}" /&amp;gt;\par ??&amp;lt;/\cf3 Window.InputBindings\cf1 &amp;gt;\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Window.Resources&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;BindableCommand&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;="propsCommand"&lt;/span&gt;&lt;span style="color: red"&gt; Command&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; ShowPropertiesCommand&lt;/span&gt;&lt;span style="color: blue"&gt;}"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red"&gt;CommandParameter&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; SelectedPicture&lt;/span&gt;&lt;span style="color: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Window.Resources&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Window.InputBindings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;KeyBinding&lt;/span&gt;&lt;span style="color: red"&gt; Key&lt;/span&gt;&lt;span style="color: blue"&gt;="r"&lt;/span&gt;&lt;span style="color: red"&gt; Modifiers&lt;/span&gt;&lt;span style="color: blue"&gt;="Ctrl+Alt"&lt;/span&gt;&lt;span style="color: red"&gt; Command&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color: red"&gt; propsCommand&lt;/span&gt;&lt;span style="color: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Window.InputBindings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
The MainViewModel simply forwards this command onto the PictureViewModel using a typed &lt;strong&gt;DelegatingCommand&lt;/strong&gt;:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;}??\fs28 ShowPropertiesCommand = \cf3 new\cf0  \cf4 DelegatingCommand\cf0 &amp;lt;\cf4 PictureViewModel\cf0 &amp;gt;(p =&amp;gt; p.ShowProperties(), p =&amp;gt; p != \cf3 null\cf0 );\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
ShowPropertiesCommand = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DelegatingCommand&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;PictureViewModel&lt;/span&gt;&amp;gt;(
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
p =&amp;gt; p.ShowProperties(), p =&amp;gt; p != &lt;span style="color: blue"&gt;null&lt;/span&gt;);
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Next, we can invoke the command using the menu and toolbar:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red163\green21\blue21;\red255\green255\blue255;\red0\green0\blue255;\red255\green0\blue0;\red0\green0\blue0;}??\fs28 \cf1     \cf3 &amp;lt;\cf1 MenuItem\cf4  Header\cf3 ="_Edit"&amp;gt;\par ??\cf1         \cf3 &amp;lt;\cf1 MenuItem\cf4  Header\cf3 ="Add _New Picture"\cf4  Command\cf3 ="\{\cf1 Binding\cf4  AddNewCommand\cf3 \}" /&amp;gt;\par ??\cf1         \cf3 &amp;lt;\cf1 MenuItem\cf4  Header\cf3 ="_Remove Picture"\cf4  Command\cf3 ="\{\cf1 Binding\cf4  RemoveCommand\cf3 \}"\cf4  CommandParameter\cf3 ="\{\cf1 Binding\cf4  SelectedPicture\cf3 \}" /&amp;gt;\par ??\cf1         \cf3 &amp;lt;\cf1 Separator\cf3  /&amp;gt;\par ??\cf1         \cf3 &amp;lt;\cf1 MenuItem\cf4  Header\cf3 ="P_roperties"\cf4  Command\cf3 ="\{\cf1 Binding\cf4  ShowPropertiesCommand\cf3 \}"\cf4  CommandParameter\cf3 ="\{\cf1 Binding\cf4  SelectedPicture\cf3 \}" /&amp;gt;\par ??\cf1     \cf3 &amp;lt;/\cf1 MenuItem\cf3 &amp;gt;\par ??\cf1         \cf3 &amp;lt;/\cf1 Menu\cf3 &amp;gt;\par ??\cf1         \par ??    \cf3 &amp;lt;\cf1 ToolBar\cf4  DockPanel.Dock\cf3 ="Top"&amp;gt;\par ??\cf1         \cf3 &amp;lt;\cf1 Button\cf4  ToolTip\cf3 ="Add New Picture"\cf4  Command\cf3 ="\{\cf1 Binding\cf4  AddNewCommand\cf3 \}"\cf4  Content\cf3 ="+"\cf4  FontWeight\cf3 ="Bold" /&amp;gt;\par ??\cf1         \cf3 &amp;lt;\cf1 Button\cf4  ToolTip\cf3 ="Remove Picture"\cf4  Command\cf3 ="\{\cf1 Binding\cf4  RemoveCommand\cf3 \}"\cf4  CommandParameter\cf3 ="\{\cf1 Binding\cf4  SelectedPicture\cf3 \}"\cf4  Content\cf3 ="-"\cf4  FontWeight\cf3 ="Bold" /&amp;gt;\par ??\cf1         \cf3 &amp;lt;\cf1 Button\cf4  ToolTip\cf3 ="Properties"\cf4  Command\cf3 ="\{\cf1 Binding\cf4  ShowPropertiesCommand\cf3 \}"\cf4  CommandParameter\cf3 ="\{\cf1 Binding\cf4  SelectedPicture\cf3 \}"&amp;gt;\par ??\cf1             \cf3 &amp;lt;\cf1 Path\cf4  Width\cf3 ="16"\cf4  Height\cf3 ="16"\cf4  Fill\cf3 ="\{\cf1 julmar\cf3 :\cf1 LinearGradientBrush\cf4  LightGreen\cf3 ,\cf4  DarkGreen\cf3 ,\cf0  90\cf3 \}"\cf4  Stroke\cf3 ="DarkGreen"\par ??\cf0                  \cf4  Data\cf3 ="M1,1 L15,7.5 L1,15 Z" /&amp;gt;\par ??\cf1         \cf3 &amp;lt;/\cf1 Button\cf3 &amp;gt;\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;MenuItem&lt;/span&gt;&lt;span style="color: red"&gt; Header&lt;/span&gt;&lt;span style="color: blue"&gt;="_Edit"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;MenuItem&lt;/span&gt;&lt;span style="color: red"&gt; Header&lt;/span&gt;&lt;span style="color: blue"&gt;="Add
_New Picture"&lt;/span&gt;&lt;span style="color: red"&gt; Command&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; AddNewCommand&lt;/span&gt;&lt;span style="color: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;MenuItem&lt;/span&gt;&lt;span style="color: red"&gt; Header&lt;/span&gt;&lt;span style="color: blue"&gt;="_Remove
Picture"&lt;/span&gt;&lt;span style="color: red"&gt; Command&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; RemoveCommand&lt;/span&gt;&lt;span style="color: blue"&gt;}"&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
CommandParameter&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; SelectedPicture&lt;/span&gt;&lt;span style="color: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Separator&lt;/span&gt;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;MenuItem&lt;/span&gt;&lt;span style="color: red"&gt; Header&lt;/span&gt;&lt;span style="color: blue"&gt;="P_roperties"&lt;/span&gt;&lt;span style="color: red"&gt; Command&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; ShowPropertiesCommand&lt;/span&gt;&lt;span style="color: blue"&gt;}"&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
CommandParameter&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; SelectedPicture&lt;/span&gt;&lt;span style="color: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;MenuItem&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp; ...
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ToolBar&lt;/span&gt;&lt;span style="color: red"&gt; DockPanel.Dock&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button&lt;/span&gt;&lt;span style="color: red"&gt; ToolTip&lt;/span&gt;&lt;span style="color: blue"&gt;="Add
New Picture"&lt;/span&gt;&lt;span style="color: red"&gt; Command&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; AddNewCommand&lt;/span&gt;&lt;span style="color: blue"&gt;}"&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Content&lt;/span&gt;&lt;span style="color: blue"&gt;="+"&lt;/span&gt;&lt;span style="color: red"&gt; FontWeight&lt;/span&gt;&lt;span style="color: blue"&gt;="Bold"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button&lt;/span&gt;&lt;span style="color: red"&gt; ToolTip&lt;/span&gt;&lt;span style="color: blue"&gt;="Remove
Picture"&lt;/span&gt;&lt;span style="color: red"&gt; Command&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; RemoveCommand&lt;/span&gt;&lt;span style="color: blue"&gt;}"&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
CommandParameter&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; SelectedPicture&lt;/span&gt;&lt;span style="color: blue"&gt;}"&lt;/span&gt;&lt;span style="color: red"&gt; Content&lt;/span&gt;&lt;span style="color: blue"&gt;="-"&lt;/span&gt;&lt;span style="color: red"&gt; FontWeight&lt;/span&gt;&lt;span style="color: blue"&gt;="Bold"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button&lt;/span&gt;&lt;span style="color: red"&gt; ToolTip&lt;/span&gt;&lt;span style="color: blue"&gt;="Properties"&lt;/span&gt;&lt;span style="color: red"&gt; Command&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; ShowPropertiesCommand&lt;/span&gt;&lt;span style="color: blue"&gt;}"&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
CommandParameter&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; SelectedPicture&lt;/span&gt;&lt;span style="color: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp; ...
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
Note that here we are also binding to the &lt;strong&gt;MainViewModel &lt;/strong&gt;command –
so we must supply the parameter using the &lt;strong&gt;CommandParameter&lt;/strong&gt;.&amp;nbsp;
The final invocation place is when you double-click on the picture itself.&amp;nbsp; This
is done a little differently if you’ve not done much WPF work.&amp;nbsp; 
&lt;/p&gt;
&lt;h4&gt;A quick segway – View code behind vs. View Models
&lt;/h4&gt;
&lt;p&gt;
First, the display of images is actually housed in a &lt;strong&gt;ListBox&lt;/strong&gt;.&amp;nbsp;
It turns out that anytime you need to display multiple things grouped somehow, and
allow the user to select one or more of those things, a ListBox is almost always the
way to go.&amp;nbsp; WPF allows us to customize the visuals however we like, so here the
panel has been replaced with a &lt;strong&gt;Canvas &lt;/strong&gt;(allowing pixel positioning),
and each item is drawn as a &lt;strong&gt;DataTemplate&lt;/strong&gt;.&amp;nbsp; The template decides
how to render each item in the ListBox – the PictureViewModel in this case.&amp;nbsp;
In the sample, it is rendering an image and an optional TextBlock that is turned on
and off through a property (and can be changed through the tool bar).&amp;nbsp; I encourage
you to look at the code to see how all that is done.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
One of the core things necessary in MVVM is the ability to interact with visuals and
then &lt;em&gt;sometimes&lt;/em&gt; push notifications of that interaction back to the view model.&amp;nbsp;
I say “sometimes” because it’s perfectly acceptable to place code into the code behind
for the XAML as well. Where you put the logic depends on whether it is view-specific
and whether you want to test it independently of the view.&amp;nbsp; If it’s not view
specific OR you want to test it, then move it into the view model.&amp;nbsp; An example
of something that we probably don’t care about is closing the application – I’ve wired
it up to a command here just to show that you can, but it’s completely unnecessary
to do that.&amp;nbsp; The view model isn’t doing any closing logic, so it would be fine
to wire a handler into the MainWindow.xaml.cs and just call “this.Close()” in there.
&lt;/p&gt;
&lt;p&gt;
Ok, so back to the double-click implementation.&amp;nbsp; In the &lt;strong&gt;DataTemplate&lt;/strong&gt; assigned
to the &lt;strong&gt;ListBox.ItemTemplate &lt;/strong&gt;property you will find the definition
for the image itself:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green0\blue0;}??\fs28 \cf1 &amp;lt;\cf3 Image\cf4  x\cf1 :\cf4 Name\cf1 ="imageHolder"\cf4  Width\cf1 ="\{\cf3 Binding\cf4  Width\cf1 \}"\cf4  Height\cf1 ="\{\cf3 Binding\cf4  Height\cf1 \}"\par ??\cf0       \cf4  Source\cf1 ="\{\cf3 Binding\cf4  Image\cf1 \}"\cf4  Stretch\cf1 ="Fill"\par ??\cf0        \cf4  HorizontalAlignment\cf1 ="Center"\cf4  VerticalAlignment\cf1 ="Center"&amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 Interactivity\cf1 :\cf3 Interaction.Triggers\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 julmar\cf1 :\cf3 DoubleClickTrigger\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 julmar\cf1 :\cf3 InvokeCommand\cf4  Command\cf1 ="\{\cf3 Binding\cf4  ShowPropertiesCommand\cf1 \}" /&amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 julmar\cf1 :\cf3 DoubleClickTrigger\cf1 &amp;gt;\par ??\cf3     \cf1 &amp;lt;/\cf3 Interactivity\cf1 :\cf3 Interaction.Triggers\cf1 &amp;gt;\par ??&amp;lt;/\cf3 Image\cf1 &amp;gt;\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Image&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="imageHolder"&lt;/span&gt;&lt;span style="color: red"&gt; Width&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Width&lt;/span&gt;&lt;span style="color: blue"&gt;}"&lt;/span&gt;&lt;span style="color: red"&gt; Height&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Height&lt;/span&gt;&lt;span style="color: blue"&gt;}"&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red"&gt;Source&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Image&lt;/span&gt;&lt;span style="color: blue"&gt;}"&lt;/span&gt;&lt;span style="color: red"&gt; Stretch&lt;/span&gt;&lt;span style="color: blue"&gt;="Fill"&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Center"&lt;/span&gt;&lt;span style="color: red"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Center"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;strong&gt;&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interactivity&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interaction.Triggers&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;strong&gt;&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;DoubleClickTrigger&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;strong&gt;&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;InvokeCommand&lt;/span&gt;&lt;span style="color: red"&gt; Command&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; ShowPropertiesCommand&lt;/span&gt;&lt;span style="color: blue"&gt;}"
/&amp;gt;&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;strong&gt;&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;DoubleClickTrigger&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;strong&gt;&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interactivity&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interaction.Triggers&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Image&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Note the use of the Interaction.Triggers tag – this is also part of the Blend behavior
implementation.&amp;nbsp; In this case, we are &lt;em&gt;triggering&lt;/em&gt; off something (property
change, event, etc.) and then performance some &lt;em&gt;action&lt;/em&gt;.&amp;nbsp; In the &lt;strong&gt;JulMar.Wpf.Behaviors &lt;/strong&gt;assembly
you will find a whole bunch of triggers, behaviors and actions.&amp;nbsp; In this case,
I am using the &lt;strong&gt;DoubleClickTrigger&lt;/strong&gt; which monitors for a quick double
tap of the left mouse button.&amp;nbsp; When that happens, it runs the list of actions
associated with it – in this case, it invokes the ShowPropertiesCommand.&amp;nbsp; Now,
here we are defining the trigger behavior on the UI that is bound to an actual &lt;strong&gt;PictureViewModel &lt;/strong&gt;(note
the property bindings on the image and you will see that I’m telling you the truth!)
So here the command being invoked is the PictureViewModel command – so no parameter
is necessary.
&lt;/p&gt;
&lt;h4&gt;Drag/Position Behavior
&lt;/h4&gt;
&lt;p&gt;
The last thing I want to point out is the dragging behavior.&amp;nbsp; This is also done
through a Blend behavior, but it is being applied in a slightly different way: through
a Style.&amp;nbsp; 
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;}??\fs28 \cf1 &amp;lt;\cf3 ListBox.ItemContainerStyle\cf1 &amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 Style\cf4  TargetType\cf1 ="ListBoxItem"&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="julmar:DragPositionBehavior.IsEnabled"\cf4  Value\cf1 ="True" /&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="Canvas.Left"\cf4  Value\cf1 ="\{\cf3 Binding\cf4  X\cf1 ,\cf4  Mode\cf1 =TwoWay\}" /&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="Canvas.Top"\cf4  Value\cf1 ="\{\cf3 Binding\cf4  Y\cf1 ,\cf4  Mode\cf1 =TwoWay\}" /&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="IsSelected"\cf4  Value\cf1 ="\{\cf3 Binding\cf4  IsSelected\cf1 ,\cf4  Mode\cf1 =TwoWay\}" /&amp;gt;\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ListBox.ItemContainerStyle&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Style&lt;/span&gt;&lt;span style="color: red"&gt; TargetType&lt;/span&gt;&lt;span style="color: blue"&gt;="ListBoxItem"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;strong&gt;&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="color: red"&gt; Property&lt;/span&gt;&lt;span style="color: blue"&gt;="julmar:DragPositionBehavior.IsEnabled"&lt;/span&gt;&lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="True"
/&amp;gt;&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="color: red"&gt; Property&lt;/span&gt;&lt;span style="color: blue"&gt;="Canvas.Left"&lt;/span&gt;&lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; X&lt;/span&gt;&lt;span style="color: blue"&gt;,&lt;/span&gt;&lt;span style="color: red"&gt; Mode&lt;/span&gt;&lt;span style="color: blue"&gt;=TwoWay}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="color: red"&gt; Property&lt;/span&gt;&lt;span style="color: blue"&gt;="Canvas.Top"&lt;/span&gt;&lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Y&lt;/span&gt;&lt;span style="color: blue"&gt;,&lt;/span&gt;&lt;span style="color: red"&gt; Mode&lt;/span&gt;&lt;span style="color: blue"&gt;=TwoWay}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="color: red"&gt; Property&lt;/span&gt;&lt;span style="color: blue"&gt;="IsSelected"&lt;/span&gt;&lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; IsSelected&lt;/span&gt;&lt;span style="color: blue"&gt;,&lt;/span&gt;&lt;span style="color: red"&gt; Mode&lt;/span&gt;&lt;span style="color: blue"&gt;=TwoWay}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
...
&lt;/p&gt;
&lt;p&gt;
Now, for those who have used Blend behaviors a lot, you may now that it is currently
not possible to apply behaviors through Styles.&amp;nbsp; This is a restriction of the
Attached Property definition being used – the collection cannot be associated on a
style.&amp;nbsp; This is a very unfortunate problem because it makes my scenario very
hard: I want to drag and reposition these items around through the mouse.&amp;nbsp; If
I put the behavior onto the DataTemplate then I move the &lt;em&gt;content&lt;/em&gt; but not
the item container itself (the thing that provides selection and focus rendering)&amp;nbsp;
So I would end up with a very weird visualization where you click on an item and the
focus rectangle is drawn in a completely different place than the item itself!
&lt;/p&gt;
&lt;p&gt;
So, in my set of behaviors, many of them allow you to setup the behavior &lt;em&gt;both
through Blend&lt;/em&gt; and through Style setters (or directly on an element without the
full Blend syntax).&amp;nbsp; I do this by adding an attached property onto the behavior
class and then injecting my behavior into the element where the attached property
is set.&amp;nbsp; I’ll show this in a future blog post to give an example for those who’d
like to do the same for their own behaviors.
&lt;/p&gt;
&lt;p&gt;
Another question I’ve fielded is why did I even create this behavior at all when the
Blend sample already exists to do this?&amp;nbsp; Well, the short answer is because I
had a specific goal in mind here – this behavior knows about Canvas panels.&amp;nbsp;
If the behavior is attached to an element in a Canvas, it changes the position by
changing the &lt;strong&gt;Canvas.Left &lt;/strong&gt;and &lt;strong&gt;Canvas.Top &lt;/strong&gt;properties.&amp;nbsp;
If not, it uses a &lt;strong&gt;RenderTransform&lt;/strong&gt;.&amp;nbsp; The supplied blend sample
only uses RenderTransform&lt;strong&gt; &lt;/strong&gt;(at least when I last looked at it).
&lt;/p&gt;
&lt;p&gt;
That about covers it, if you have any questions or comments, then contact me!
&lt;/p&gt;</description>
      <comments>http://www.julmar.com/blog/mark/CommentView,guid,3d40b8c3-fab0-4e64-90a8-59a3582a2e31.aspx</comments>
      <category>.NET</category>
      <category>MVVM</category>
      <category>WPF</category>
    </item>
    <item>
      <trackback:ping>http://www.julmar.com/blog/mark/Trackback.aspx?guid=88843fe1-6503-46de-9be7-51f507dd068e</trackback:ping>
      <pingback:server>http://www.julmar.com/blog/mark/pingback.aspx</pingback:server>
      <pingback:target>http://www.julmar.com/blog/mark/PermaLink,guid,88843fe1-6503-46de-9be7-51f507dd068e.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.julmar.com/blog/mark/CommentView,guid,88843fe1-6503-46de-9be7-51f507dd068e.aspx</wfw:comment>
      <wfw:commentRss>http://www.julmar.com/blog/mark/SyndicationService.asmx/GetEntryCommentsRss?guid=88843fe1-6503-46de-9be7-51f507dd068e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In this post, I will go over the simple message visualizers available in the MVVM
Helpers toolkit.  Essentially the idea is that it is fairly common to want to
display a simple message from the ViewModel to the user.  Since the VM is supposed
to be testable, we encapsulate this ability into four services, three of which I’ll
focus on here:
</p>
        <table border="1" cellspacing="0" cellpadding="2" width="622">
          <tbody>
            <tr>
              <td valign="top" width="200">
                <strong>IMessageVisualizer</strong>
              </td>
              <td valign="top" width="420">
Displays a title + message to the user and allows them to dismiss it through a set
of user-defined buttons.  The button used to dismiss the dialog is returned as
the result.</td>
            </tr>
            <tr>
              <td valign="top" width="200">
                <strong>IErrorVisualizer</strong>
              </td>
              <td valign="top" width="420">
Displays a title + message to the user to report an error.  The only button displayed
is OK, and the visualizer returns true/false.</td>
            </tr>
            <tr>
              <td valign="top" width="200">
                <strong>INotificationVisualizer</strong>
              </td>
              <td valign="top" width="420">
Used to manage some short operation that will halt the UI briefly.</td>
            </tr>
            <tr>
              <td valign="top" width="200">
                <strong>IUIVisualizer</strong>
              </td>
              <td valign="top" width="420">
Displays a custom modal or modaless UI to the user with an associated ViewModel to
drive it.</td>
            </tr>
          </tbody>
        </table>
        <p>
          <br />
To demonstrate the first three visualizer types, we’ll build a very simple MVVM application
to display messages.  I start with the project template and remove all the ViewModel
and View code to have a blank solution.  Each of the three visualizers we are
going to look at take a <strong>string</strong> Title and Message as their parameters
– we’ll drive it from a unique command for each.  To start with, let’s define
a simple data structure that wraps an <strong>ICommand</strong> and a textual title:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;}??\fs28 \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??///\cf3  Simple command + title text\par ??\cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf4 public\cf0  \cf4 class\cf0  \cf6 TitledCommand\par ??\cf0 \{\par ??    \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??\cf0     \cf1 ///\cf3  Title to display\par ??\cf0     \cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf0     \cf4 public\cf0  \cf4 string\cf0  Title \{ \cf4 get\cf0 ; \cf4 private\cf0  \cf4 set\cf0 ; \}\par ??\par ??    \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??\cf0     \cf1 ///\cf3  Command to execute\par ??\cf0     \cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf0     \cf4 public\cf0  \cf6 ICommand\cf0  Command \{ \cf4 get\cf0 ; \cf4 private\cf0  \cf4 set\cf0 ; \}\par ??\par ??    \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??\cf0     \cf1 ///\cf3  Constructor\par ??\cf0     \cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf0     \cf1 ///\cf3  \cf1 &lt;param name="title"&gt;&lt;/param&gt;\par ??\cf0     \cf1 ///\cf3  \cf1 &lt;param name="cmd"&gt;&lt;/param&gt;\par ??\cf0     \cf4 public\cf0  TitledCommand(\cf4 string\cf0  title, \cf6 ICommand\cf0  cmd)\par ??    \{\par ??        Title = title;\par ??        Command = cmd;\par ??    \}\par ??\}\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: gray">///</span>
            <span style="color: green">
            </span>
            <span style="color: gray">&lt;summary&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: gray">///</span>
            <span style="color: green"> Simple command + title
text</span>
          </p>
          <p style="margin: 0px">
            <span style="color: gray">///</span>
            <span style="color: green">
            </span>
            <span style="color: gray">&lt;/summary&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">public</span>
            <span style="color: blue">class</span>
            <span style="color: #2b91af">TitledCommand</span>
          </p>
          <p style="margin: 0px">
{
</p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"></span><span style="color: gray">&lt;summary&gt;</span></p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"> Title
to display</span></p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"></span><span style="color: gray">&lt;/summary&gt;</span></p>
          <p style="margin: 0px">
    <span style="color: blue">public</span><span style="color: blue">string</span> Title
{ <span style="color: blue">get</span>; <span style="color: blue">private</span><span style="color: blue">set</span>;
}
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"></span><span style="color: gray">&lt;summary&gt;</span></p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"> Command
to execute</span></p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"></span><span style="color: gray">&lt;/summary&gt;</span></p>
          <p style="margin: 0px">
    <span style="color: blue">public</span><span style="color: #2b91af">ICommand</span> Command
{ <span style="color: blue">get</span>; <span style="color: blue">private</span><span style="color: blue">set</span>;
}
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"></span><span style="color: gray">&lt;summary&gt;</span></p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"> Constructor</span></p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"></span><span style="color: gray">&lt;/summary&gt;</span></p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"></span><span style="color: gray">&lt;param
name="title"&gt;&lt;/param&gt;</span></p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"></span><span style="color: gray">&lt;param
name="cmd"&gt;&lt;/param&gt;</span></p>
          <p style="margin: 0px">
    <span style="color: blue">public</span> TitledCommand(<span style="color: blue">string</span> title, <span style="color: #2b91af">ICommand</span> cmd)
</p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
        Title = title;
</p>
          <p style="margin: 0px">
        Command = cmd;
</p>
          <p style="margin: 0px">
    }
</p>
          <p style="margin: 0px">
}
</p>
        </div>
        <p>
          <br />
Next, in the <strong>MainViewModel.cs </strong>file, we need a <strong>Title</strong> string
property – this will be the title for each of the visualziations.  It’s just
a simple field-backed INPC property, we’ll bind it to something in the view:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs28 \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??///\cf3  Main View Model\par ??\cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf4 public\cf0  \cf4 class\cf0  \cf6 MainViewModel\cf0  : \cf6 ViewModel\par ??\cf0 \{\par ??    \cf4 private\cf0  \cf4 string\cf0  _title, _result;\par ??\par ??    \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??\cf0     \cf1 ///\cf3  Title for visualizations\par ??\cf0     \cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf0     \cf4 public\cf0  \cf4 string\cf0  Title\par ??    \{\par ??        \cf4 get\cf0  \{ \cf4 return\cf0  _title; \}\par ??        \cf4 set\cf0  \{ _title = \cf4 value\cf0 ; OnPropertyChanged(\cf7 "Title"\cf0 ); \}\par ??    \}\par ??\par ??    \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??\cf0     \cf1 ///\cf3  Result\par ??\cf0     \cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf0     \cf4 public\cf0  \cf4 string\cf0  Result\par ??    \{\par ??        \cf4 get\cf0  \{ \cf4 return\cf0  _result; \}\par ??        \cf4 set\cf0  \{ _result = \cf4 value\cf0 ; OnPropertyChanged(\cf7 "Result"\cf0 );\}\par ??    \}\par ??\par ??    \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??\cf0     \cf1 ///\cf3  Visualization Command list\par ??\cf0     \cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf0     \cf4 public\cf0  \cf6 IList\cf0 &lt;\cf6 TitledCommand\cf0 &gt; VisualizationCommands \{ \cf4 get\cf0 ; \cf4 private\cf0  \cf4 set\cf0 ; \}\par ??\par ??    \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??\cf0     \cf1 ///\cf3  Constructor\par ??\cf0     \cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf0     \cf4 public\cf0  MainViewModel()\par ??    \{\par ??        VisualizationCommands = \cf4 new\cf0  \cf6 List\cf0 &lt;\cf6 TitledCommand\cf0 &gt;\par ??        \{\par ??            \cf4 new\cf0  \cf6 TitledCommand\cf0 (\cf7 "Show Message"\cf0 , \cf4 new\cf0  \cf6 DelegatingCommand\cf0 &lt;\cf4 string\cf0 &gt;(OnShowMessage, \par ??                s =&gt; !\cf4 string\cf0 .IsNullOrEmpty(Title) &amp;&amp; !\cf4 string\cf0 .IsNullOrEmpty(s))),\par ??            \cf4 new\cf0  \cf6 TitledCommand\cf0 (\cf7 "Show Error"\cf0 , \cf4 new\cf0  \cf6 DelegatingCommand\cf0 &lt;\cf4 string\cf0 &gt;(OnShowError,\par ??                s =&gt; !\cf4 string\cf0 .IsNullOrEmpty(Title) &amp;&amp; !\cf4 string\cf0 .IsNullOrEmpty(s))),        \par ??            \cf4 new\cf0  \cf6 TitledCommand\cf0 (\cf7 "Show Notification"\cf0 , \cf4 new\cf0  \cf6 DelegatingCommand\cf0 &lt;\cf4 string\cf0 &gt;(OnShowNotification, \par ??                s =&gt; !\cf4 string\cf0 .IsNullOrEmpty(Title))),\par ??        \};\par ??    \}\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: gray">///</span>
            <span style="color: green">
            </span>
            <span style="color: gray">&lt;summary&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: gray">///</span>
            <span style="color: green"> Main View Model</span>
          </p>
          <p style="margin: 0px">
            <span style="color: gray">///</span>
            <span style="color: green">
            </span>
            <span style="color: gray">&lt;/summary&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">public</span>
            <span style="color: blue">class</span>
            <span style="color: #2b91af">MainViewModel</span> : <span style="color: #2b91af">ViewModel</span></p>
          <p style="margin: 0px">
{
</p>
          <p style="margin: 0px">
    <span style="color: blue">private</span><span style="color: blue">string</span> _title;
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"></span><span style="color: gray">&lt;summary&gt;</span></p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"> Title
for visualizations</span></p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"></span><span style="color: gray">&lt;/summary&gt;</span></p>
          <p style="margin: 0px">
    <span style="color: blue">public</span><span style="color: blue">string</span> Title
</p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
        <span style="color: blue">get</span> { <span style="color: blue">return</span> _title;
}
</p>
          <p style="margin: 0px">
        <span style="color: blue">set</span> {
_title = <span style="color: blue">value</span>; OnPropertyChanged(<span style="color: #a31515">"Title"</span>);
}
</p>
          <p style="margin: 0px">
    }
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
}
</p>
        </div>
        <p>
          <br />
Now we can create a collection of the <strong>TitledCommand </strong>objects and display
them to the user for execution.  We will place this collection into the <strong>MainViewModel.cs</strong>. 
Let’s populate it with a set of delegating commands for each type of visualization
we want to create.  We will use the <strong>DelegatingCommand&lt;T&gt;</strong> version
which allows us to type the parameter being passed.  We will assume the inbound
parameter is always the message to display and there a string:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs28 \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??///\cf3  Main View Model\par ??\cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf4 public\cf0  \cf4 class\cf0  \cf6 MainViewModel\cf0  : \cf6 ViewModel\par ??\cf0 \{\par ??    \cf4 private\cf0  \cf4 string\cf0  _title, _result;\par ??\par ??    \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??\cf0     \cf1 ///\cf3  Title for visualizations\par ??\cf0     \cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf0     \cf4 public\cf0  \cf4 string\cf0  Title\par ??    \{\par ??        \cf4 get\cf0  \{ \cf4 return\cf0  _title; \}\par ??        \cf4 set\cf0  \{ _title = \cf4 value\cf0 ; OnPropertyChanged(\cf7 "Title"\cf0 ); \}\par ??    \}\par ??\par ??    \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??\cf0     \cf1 ///\cf3  Result\par ??\cf0     \cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf0     \cf4 public\cf0  \cf4 string\cf0  Result\par ??    \{\par ??        \cf4 get\cf0  \{ \cf4 return\cf0  _result; \}\par ??        \cf4 set\cf0  \{ _result = \cf4 value\cf0 ; OnPropertyChanged(\cf7 "Result"\cf0 );\}\par ??    \}\par ??\par ??    \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??\cf0     \cf1 ///\cf3  Visualization Command list\par ??\cf0     \cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf0     \cf4 public\cf0  \cf6 IList\cf0 &lt;\cf6 TitledCommand\cf0 &gt; VisualizationCommands \{ \cf4 get\cf0 ; \cf4 private\cf0  \cf4 set\cf0 ; \}\par ??\par ??    \cf1 ///\cf3  \cf1 &lt;summary&gt;\par ??\cf0     \cf1 ///\cf3  Constructor\par ??\cf0     \cf1 ///\cf3  \cf1 &lt;/summary&gt;\par ??\cf0     \cf4 public\cf0  MainViewModel()\par ??    \{\par ??        VisualizationCommands = \cf4 new\cf0  \cf6 List\cf0 &lt;\cf6 TitledCommand\cf0 &gt;\par ??        \{\par ??            \cf4 new\cf0  \cf6 TitledCommand\cf0 (\cf7 "Show Message"\cf0 , \cf4 new\cf0  \cf6 DelegatingCommand\cf0 &lt;\cf4 string\cf0 &gt;(OnShowMessage, \par ??                s =&gt; !\cf4 string\cf0 .IsNullOrEmpty(Title) &amp;&amp; !\cf4 string\cf0 .IsNullOrEmpty(s))),\par ??            \cf4 new\cf0  \cf6 TitledCommand\cf0 (\cf7 "Show Error"\cf0 , \cf4 new\cf0  \cf6 DelegatingCommand\cf0 &lt;\cf4 string\cf0 &gt;(OnShowError,\par ??                s =&gt; !\cf4 string\cf0 .IsNullOrEmpty(Title) &amp;&amp; !\cf4 string\cf0 .IsNullOrEmpty(s))),        \par ??            \cf4 new\cf0  \cf6 TitledCommand\cf0 (\cf7 "Show Notification"\cf0 , \cf4 new\cf0  \cf6 DelegatingCommand\cf0 &lt;\cf4 string\cf0 &gt;(OnShowNotification, \par ??                s =&gt; !\cf4 string\cf0 .IsNullOrEmpty(Title))),\par ??        \};\par ??    \}\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: gray">///</span>
            <span style="color: green">
            </span>
            <span style="color: gray">&lt;summary&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: gray">///</span>
            <span style="color: green"> Main View Model</span>
          </p>
          <p style="margin: 0px">
            <span style="color: gray">///</span>
            <span style="color: green">
            </span>
            <span style="color: gray">&lt;/summary&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">public</span>
            <span style="color: blue">class</span>
            <span style="color: #2b91af">MainViewModel</span> : <span style="color: #2b91af">ViewModel</span></p>
          <p style="margin: 0px">
{
</p>
          <p style="margin: 0px">
    ...
</p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"></span><span style="color: gray">&lt;summary&gt;</span></p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"> Visualization
Command list</span></p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"></span><span style="color: gray">&lt;/summary&gt;</span></p>
          <p style="margin: 0px">
    <span style="color: blue">public</span><span style="color: #2b91af">IList</span>&lt;<span style="color: #2b91af">TitledCommand</span>&gt;
VisualizationCommands { <span style="color: blue">get</span>; <span style="color: blue">private</span><span style="color: blue">set</span>;
}
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"></span><span style="color: gray">&lt;summary&gt;</span></p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"> Constructor</span></p>
          <p style="margin: 0px">
    <span style="color: gray">///</span><span style="color: green"></span><span style="color: gray">&lt;/summary&gt;</span></p>
          <p style="margin: 0px">
    <span style="color: blue">public</span> MainViewModel()
</p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
        VisualizationCommands = <span style="color: blue">new</span><span style="color: #2b91af">List</span>&lt;<span style="color: #2b91af">TitledCommand</span>&gt;
</p>
          <p style="margin: 0px">
        {
</p>
          <p style="margin: 0px">
            <span style="color: blue">new</span><span style="color: #2b91af">TitledCommand</span>(<span style="color: #a31515">"Show
Message"</span>, <span style="color: blue">new</span><span style="color: #2b91af">DelegatingCommand</span>&lt;<span style="color: blue">string</span>&gt;(OnShowMessage, 
</p>
          <p style="margin: 0px">
               
s =&gt; !<span style="color: blue">string</span>.IsNullOrEmpty(Title) &amp;&amp; !<span style="color: blue">string</span>.IsNullOrEmpty(s))),
</p>
          <p style="margin: 0px">
            <span style="color: blue">new</span><span style="color: #2b91af">TitledCommand</span>(<span style="color: #a31515">"Show
Error"</span>, <span style="color: blue">new</span><span style="color: #2b91af">DelegatingCommand</span>&lt;<span style="color: blue">string</span>&gt;(OnShowError,
</p>
          <p style="margin: 0px">
               
s =&gt; !<span style="color: blue">string</span>.IsNullOrEmpty(Title) &amp;&amp; !<span style="color: blue">string</span>.IsNullOrEmpty(s))),        
</p>
          <p style="margin: 0px">
            <span style="color: blue">new</span><span style="color: #2b91af">TitledCommand</span>(<span style="color: #a31515">"Show
Notification"</span>, 
</p>
          <p style="margin: 0px">
                <span style="color: blue">new</span><span style="color: #2b91af">DelegatingCommand</span>&lt;<span style="color: blue">string</span>&gt;(OnShowNotification, 
</p>
          <p style="margin: 0px">
               
s =&gt; !<span style="color: blue">string</span>.IsNullOrEmpty(Title))),
</p>
          <p style="margin: 0px">
        };
</p>
          <p style="margin: 0px">
    }
</p>
          <p style="margin: 0px">
}
</p>
        </div>
        <p>
          <br />
The <strong>CanExecute</strong> handler for each of them will test the <strong>Title</strong> property
– ensure there is a value there, and the inbound parameter (the Message) and make
sure there is a value there as well.
</p>
        <h4>IMessageVisualizer
</h4>
        <p>
The IMessageVisualizer is used to show a simple message to the user – it takes a title,
message and an enumeration to decide which buttons to display.  The default implementation
of the service displays a <strong>MessageBox</strong>.   
</p>
        <p>
          <a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIntroducingthemessagevisualizers_8347/image_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIntroducingthemessagevisualizers_8347/image_thumb.png" width="402" height="185" />
          </a>
        </p>
        <p>
The buttons you can display include:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;}??\fs28     \cf3 public\cf0  \cf3 enum\cf0  \cf4 MessageButtons\par ??\cf0     \{\par ??        OK = 0,\par ??        OKCancel = 1,\par ??        YesNoCancel = 3,\par ??        YesNo = 4\par ??    \}\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
    <span style="color: blue">public</span><span style="color: blue">enum</span><span style="color: #2b91af">MessageButtons</span></p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
        OK = 0,
</p>
          <p style="margin: 0px">
        OKCancel = 1,
</p>
          <p style="margin: 0px">
        YesNoCancel = 3,
</p>
          <p style="margin: 0px">
        YesNo = 4
</p>
          <p style="margin: 0px">
    }
</p>
        </div>
        <p>
          <br />
The result from the service is which button was used to dismiss the dialog:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;}??\fs28     \cf3 public\cf0  \cf3 enum\cf0  \cf4 MessageResult\par ??\cf0     \{\par ??        None = 0,\par ??        OK = 1,\par ??        Cancel = 2,\par ??        Yes = 6,\par ??        No = 7\par ??    \}\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
    <span style="color: blue">public</span><span style="color: blue">enum</span><span style="color: #2b91af">MessageResult</span></p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
        None = 0,
</p>
          <p style="margin: 0px">
        OK = 1,
</p>
          <p style="margin: 0px">
        Cancel = 2,
</p>
          <p style="margin: 0px">
        Yes = 6,
</p>
          <p style="margin: 0px">
        No = 7
</p>
          <p style="margin: 0px">
    }
</p>
        </div>
        <p>
          <br />
Using the visualizer is very easy – request the service from the service locator using
the <strong>Resolve</strong> method (this requires you derive from the <strong>JulMar.Windows.Mvvm.ViewModel</strong> base
class, or hit the service locator using the static property):
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;}??\fs28     \cf3 private\cf0  \cf3 void\cf0  OnShowMessage(\cf3 string\cf0  message)\par ??    \{\par ??        \cf3 var\cf0  messageVisualizer = Resolve&lt;\cf4 IMessageVisualizer\cf0 &gt;();\par ??        \cf3 if\cf0  (messageVisualizer != \cf3 null\cf0 )\par ??        \{\par ??            Result = \cf4 Enum\cf0 .GetName(\cf3 typeof\cf0  (\cf4 MessageResult\cf0 ),\par ??                                  messageVisualizer.Show(Title, message, \cf4 MessageButtons\cf0 .YesNoCancel));\par ??        \}\par ??    \}\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
    <span style="color: blue">private</span><span style="color: blue">void</span> OnShowMessage(<span style="color: blue">string</span> message)
</p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
        <span style="color: blue">var</span> messageVisualizer
= Resolve&lt;<span style="color: #2b91af">IMessageVisualizer</span>&gt;();
</p>
          <p style="margin: 0px">
        <span style="color: blue">if</span> (messageVisualizer
!= <span style="color: blue">null</span>)
</p>
          <p style="margin: 0px">
        {
</p>
          <p style="margin: 0px">
            Result = <span style="color: #2b91af">Enum</span>.GetName(<span style="color: blue">typeof</span> (<span style="color: #2b91af">MessageResult</span>),
</p>
          <p style="margin: 0px">
              
messageVisualizer.Show(Title, message, <span style="color: #2b91af">MessageButtons</span>.YesNoCancel));
</p>
          <p style="margin: 0px">
        }
</p>
          <p style="margin: 0px">
    }
</p>
        </div>
        <p>
          <br />
Notice that I test to ensure the visualizer is available – remember that services
can be replaced or removed – I might do this in my unit tests for example (I actually
mock the interface rather than replace it, but you get the point – test to make sure
it’s there).
</p>
        <p>
We want to see the result, so I take the resulting enum and convert it to a string
and assign it to a new <strong>Result</strong> property on the ViewModel.  This,
like <strong>Title</strong>, is just a field-backed string that does a property change
notification.
</p>
        <h4>IErrorVisualizer
</h4>
        <p>
The error visualizer is for cases where you want to display an error dialog to the
user with a title and message.  The default implementation displays a <strong>MessageBox </strong>with
an OK button
</p>
        <p>
          <a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIntroducingthemessagevisualizers_8347/image_4.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIntroducingthemessagevisualizers_8347/image_thumb_1.png" width="391" height="183" />
          </a>
        </p>
        <p>
It returns a boolean response indicating that the user clicked the OK button (versus
dismissing using the Close “X” button).   It has a similar interface to
the message visualizer:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;}??\fs28     \cf3 private\cf0  \cf3 void\cf0  OnShowError(\cf3 string\cf0  errorMessage)\par ??    \{\par ??        \cf3 var\cf0  errorVisualizer = Resolve&lt;\cf4 IErrorVisualizer\cf0 &gt;();\par ??        \cf3 if\cf0  (errorVisualizer != \cf3 null\cf0 )\par ??        \{\par ??            Result = errorVisualizer.Show(Title, errorMessage).ToString();\par ??        \}\par ??    \}\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
    <span style="color: blue">private</span><span style="color: blue">void</span> OnShowError(<span style="color: blue">string</span> errorMessage)
</p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
        <span style="color: blue">var</span> errorVisualizer
= Resolve&lt;<span style="color: #2b91af">IErrorVisualizer</span>&gt;();
</p>
          <p style="margin: 0px">
        <span style="color: blue">if</span> (errorVisualizer
!= <span style="color: blue">null</span>)
</p>
          <p style="margin: 0px">
        {
</p>
          <p style="margin: 0px">
            Result = errorVisualizer.Show(Title,
errorMessage).ToString();
</p>
          <p style="margin: 0px">
        }
</p>
          <p style="margin: 0px">
    }
</p>
        </div>
        <p>
          <br />
We will assign the boolean result to the string Result property as well.
</p>
        <h4>INotificationVisualizer
</h4>
        <p>
This visualizer is for cases where you are doing something in the ViewModel logic,
on the UI thread that takes a moment to process.  Sorting a list, or searching
an in-memory list might be an example.  True long-running operations should always
be on a separate thread and use properties or the message mediator to coordinate with
the UI thread.  That said, there are times when you want to do the logic inline
with the request and you know it’s going to take a second or two to process it. 
Enter the <strong>INotificationVisualizer</strong>.  It takes the same title
and message as it’s cousin visualizers but the default implementation does not use
them – instead, the default implementation simply changes the cursor to an hourglass
(the defacto standard for “please wait”).  This is a service that I often replace
with a custom visualzation – a progress bar, thumbar progress on Windows 7, or even
a dialog overlay.  Invoking it is simple:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;\red0\green128\blue0;}??\fs28     \cf3 private\cf0  \cf3 void\cf0  OnShowNotification(\cf3 string\cf0  message)\par ??    \{\par ??        \cf3 var\cf0  notifyVisual = Resolve&lt;\cf4 INotificationVisualizer\cf0 &gt;();\par ??        \cf3 if\cf0  (notifyVisual != \cf3 null\cf0 )\par ??        \{\par ??            \cf3 using\cf0  (notifyVisual.BeginWait(Title, message))\par ??            \{\par ??                \cf5 // Sleep for 2sec, pretending to work\par ??\cf0                 \cf4 Thread\cf0 .Sleep(2000);\par ??            \}\par ??        \}\par ??    \}\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
    <span style="color: blue">private</span><span style="color: blue">void</span> OnShowNotification(<span style="color: blue">string</span> message)
</p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
        <span style="color: blue">var</span> notifyVisual
= Resolve&lt;<span style="color: #2b91af">INotificationVisualizer</span>&gt;();
</p>
          <p style="margin: 0px">
        <span style="color: blue">if</span> (notifyVisual
!= <span style="color: blue">null</span>)
</p>
          <p style="margin: 0px">
        {
</p>
          <p style="margin: 0px">
            <span style="color: blue">using</span> (notifyVisual.BeginWait(Title,
message))
</p>
          <p style="margin: 0px">
            {
</p>
          <p style="margin: 0px">
                <span style="color: green">//
Sleep for 2sec, pretending to work</span></p>
          <p style="margin: 0px">
                <span style="color: #2b91af">Thread</span>.Sleep(2000);
</p>
          <p style="margin: 0px">
            }
</p>
          <p style="margin: 0px">
        }
</p>
          <p style="margin: 0px">
    }
</p>
        </div>
        <p>
          <br />
The <strong>BeginWait</strong>() method kicks off the notification visual (hourglass
cursor in this case).  It returns a disposable object that you invoke Dispose
on to return to the normal cursor.  Again, let me stress this is not optimal
for a true long-running operation – this locks the UI up until the thread returns
so only use this for very short operations.
</p>
        <h4>Creating the View
</h4>
        <p>
The View for this application will be simple – let’s use an <strong>ItemsControl</strong> to
generate a button for each of the exposed commands, two <strong>TextBoxes</strong> to
hold the Title and Message, and then a <strong>TextBlock</strong> for the result,
here’s what I want it to look like:
</p>
        <p>
          <a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIntroducingthemessagevisualizers_8347/image_6.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIntroducingthemessagevisualizers_8347/image_thumb_2.png" width="426" height="320" />
          </a>
        </p>
        <p>
I’ll let you go through the XAML – it’s straightforward and should be pretty easy
to follow.  The only new thing might be that we’ll set focus to the first focusable
element using the <strong>FirstFocusedElement</strong> markup extension:
</p>
        <!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green0\blue0;}??\fs28 \cf1 &lt;\cf3 Window\cf4  x\cf1 :\cf4 Class\cf1 ="ServicesTest.Views.MainWindow"\par ??\cf0    \cf4  xmlns\cf1 ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"\par ??\cf0    \cf4  xmlns\cf1 :\cf4 x\cf1 ="http://schemas.microsoft.com/winfx/2006/xaml"\cf0  \par ??   \cf4  xmlns\cf1 :\cf4 julmar\cf1 ="http://www.julmar.com/wpfhelpers"\par ??\cf0    \cf4  xmlns\cf1 :\cf4 ViewModels\cf1 ="clr-namespace:ServicesTest.ViewModels"\cf0  \par ??   \cf4  Title\cf1 ="Notification Visualizer Test"\cf4  Height\cf1 ="300"\cf4  Width\cf1 ="400"\cf4  Background\cf1 ="LightYellow"\cf0  \par ??   \cf4  WindowStartupLocation\cf1 ="CenterScreen"\cf4  FocusManager.FocusedElement\cf1 ="\{\cf3 julmar\cf1 :\cf3 FirstFocusedElement\cf1 \}"\par ??\cf0    \cf4  DataContext\cf1 ="\{\cf3 julmar\cf1 :\cf3 ViewModelCreator\cf1  \{\cf3 x\cf1 :\cf3 Type\cf4  ViewModels\cf1 :\cf4 MainViewModel\cf1 \}\}"&gt;\par ??\cf3     \cf1 &lt;\cf3 Grid\cf4  Margin\cf1 ="5"&gt;\par ??\cf3         \cf1 &lt;\cf3 Grid.RowDefinitions\cf1 &gt;\par ??\cf3             \cf1 &lt;\cf3 RowDefinition\cf4  Height\cf1 ="Auto" /&gt;\par ??\cf3             \cf1 &lt;\cf3 RowDefinition\cf4  Height\cf1 ="Auto" /&gt;\par ??\cf3             \cf1 &lt;\cf3 RowDefinition\cf4  Height\cf1 ="Auto" /&gt;\par ??\cf3             \cf1 &lt;\cf3 RowDefinition\cf1  /&gt;\par ??\cf3         \cf1 &lt;/\cf3 Grid.RowDefinitions\cf1 &gt;\par ??\cf3         \par ??        \cf1 &lt;\cf3 Grid.ColumnDefinitions\cf1 &gt;\par ??\cf3             \cf1 &lt;\cf3 ColumnDefinition\cf4  Width\cf1 ="Auto" /&gt;\par ??\cf3             \cf1 &lt;\cf3 ColumnDefinition\cf1  /&gt;\par ??\cf3         \cf1 &lt;/\cf3 Grid.ColumnDefinitions\cf1 &gt;\par ??\cf3         \par ??        \cf1 &lt;\cf3 Label\cf4  Grid.Column\cf1 ="0"\cf4  Grid.Row\cf1 ="0"\cf4  Content\cf1 ="Title:" /&gt;\par ??\cf3         \cf1 &lt;\cf3 TextBox\cf4  Grid.Column\cf1 ="1"\cf4  Grid.Row\cf1 ="0"\cf4  Margin\cf1 ="5,2"\cf4  Text\cf1 ="\{\cf3 Binding\cf4  Title\cf1 \}" /&gt;\par ??\par ??\cf3         \cf1 &lt;\cf3 Label\cf4  Grid.Column\cf1 ="0"\cf4  Grid.Row\cf1 ="1"\cf4  Content\cf1 ="Message:" /&gt;\par ??\cf3         \cf1 &lt;\cf3 TextBox\cf4  x\cf1 :\cf4 Name\cf1 ="tbMessage"\cf4  Grid.Column\cf1 ="1"\cf4  Grid.Row\cf1 ="1"\cf4  Margin\cf1 ="5,2" /&gt;\par ??\par ??\cf3         \cf1 &lt;\cf3 ItemsControl\cf4  Grid.Row\cf1 ="2"\cf4  Grid.ColumnSpan\cf1 ="2"\cf4  Margin\cf1 ="10"\par ??\cf0                      \cf4  ItemsSource\cf1 ="\{\cf3 Binding\cf4  VisualizationCommands\cf1 \}"&gt;\par ??\cf3             \cf1 &lt;\cf3 ItemsControl.ItemTemplate\cf1 &gt;\par ??\cf3                 \cf1 &lt;\cf3 DataTemplate\cf1 &gt;\par ??\cf3                     \cf1 &lt;\cf3 Button\cf4  Margin\cf1 ="5"\cf4  Content\cf1 ="\{\cf3 Binding\cf4  Title\cf1 \}"\cf4  Command\cf1 ="\{\cf3 Binding\cf4  Command\cf1 \}"\cf4  CommandParameter\cf1 ="\{\cf3 Binding\cf4  ElementName\cf1 =tbMessage,\cf4  Path\cf1 =Text\}" /&gt;\par ??\cf3                 \cf1 &lt;/\cf3 DataTemplate\cf1 &gt;\par ??\cf3             \cf1 &lt;/\cf3 ItemsControl.ItemTemplate\cf1 &gt;\par ??\cf3         \cf1 &lt;/\cf3 ItemsControl\cf1 &gt;\par ??\cf3         \par ??        \cf1 &lt;\cf3 TextBlock\cf4  FontSize\cf1 ="24pt"\cf4  Grid.ColumnSpan\cf1 ="2"\cf4  Grid.Row\cf1 ="3"\cf4  HorizontalAlignment\cf1 ="Center"\cf0  \par ??              \cf4  VerticalAlignment\cf1 ="Center"\cf4  Text\cf1 ="\{\cf3 Binding\cf4  Result\cf1 ,\cf4  FallbackValue\cf1 =None\}" /&gt;\par ??\cf3         \par ??    \cf1 &lt;/\cf3 Grid\cf1 &gt;\par ??&lt;/\cf3 Window\cf1 &gt;\par ??}
-->
        <div style="font-family: consolas; background: white; color: black; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Window</span>
            <span style="color: red"> x</span>
            <span style="color: blue">:</span>
            <span style="color: red">Class</span>
            <span style="color: blue">="ServicesTest.Views.MainWindow"</span>
          </p>
          <p style="margin: 0px">
   <span style="color: red">xmlns</span><span style="color: blue">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></p>
          <p style="margin: 0px">
   <span style="color: red">xmlns</span><span style="color: blue">:</span><span style="color: red">x</span><span style="color: blue">="http://schemas.microsoft.com/winfx/2006/xaml"</span></p>
          <p style="margin: 0px">
   <span style="color: red">xmlns</span><span style="color: blue">:</span><span style="color: red">julmar</span><span style="color: blue">="http://www.julmar.com/wpfhelpers"</span></p>
          <p style="margin: 0px">
   <span style="color: red">xmlns</span><span style="color: blue">:</span><span style="color: red">ViewModels</span><span style="color: blue">="clr-namespace:ServicesTest.ViewModels"</span></p>
          <p style="margin: 0px">
   <span style="color: red">Title</span><span style="color: blue">="Notification
Visualizer Test"</span><span style="color: red"> Height</span><span style="color: blue">="300"</span><span style="color: red"> Width</span><span style="color: blue">="400"</span><span style="color: red"> Background</span><span style="color: blue">="LightYellow"</span></p>
          <p style="margin: 0px">
   <span style="color: red">WindowStartupLocation</span><span style="color: blue">="CenterScreen"</span><span style="color: red"></span></p>
          <p style="margin: 0px">
            <span style="color: red">   FocusManager.FocusedElement</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">julmar</span>
            <span style="color: blue">:</span>
            <span style="color: #a31515">FirstFocusedElement</span>
            <span style="color: blue">}"</span>
          </p>
          <p style="margin: 0px">
   <span style="color: red">DataContext</span><span style="color: blue">="{</span><span style="color: #a31515">julmar</span><span style="color: blue">:</span><span style="color: #a31515">ViewModelCreator</span><span style="color: blue"> {</span><span style="color: #a31515">x</span><span style="color: blue">:</span><span style="color: #a31515">Type</span><span style="color: red"> ViewModels</span><span style="color: blue">:</span><span style="color: red">MainViewModel</span><span style="color: blue">}}"&gt;</span></p>
          <p style="margin: 0px">
            <span style="color: #a31515">    </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Grid</span>
            <span style="color: red"> Margin</span>
            <span style="color: blue">="5"&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Grid.RowDefinitions</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">            </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">RowDefinition</span>
            <span style="color: red"> Height</span>
            <span style="color: blue">="Auto"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">            </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">RowDefinition</span>
            <span style="color: red"> Height</span>
            <span style="color: blue">="Auto"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">            </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">RowDefinition</span>
            <span style="color: red"> Height</span>
            <span style="color: blue">="Auto"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">            </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">RowDefinition</span>
            <span style="color: blue"> /&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">Grid.RowDefinitions</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Grid.ColumnDefinitions</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">            </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">ColumnDefinition</span>
            <span style="color: red"> Width</span>
            <span style="color: blue">="Auto"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">            </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">ColumnDefinition</span>
            <span style="color: blue"> /&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">Grid.ColumnDefinitions</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Label</span>
            <span style="color: red"> Grid.Column</span>
            <span style="color: blue">="0"</span>
            <span style="color: red"> Grid.Row</span>
            <span style="color: blue">="0"</span>
            <span style="color: red"> Content</span>
            <span style="color: blue">="Title:"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">TextBox</span>
            <span style="color: red"> Grid.Column</span>
            <span style="color: blue">="1"</span>
            <span style="color: red"> Grid.Row</span>
            <span style="color: blue">="0"</span>
            <span style="color: red"> Margin</span>
            <span style="color: blue">="5,2"</span>
            <span style="color: red"> Text</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> Title</span>
            <span style="color: blue">}"
/&gt;</span>
          </p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Label</span>
            <span style="color: red"> Grid.Column</span>
            <span style="color: blue">="0"</span>
            <span style="color: red"> Grid.Row</span>
            <span style="color: blue">="1"</span>
            <span style="color: red"> Content</span>
            <span style="color: blue">="Message:"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">TextBox</span>
            <span style="color: red"> x</span>
            <span style="color: blue">:</span>
            <span style="color: red">Name</span>
            <span style="color: blue">="tbMessage"</span>
            <span style="color: red"> Grid.Column</span>
            <span style="color: blue">="1"</span>
            <span style="color: red"> Grid.Row</span>
            <span style="color: blue">="1"</span>
            <span style="color: red"> Margin</span>
            <span style="color: blue">="5,2"
/&gt;</span>
          </p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">ItemsControl</span>
            <span style="color: red"> Grid.Row</span>
            <span style="color: blue">="2"</span>
            <span style="color: red"> Grid.ColumnSpan</span>
            <span style="color: blue">="2"</span>
            <span style="color: red"> Margin</span>
            <span style="color: blue">="10"</span>
          </p>
          <p style="margin: 0px">
                    <span style="color: red">ItemsSource</span><span style="color: blue">="{</span><span style="color: #a31515">Binding</span><span style="color: red"> VisualizationCommands</span><span style="color: blue">}"&gt;</span></p>
          <p style="margin: 0px">
            <span style="color: #a31515">            </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">ItemsControl.ItemTemplate</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">                </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">DataTemplate</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">                    </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">Button</span>
            <span style="color: red"> Margin</span>
            <span style="color: blue">="5"</span>
            <span style="color: red"> Content</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> Title</span>
            <span style="color: blue">}"</span>
            <span style="color: red">
            </span>
          </p>
          <p style="margin: 0px">
            <span style="color: red">                      
Command</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> Command</span>
            <span style="color: blue">}"</span>
            <span style="color: red">
            </span>
          </p>
          <p style="margin: 0px">
            <span style="color: red">                      
CommandParameter</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> ElementName</span>
            <span style="color: blue">=tbMessage,</span>
            <span style="color: red"> Path</span>
            <span style="color: blue">=Text}"
/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">                </span>
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">DataTemplate</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">            </span>
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">ItemsControl.ItemTemplate</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">ItemsControl</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #a31515">        </span>
            <span style="color: blue">&lt;</span>
            <span style="color: #a31515">TextBlock</span>
            <span style="color: red"> FontSize</span>
            <span style="color: blue">="24pt"</span>
            <span style="color: red"> Grid.ColumnSpan</span>
            <span style="color: blue">="2"</span>
            <span style="color: red"> Grid.Row</span>
            <span style="color: blue">="3"</span>
            <span style="color: red">
            </span>
          </p>
          <p style="margin: 0px">
            <span style="color: red">             
HorizontalAlignment</span>
            <span style="color: blue">="Center" </span>
            <span style="color: red">VerticalAlignment</span>
            <span style="color: blue">="Center"</span>
            <span style="color: red">
            </span>
          </p>
          <p style="margin: 0px">
            <span style="color: red">             
Text</span>
            <span style="color: blue">="{</span>
            <span style="color: #a31515">Binding</span>
            <span style="color: red"> Result</span>
            <span style="color: blue">,</span>
            <span style="color: red"> FallbackValue</span>
            <span style="color: blue">=None}"
/&gt;</span>
          </p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #a31515">    </span>
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">Grid</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">&lt;/</span>
            <span style="color: #a31515">Window</span>
            <span style="color: blue">&gt;</span>
          </p>
        </div>
        <p>
          <br />
That should do it – if you’d like to just download the project and play with it, it’s
available here: <a href="http://www.julmar.com/samples/VisulizerTest.zip" target="_blank">VisualizerTest.zip</a>. 
In the next post we’ll take a look at the grand-daddy of the message visualizers in
the MVVM Helper toolkit: the <strong>IUIVisualizer</strong>!
</p>
      </body>
      <title>MVVM: Introducing the message visualizers</title>
      <guid isPermaLink="false">http://www.julmar.com/blog/mark/PermaLink,guid,88843fe1-6503-46de-9be7-51f507dd068e.aspx</guid>
      <link>http://www.julmar.com/blog/mark/2010/02/01/MVVMIntroducingTheMessageVisualizers.aspx</link>
      <pubDate>Mon, 01 Feb 2010 15:59:35 GMT</pubDate>
      <description>&lt;p&gt;
In this post, I will go over the simple message visualizers available in the MVVM
Helpers toolkit.&amp;nbsp; Essentially the idea is that it is fairly common to want to
display a simple message from the ViewModel to the user.&amp;nbsp; Since the VM is supposed
to be testable, we encapsulate this ability into four services, three of which I’ll
focus on here:
&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="2" width="622"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
&lt;strong&gt;IMessageVisualizer&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="420"&gt;
Displays a title + message to the user and allows them to dismiss it through a set
of user-defined buttons.&amp;nbsp; The button used to dismiss the dialog is returned as
the result.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
&lt;strong&gt;IErrorVisualizer&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="420"&gt;
Displays a title + message to the user to report an error.&amp;nbsp; The only button displayed
is OK, and the visualizer returns true/false.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
&lt;strong&gt;INotificationVisualizer&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="420"&gt;
Used to manage some short operation that will halt the UI briefly.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
&lt;strong&gt;IUIVisualizer&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="420"&gt;
Displays a custom modal or modaless UI to the user with an associated ViewModel to
drive it.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;br&gt;
To demonstrate the first three visualizer types, we’ll build a very simple MVVM application
to display messages.&amp;nbsp; I start with the project template and remove all the ViewModel
and View code to have a blank solution.&amp;nbsp; Each of the three visualizers we are
going to look at take a &lt;strong&gt;string&lt;/strong&gt; Title and Message as their parameters
– we’ll drive it from a unique command for each.&amp;nbsp; To start with, let’s define
a simple data structure that wraps an &lt;strong&gt;ICommand&lt;/strong&gt; and a textual title:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;}??\fs28 \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  Simple command + title text\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf4 public\cf0  \cf4 class\cf0  \cf6 TitledCommand\par ??\cf0 \{\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Title to display\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf4 public\cf0  \cf4 string\cf0  Title \{ \cf4 get\cf0 ; \cf4 private\cf0  \cf4 set\cf0 ; \}\par ??\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Command to execute\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf4 public\cf0  \cf6 ICommand\cf0  Command \{ \cf4 get\cf0 ; \cf4 private\cf0  \cf4 set\cf0 ; \}\par ??\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Constructor\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;param name="title"&amp;gt;&amp;lt;/param&amp;gt;\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;param name="cmd"&amp;gt;&amp;lt;/param&amp;gt;\par ??\cf0     \cf4 public\cf0  TitledCommand(\cf4 string\cf0  title, \cf6 ICommand\cf0  cmd)\par ??    \{\par ??        Title = title;\par ??        Command = cmd;\par ??    \}\par ??\}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Simple command + title
text&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;TitledCommand&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Title
to display&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; Title
{ &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;set&lt;/span&gt;;
}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Command
to execute&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ICommand&lt;/span&gt; Command
{ &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;set&lt;/span&gt;;
}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Constructor&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;param
name="title"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;param
name="cmd"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; TitledCommand(&lt;span style="color: blue"&gt;string&lt;/span&gt; title, &lt;span style="color: #2b91af"&gt;ICommand&lt;/span&gt; cmd)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Title = title;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Command = cmd;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Next, in the &lt;strong&gt;MainViewModel.cs &lt;/strong&gt;file, we need a &lt;strong&gt;Title&lt;/strong&gt; string
property – this will be the title for each of the visualziations.&amp;nbsp; It’s just
a simple field-backed INPC property, we’ll bind it to something in the view:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs28 \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  Main View Model\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf4 public\cf0  \cf4 class\cf0  \cf6 MainViewModel\cf0  : \cf6 ViewModel\par ??\cf0 \{\par ??    \cf4 private\cf0  \cf4 string\cf0  _title, _result;\par ??\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Title for visualizations\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf4 public\cf0  \cf4 string\cf0  Title\par ??    \{\par ??        \cf4 get\cf0  \{ \cf4 return\cf0  _title; \}\par ??        \cf4 set\cf0  \{ _title = \cf4 value\cf0 ; OnPropertyChanged(\cf7 "Title"\cf0 ); \}\par ??    \}\par ??\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Result\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf4 public\cf0  \cf4 string\cf0  Result\par ??    \{\par ??        \cf4 get\cf0  \{ \cf4 return\cf0  _result; \}\par ??        \cf4 set\cf0  \{ _result = \cf4 value\cf0 ; OnPropertyChanged(\cf7 "Result"\cf0 );\}\par ??    \}\par ??\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Visualization Command list\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf4 public\cf0  \cf6 IList\cf0 &amp;lt;\cf6 TitledCommand\cf0 &amp;gt; VisualizationCommands \{ \cf4 get\cf0 ; \cf4 private\cf0  \cf4 set\cf0 ; \}\par ??\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Constructor\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf4 public\cf0  MainViewModel()\par ??    \{\par ??        VisualizationCommands = \cf4 new\cf0  \cf6 List\cf0 &amp;lt;\cf6 TitledCommand\cf0 &amp;gt;\par ??        \{\par ??            \cf4 new\cf0  \cf6 TitledCommand\cf0 (\cf7 "Show Message"\cf0 , \cf4 new\cf0  \cf6 DelegatingCommand\cf0 &amp;lt;\cf4 string\cf0 &amp;gt;(OnShowMessage, \par ??                s =&amp;gt; !\cf4 string\cf0 .IsNullOrEmpty(Title) &amp;amp;&amp;amp; !\cf4 string\cf0 .IsNullOrEmpty(s))),\par ??            \cf4 new\cf0  \cf6 TitledCommand\cf0 (\cf7 "Show Error"\cf0 , \cf4 new\cf0  \cf6 DelegatingCommand\cf0 &amp;lt;\cf4 string\cf0 &amp;gt;(OnShowError,\par ??                s =&amp;gt; !\cf4 string\cf0 .IsNullOrEmpty(Title) &amp;amp;&amp;amp; !\cf4 string\cf0 .IsNullOrEmpty(s))),        \par ??            \cf4 new\cf0  \cf6 TitledCommand\cf0 (\cf7 "Show Notification"\cf0 , \cf4 new\cf0  \cf6 DelegatingCommand\cf0 &amp;lt;\cf4 string\cf0 &amp;gt;(OnShowNotification, \par ??                s =&amp;gt; !\cf4 string\cf0 .IsNullOrEmpty(Title))),\par ??        \};\par ??    \}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Main View Model&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;MainViewModel&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;ViewModel&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; _title;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Title
for visualizations&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; Title
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _title;
}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;set&lt;/span&gt; {
_title = &lt;span style="color: blue"&gt;value&lt;/span&gt;; OnPropertyChanged(&lt;span style="color: #a31515"&gt;"Title"&lt;/span&gt;);
}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Now we can create a collection of the &lt;strong&gt;TitledCommand &lt;/strong&gt;objects and display
them to the user for execution.&amp;nbsp; We will place this collection into the &lt;strong&gt;MainViewModel.cs&lt;/strong&gt;.&amp;nbsp;
Let’s populate it with a set of delegating commands for each type of visualization
we want to create.&amp;nbsp; We will use the &lt;strong&gt;DelegatingCommand&amp;lt;T&amp;gt;&lt;/strong&gt; version
which allows us to type the parameter being passed.&amp;nbsp; We will assume the inbound
parameter is always the message to display and there a string:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs28 \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  Main View Model\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf4 public\cf0  \cf4 class\cf0  \cf6 MainViewModel\cf0  : \cf6 ViewModel\par ??\cf0 \{\par ??    \cf4 private\cf0  \cf4 string\cf0  _title, _result;\par ??\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Title for visualizations\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf4 public\cf0  \cf4 string\cf0  Title\par ??    \{\par ??        \cf4 get\cf0  \{ \cf4 return\cf0  _title; \}\par ??        \cf4 set\cf0  \{ _title = \cf4 value\cf0 ; OnPropertyChanged(\cf7 "Title"\cf0 ); \}\par ??    \}\par ??\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Result\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf4 public\cf0  \cf4 string\cf0  Result\par ??    \{\par ??        \cf4 get\cf0  \{ \cf4 return\cf0  _result; \}\par ??        \cf4 set\cf0  \{ _result = \cf4 value\cf0 ; OnPropertyChanged(\cf7 "Result"\cf0 );\}\par ??    \}\par ??\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Visualization Command list\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf4 public\cf0  \cf6 IList\cf0 &amp;lt;\cf6 TitledCommand\cf0 &amp;gt; VisualizationCommands \{ \cf4 get\cf0 ; \cf4 private\cf0  \cf4 set\cf0 ; \}\par ??\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Constructor\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf4 public\cf0  MainViewModel()\par ??    \{\par ??        VisualizationCommands = \cf4 new\cf0  \cf6 List\cf0 &amp;lt;\cf6 TitledCommand\cf0 &amp;gt;\par ??        \{\par ??            \cf4 new\cf0  \cf6 TitledCommand\cf0 (\cf7 "Show Message"\cf0 , \cf4 new\cf0  \cf6 DelegatingCommand\cf0 &amp;lt;\cf4 string\cf0 &amp;gt;(OnShowMessage, \par ??                s =&amp;gt; !\cf4 string\cf0 .IsNullOrEmpty(Title) &amp;amp;&amp;amp; !\cf4 string\cf0 .IsNullOrEmpty(s))),\par ??            \cf4 new\cf0  \cf6 TitledCommand\cf0 (\cf7 "Show Error"\cf0 , \cf4 new\cf0  \cf6 DelegatingCommand\cf0 &amp;lt;\cf4 string\cf0 &amp;gt;(OnShowError,\par ??                s =&amp;gt; !\cf4 string\cf0 .IsNullOrEmpty(Title) &amp;amp;&amp;amp; !\cf4 string\cf0 .IsNullOrEmpty(s))),        \par ??            \cf4 new\cf0  \cf6 TitledCommand\cf0 (\cf7 "Show Notification"\cf0 , \cf4 new\cf0  \cf6 DelegatingCommand\cf0 &amp;lt;\cf4 string\cf0 &amp;gt;(OnShowNotification, \par ??                s =&amp;gt; !\cf4 string\cf0 .IsNullOrEmpty(Title))),\par ??        \};\par ??    \}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Main View Model&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;MainViewModel&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;ViewModel&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ...
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Visualization
Command list&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;TitledCommand&lt;/span&gt;&amp;gt;
VisualizationCommands { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;set&lt;/span&gt;;
}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Constructor&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; MainViewModel()
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VisualizationCommands = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;TitledCommand&lt;/span&gt;&amp;gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;TitledCommand&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"Show
Message"&lt;/span&gt;, &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DelegatingCommand&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;(OnShowMessage, 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
s =&amp;gt; !&lt;span style="color: blue"&gt;string&lt;/span&gt;.IsNullOrEmpty(Title) &amp;amp;&amp;amp; !&lt;span style="color: blue"&gt;string&lt;/span&gt;.IsNullOrEmpty(s))),
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;TitledCommand&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"Show
Error"&lt;/span&gt;, &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DelegatingCommand&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;(OnShowError,
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
s =&amp;gt; !&lt;span style="color: blue"&gt;string&lt;/span&gt;.IsNullOrEmpty(Title) &amp;amp;&amp;amp; !&lt;span style="color: blue"&gt;string&lt;/span&gt;.IsNullOrEmpty(s))),&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;TitledCommand&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"Show
Notification"&lt;/span&gt;, 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DelegatingCommand&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;(OnShowNotification, 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
s =&amp;gt; !&lt;span style="color: blue"&gt;string&lt;/span&gt;.IsNullOrEmpty(Title))),
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
The &lt;strong&gt;CanExecute&lt;/strong&gt; handler for each of them will test the &lt;strong&gt;Title&lt;/strong&gt; property
– ensure there is a value there, and the inbound parameter (the Message) and make
sure there is a value there as well.
&lt;/p&gt;
&lt;h4&gt;IMessageVisualizer
&lt;/h4&gt;
&lt;p&gt;
The IMessageVisualizer is used to show a simple message to the user – it takes a title,
message and an enumeration to decide which buttons to display.&amp;nbsp; The default implementation
of the service displays a &lt;strong&gt;MessageBox&lt;/strong&gt;.&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIntroducingthemessagevisualizers_8347/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIntroducingthemessagevisualizers_8347/image_thumb.png" width="402" height="185"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The buttons you can display include:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;}??\fs28     \cf3 public\cf0  \cf3 enum\cf0  \cf4 MessageButtons\par ??\cf0     \{\par ??        OK = 0,\par ??        OKCancel = 1,\par ??        YesNoCancel = 3,\par ??        YesNo = 4\par ??    \}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;enum&lt;/span&gt; &lt;span style="color: #2b91af"&gt;MessageButtons&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OK = 0,
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OKCancel = 1,
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; YesNoCancel = 3,
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; YesNo = 4
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
The result from the service is which button was used to dismiss the dialog:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;}??\fs28     \cf3 public\cf0  \cf3 enum\cf0  \cf4 MessageResult\par ??\cf0     \{\par ??        None = 0,\par ??        OK = 1,\par ??        Cancel = 2,\par ??        Yes = 6,\par ??        No = 7\par ??    \}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;enum&lt;/span&gt; &lt;span style="color: #2b91af"&gt;MessageResult&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None = 0,
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OK = 1,
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cancel = 2,
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Yes = 6,
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; No = 7
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Using the visualizer is very easy – request the service from the service locator using
the &lt;strong&gt;Resolve&lt;/strong&gt; method (this requires you derive from the &lt;strong&gt;JulMar.Windows.Mvvm.ViewModel&lt;/strong&gt; base
class, or hit the service locator using the static property):
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;}??\fs28     \cf3 private\cf0  \cf3 void\cf0  OnShowMessage(\cf3 string\cf0  message)\par ??    \{\par ??        \cf3 var\cf0  messageVisualizer = Resolve&amp;lt;\cf4 IMessageVisualizer\cf0 &amp;gt;();\par ??        \cf3 if\cf0  (messageVisualizer != \cf3 null\cf0 )\par ??        \{\par ??            Result = \cf4 Enum\cf0 .GetName(\cf3 typeof\cf0  (\cf4 MessageResult\cf0 ),\par ??                                  messageVisualizer.Show(Title, message, \cf4 MessageButtons\cf0 .YesNoCancel));\par ??        \}\par ??    \}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; OnShowMessage(&lt;span style="color: blue"&gt;string&lt;/span&gt; message)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;var&lt;/span&gt; messageVisualizer
= Resolve&amp;lt;&lt;span style="color: #2b91af"&gt;IMessageVisualizer&lt;/span&gt;&amp;gt;();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (messageVisualizer
!= &lt;span style="color: blue"&gt;null&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result = &lt;span style="color: #2b91af"&gt;Enum&lt;/span&gt;.GetName(&lt;span style="color: blue"&gt;typeof&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;MessageResult&lt;/span&gt;),
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
messageVisualizer.Show(Title, message, &lt;span style="color: #2b91af"&gt;MessageButtons&lt;/span&gt;.YesNoCancel));
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Notice that I test to ensure the visualizer is available – remember that services
can be replaced or removed – I might do this in my unit tests for example (I actually
mock the interface rather than replace it, but you get the point – test to make sure
it’s there).
&lt;/p&gt;
&lt;p&gt;
We want to see the result, so I take the resulting enum and convert it to a string
and assign it to a new &lt;strong&gt;Result&lt;/strong&gt; property on the ViewModel.&amp;nbsp; This,
like &lt;strong&gt;Title&lt;/strong&gt;, is just a field-backed string that does a property change
notification.
&lt;/p&gt;
&lt;h4&gt;IErrorVisualizer
&lt;/h4&gt;
&lt;p&gt;
The error visualizer is for cases where you want to display an error dialog to the
user with a title and message.&amp;nbsp; The default implementation displays a &lt;strong&gt;MessageBox &lt;/strong&gt;with
an OK button
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIntroducingthemessagevisualizers_8347/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIntroducingthemessagevisualizers_8347/image_thumb_1.png" width="391" height="183"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
It returns a boolean response indicating that the user clicked the OK button (versus
dismissing using the Close “X” button).&amp;nbsp;&amp;nbsp; It has a similar interface to
the message visualizer:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;}??\fs28     \cf3 private\cf0  \cf3 void\cf0  OnShowError(\cf3 string\cf0  errorMessage)\par ??    \{\par ??        \cf3 var\cf0  errorVisualizer = Resolve&amp;lt;\cf4 IErrorVisualizer\cf0 &amp;gt;();\par ??        \cf3 if\cf0  (errorVisualizer != \cf3 null\cf0 )\par ??        \{\par ??            Result = errorVisualizer.Show(Title, errorMessage).ToString();\par ??        \}\par ??    \}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; OnShowError(&lt;span style="color: blue"&gt;string&lt;/span&gt; errorMessage)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;var&lt;/span&gt; errorVisualizer
= Resolve&amp;lt;&lt;span style="color: #2b91af"&gt;IErrorVisualizer&lt;/span&gt;&amp;gt;();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (errorVisualizer
!= &lt;span style="color: blue"&gt;null&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result = errorVisualizer.Show(Title,
errorMessage).ToString();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
We will assign the boolean result to the string Result property as well.
&lt;/p&gt;
&lt;h4&gt;INotificationVisualizer
&lt;/h4&gt;
&lt;p&gt;
This visualizer is for cases where you are doing something in the ViewModel logic,
on the UI thread that takes a moment to process.&amp;nbsp; Sorting a list, or searching
an in-memory list might be an example.&amp;nbsp; True long-running operations should always
be on a separate thread and use properties or the message mediator to coordinate with
the UI thread.&amp;nbsp; That said, there are times when you want to do the logic inline
with the request and you know it’s going to take a second or two to process it.&amp;nbsp;
Enter the &lt;strong&gt;INotificationVisualizer&lt;/strong&gt;.&amp;nbsp; It takes the same title
and message as it’s cousin visualizers but the default implementation does not use
them – instead, the default implementation simply changes the cursor to an hourglass
(the defacto standard for “please wait”).&amp;nbsp; This is a service that I often replace
with a custom visualzation – a progress bar, thumbar progress on Windows 7, or even
a dialog overlay.&amp;nbsp; Invoking it is simple:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;\red0\green128\blue0;}??\fs28     \cf3 private\cf0  \cf3 void\cf0  OnShowNotification(\cf3 string\cf0  message)\par ??    \{\par ??        \cf3 var\cf0  notifyVisual = Resolve&amp;lt;\cf4 INotificationVisualizer\cf0 &amp;gt;();\par ??        \cf3 if\cf0  (notifyVisual != \cf3 null\cf0 )\par ??        \{\par ??            \cf3 using\cf0  (notifyVisual.BeginWait(Title, message))\par ??            \{\par ??                \cf5 // Sleep for 2sec, pretending to work\par ??\cf0                 \cf4 Thread\cf0 .Sleep(2000);\par ??            \}\par ??        \}\par ??    \}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; OnShowNotification(&lt;span style="color: blue"&gt;string&lt;/span&gt; message)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;var&lt;/span&gt; notifyVisual
= Resolve&amp;lt;&lt;span style="color: #2b91af"&gt;INotificationVisualizer&lt;/span&gt;&amp;gt;();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (notifyVisual
!= &lt;span style="color: blue"&gt;null&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;using&lt;/span&gt; (notifyVisual.BeginWait(Title,
message))
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//
Sleep for 2sec, pretending to work&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;Thread&lt;/span&gt;.Sleep(2000);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
The &lt;strong&gt;BeginWait&lt;/strong&gt;() method kicks off the notification visual (hourglass
cursor in this case).&amp;nbsp; It returns a disposable object that you invoke Dispose
on to return to the normal cursor.&amp;nbsp; Again, let me stress this is not optimal
for a true long-running operation – this locks the UI up until the thread returns
so only use this for very short operations.
&lt;/p&gt;
&lt;h4&gt;Creating the View
&lt;/h4&gt;
&lt;p&gt;
The View for this application will be simple – let’s use an &lt;strong&gt;ItemsControl&lt;/strong&gt; to
generate a button for each of the exposed commands, two &lt;strong&gt;TextBoxes&lt;/strong&gt; to
hold the Title and Message, and then a &lt;strong&gt;TextBlock&lt;/strong&gt; for the result,
here’s what I want it to look like:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIntroducingthemessagevisualizers_8347/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMIntroducingthemessagevisualizers_8347/image_thumb_2.png" width="426" height="320"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
I’ll let you go through the XAML – it’s straightforward and should be pretty easy
to follow.&amp;nbsp; The only new thing might be that we’ll set focus to the first focusable
element using the &lt;strong&gt;FirstFocusedElement&lt;/strong&gt; markup extension:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green0\blue0;}??\fs28 \cf1 &amp;lt;\cf3 Window\cf4  x\cf1 :\cf4 Class\cf1 ="ServicesTest.Views.MainWindow"\par ??\cf0    \cf4  xmlns\cf1 ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"\par ??\cf0    \cf4  xmlns\cf1 :\cf4 x\cf1 ="http://schemas.microsoft.com/winfx/2006/xaml"\cf0  \par ??   \cf4  xmlns\cf1 :\cf4 julmar\cf1 ="http://www.julmar.com/wpfhelpers"\par ??\cf0    \cf4  xmlns\cf1 :\cf4 ViewModels\cf1 ="clr-namespace:ServicesTest.ViewModels"\cf0  \par ??   \cf4  Title\cf1 ="Notification Visualizer Test"\cf4  Height\cf1 ="300"\cf4  Width\cf1 ="400"\cf4  Background\cf1 ="LightYellow"\cf0  \par ??   \cf4  WindowStartupLocation\cf1 ="CenterScreen"\cf4  FocusManager.FocusedElement\cf1 ="\{\cf3 julmar\cf1 :\cf3 FirstFocusedElement\cf1 \}"\par ??\cf0    \cf4  DataContext\cf1 ="\{\cf3 julmar\cf1 :\cf3 ViewModelCreator\cf1  \{\cf3 x\cf1 :\cf3 Type\cf4  ViewModels\cf1 :\cf4 MainViewModel\cf1 \}\}"&amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 Grid\cf4  Margin\cf1 ="5"&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 Grid.RowDefinitions\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 RowDefinition\cf4  Height\cf1 ="Auto" /&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 RowDefinition\cf4  Height\cf1 ="Auto" /&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 RowDefinition\cf4  Height\cf1 ="Auto" /&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 RowDefinition\cf1  /&amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 Grid.RowDefinitions\cf1 &amp;gt;\par ??\cf3         \par ??        \cf1 &amp;lt;\cf3 Grid.ColumnDefinitions\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 ColumnDefinition\cf4  Width\cf1 ="Auto" /&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 ColumnDefinition\cf1  /&amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 Grid.ColumnDefinitions\cf1 &amp;gt;\par ??\cf3         \par ??        \cf1 &amp;lt;\cf3 Label\cf4  Grid.Column\cf1 ="0"\cf4  Grid.Row\cf1 ="0"\cf4  Content\cf1 ="Title:" /&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 TextBox\cf4  Grid.Column\cf1 ="1"\cf4  Grid.Row\cf1 ="0"\cf4  Margin\cf1 ="5,2"\cf4  Text\cf1 ="\{\cf3 Binding\cf4  Title\cf1 \}" /&amp;gt;\par ??\par ??\cf3         \cf1 &amp;lt;\cf3 Label\cf4  Grid.Column\cf1 ="0"\cf4  Grid.Row\cf1 ="1"\cf4  Content\cf1 ="Message:" /&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 TextBox\cf4  x\cf1 :\cf4 Name\cf1 ="tbMessage"\cf4  Grid.Column\cf1 ="1"\cf4  Grid.Row\cf1 ="1"\cf4  Margin\cf1 ="5,2" /&amp;gt;\par ??\par ??\cf3         \cf1 &amp;lt;\cf3 ItemsControl\cf4  Grid.Row\cf1 ="2"\cf4  Grid.ColumnSpan\cf1 ="2"\cf4  Margin\cf1 ="10"\par ??\cf0                      \cf4  ItemsSource\cf1 ="\{\cf3 Binding\cf4  VisualizationCommands\cf1 \}"&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 ItemsControl.ItemTemplate\cf1 &amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 DataTemplate\cf1 &amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 Button\cf4  Margin\cf1 ="5"\cf4  Content\cf1 ="\{\cf3 Binding\cf4  Title\cf1 \}"\cf4  Command\cf1 ="\{\cf3 Binding\cf4  Command\cf1 \}"\cf4  CommandParameter\cf1 ="\{\cf3 Binding\cf4  ElementName\cf1 =tbMessage,\cf4  Path\cf1 =Text\}" /&amp;gt;\par ??\cf3                 \cf1 &amp;lt;/\cf3 DataTemplate\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;/\cf3 ItemsControl.ItemTemplate\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 ItemsControl\cf1 &amp;gt;\par ??\cf3         \par ??        \cf1 &amp;lt;\cf3 TextBlock\cf4  FontSize\cf1 ="24pt"\cf4  Grid.ColumnSpan\cf1 ="2"\cf4  Grid.Row\cf1 ="3"\cf4  HorizontalAlignment\cf1 ="Center"\cf0  \par ??              \cf4  VerticalAlignment\cf1 ="Center"\cf4  Text\cf1 ="\{\cf3 Binding\cf4  Result\cf1 ,\cf4  FallbackValue\cf1 =None\}" /&amp;gt;\par ??\cf3         \par ??    \cf1 &amp;lt;/\cf3 Grid\cf1 &amp;gt;\par ??&amp;lt;/\cf3 Window\cf1 &amp;gt;\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Window&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Class&lt;/span&gt;&lt;span style="color: blue"&gt;="ServicesTest.Views.MainWindow"&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;julmar&lt;/span&gt;&lt;span style="color: blue"&gt;="http://www.julmar.com/wpfhelpers"&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;ViewModels&lt;/span&gt;&lt;span style="color: blue"&gt;="clr-namespace:ServicesTest.ViewModels"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red"&gt;Title&lt;/span&gt;&lt;span style="color: blue"&gt;="Notification
Visualizer Test"&lt;/span&gt;&lt;span style="color: red"&gt; Height&lt;/span&gt;&lt;span style="color: blue"&gt;="300"&lt;/span&gt;&lt;span style="color: red"&gt; Width&lt;/span&gt;&lt;span style="color: blue"&gt;="400"&lt;/span&gt;&lt;span style="color: red"&gt; Background&lt;/span&gt;&lt;span style="color: blue"&gt;="LightYellow"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red"&gt;WindowStartupLocation&lt;/span&gt;&lt;span style="color: blue"&gt;="CenterScreen"&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: red"&gt;&amp;nbsp;&amp;nbsp; FocusManager.FocusedElement&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;FirstFocusedElement&lt;/span&gt;&lt;span style="color: blue"&gt;}"&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red"&gt;DataContext&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;ViewModelCreator&lt;/span&gt;&lt;span style="color: blue"&gt; {&lt;/span&gt;&lt;span style="color: #a31515"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Type&lt;/span&gt;&lt;span style="color: red"&gt; ViewModels&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;MainViewModel&lt;/span&gt;&lt;span style="color: blue"&gt;}}"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: red"&gt; Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="5"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;RowDefinition&lt;/span&gt;&lt;span style="color: red"&gt; Height&lt;/span&gt;&lt;span style="color: blue"&gt;="Auto"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;RowDefinition&lt;/span&gt;&lt;span style="color: red"&gt; Height&lt;/span&gt;&lt;span style="color: blue"&gt;="Auto"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;RowDefinition&lt;/span&gt;&lt;span style="color: red"&gt; Height&lt;/span&gt;&lt;span style="color: blue"&gt;="Auto"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;RowDefinition&lt;/span&gt;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color: red"&gt; Width&lt;/span&gt;&lt;span style="color: blue"&gt;="Auto"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Label&lt;/span&gt;&lt;span style="color: red"&gt; Grid.Column&lt;/span&gt;&lt;span style="color: blue"&gt;="0"&lt;/span&gt;&lt;span style="color: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="color: blue"&gt;="0"&lt;/span&gt;&lt;span style="color: red"&gt; Content&lt;/span&gt;&lt;span style="color: blue"&gt;="Title:"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: red"&gt; Grid.Column&lt;/span&gt;&lt;span style="color: blue"&gt;="1"&lt;/span&gt;&lt;span style="color: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="color: blue"&gt;="0"&lt;/span&gt;&lt;span style="color: red"&gt; Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="5,2"&lt;/span&gt;&lt;span style="color: red"&gt; Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Title&lt;/span&gt;&lt;span style="color: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Label&lt;/span&gt;&lt;span style="color: red"&gt; Grid.Column&lt;/span&gt;&lt;span style="color: blue"&gt;="0"&lt;/span&gt;&lt;span style="color: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="color: blue"&gt;="1"&lt;/span&gt;&lt;span style="color: red"&gt; Content&lt;/span&gt;&lt;span style="color: blue"&gt;="Message:"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="tbMessage"&lt;/span&gt;&lt;span style="color: red"&gt; Grid.Column&lt;/span&gt;&lt;span style="color: blue"&gt;="1"&lt;/span&gt;&lt;span style="color: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="color: blue"&gt;="1"&lt;/span&gt;&lt;span style="color: red"&gt; Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="5,2"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ItemsControl&lt;/span&gt;&lt;span style="color: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="color: blue"&gt;="2"&lt;/span&gt;&lt;span style="color: red"&gt; Grid.ColumnSpan&lt;/span&gt;&lt;span style="color: blue"&gt;="2"&lt;/span&gt;&lt;span style="color: red"&gt; Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="10"&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red"&gt;ItemsSource&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; VisualizationCommands&lt;/span&gt;&lt;span style="color: blue"&gt;}"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ItemsControl.ItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button&lt;/span&gt;&lt;span style="color: red"&gt; Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="5"&lt;/span&gt;&lt;span style="color: red"&gt; Content&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Title&lt;/span&gt;&lt;span style="color: blue"&gt;}"&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Command&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Command&lt;/span&gt;&lt;span style="color: blue"&gt;}"&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
CommandParameter&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; ElementName&lt;/span&gt;&lt;span style="color: blue"&gt;=tbMessage,&lt;/span&gt;&lt;span style="color: red"&gt; Path&lt;/span&gt;&lt;span style="color: blue"&gt;=Text}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ItemsControl.ItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ItemsControl&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: red"&gt; FontSize&lt;/span&gt;&lt;span style="color: blue"&gt;="24pt"&lt;/span&gt;&lt;span style="color: red"&gt; Grid.ColumnSpan&lt;/span&gt;&lt;span style="color: blue"&gt;="2"&lt;/span&gt;&lt;span style="color: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="color: blue"&gt;="3"&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Center" &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Center"&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Result&lt;/span&gt;&lt;span style="color: blue"&gt;,&lt;/span&gt;&lt;span style="color: red"&gt; FallbackValue&lt;/span&gt;&lt;span style="color: blue"&gt;=None}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Window&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
That should do it – if you’d like to just download the project and play with it, it’s
available here: &lt;a href="http://www.julmar.com/samples/VisulizerTest.zip" target="_blank"&gt;VisualizerTest.zip&lt;/a&gt;.&amp;nbsp;
In the next post we’ll take a look at the grand-daddy of the message visualizers in
the MVVM Helper toolkit: the &lt;strong&gt;IUIVisualizer&lt;/strong&gt;!
&lt;/p&gt;</description>
      <comments>http://www.julmar.com/blog/mark/CommentView,guid,88843fe1-6503-46de-9be7-51f507dd068e.aspx</comments>
      <category>.NET</category>
      <category>MVVM</category>
      <category>WPF</category>
    </item>
    <item>
      <trackback:ping>http://www.julmar.com/blog/mark/Trackback.aspx?guid=99559ede-2613-43f4-89a5-124081f24baa</trackback:ping>
      <pingback:server>http://www.julmar.com/blog/mark/pingback.aspx</pingback:server>
      <pingback:target>http://www.julmar.com/blog/mark/PermaLink,guid,99559ede-2613-43f4-89a5-124081f24baa.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.julmar.com/blog/mark/CommentView,guid,99559ede-2613-43f4-89a5-124081f24baa.aspx</wfw:comment>
      <wfw:commentRss>http://www.julmar.com/blog/mark/SyndicationService.asmx/GetEntryCommentsRss?guid=99559ede-2613-43f4-89a5-124081f24baa</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>MVVM: Binding RadioButton groups</title>
      <guid isPermaLink="false">http://www.julmar.com/blog/mark/PermaLink,guid,99559ede-2613-43f4-89a5-124081f24baa.aspx</guid>
      <link>http://www.julmar.com/blog/mark/2010/01/29/MVVMBindingRadioButtonGroups.aspx</link>
      <pubDate>Fri, 29 Jan 2010 18:41:42 GMT</pubDate>
      <description>&lt;p&gt;
A question I got recently was how to manage Radio Buttons with bindings – in this
instance, the sample code was trying to map a single value to a set of Radio Buttons
based on an enumeration set.&amp;nbsp; The original implementation was using a Value Converter
to compare the “bound” value with the enumeration value expected for that radio button
choice – if it was equal then the converter returned true, otherwise false.&amp;nbsp;
Something like this:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red163\green21\blue21;\red255\green255\blue255;\red0\green0\blue255;\red255\green0\blue0;\red0\green0\blue0;}??\fs28 \cf1                     \cf3 &amp;lt;\cf1 RadioButton\cf4  Content\cf3 ="Blue"\cf0  \par ??                                \cf4  IsChecked\cf3 ="\{\cf1 Binding\cf4  SelectedValue\cf3 ,\cf4  Converter\cf3 =\{\cf1 StaticResource\cf4  CheckValueAgainst\cf3 \},\cf4  ConverterParameter\cf3 =Blue"/&amp;gt;\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;RadioButton&lt;/span&gt;&lt;span style="COLOR: red"&gt; Content&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Blue"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;IsChecked&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; SelectedValue&lt;/span&gt;&lt;span style="COLOR: blue"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Converter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;={&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="COLOR: red"&gt; CheckValueAgainst&lt;/span&gt;&lt;span style="COLOR: blue"&gt;},&lt;/span&gt;&lt;span style="COLOR: red"&gt; ConverterParameter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=Blue"/&amp;gt;&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;RadioButton&lt;/span&gt;&lt;span style="COLOR: red"&gt; Content&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Red"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;IsChecked&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; SelectedValue&lt;/span&gt;&lt;span style="COLOR: blue"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Converter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;={&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="COLOR: red"&gt; CheckValueAgainst&lt;/span&gt;&lt;span style="COLOR: blue"&gt;},&lt;/span&gt;&lt;span style="COLOR: red"&gt; ConverterParameter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=Red"/&amp;gt;&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;RadioButton&lt;/span&gt;&lt;span style="COLOR: red"&gt; Content&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Yellow"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;IsChecked&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; SelectedValue&lt;/span&gt;&lt;span style="COLOR: blue"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Converter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;={&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="COLOR: red"&gt; CheckValueAgainst&lt;/span&gt;&lt;span style="COLOR: blue"&gt;},&lt;/span&gt;&lt;span style="COLOR: red"&gt; ConverterParameter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=Yellow"/&amp;gt;&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Initially this seemed to work, but as you changed the current enumeration value, the
radio buttons would “lose” the binding – and after a few times you would end up with
none of them selected.
&lt;/p&gt;
&lt;p&gt;
Ultimately, this problem is really an expected behavior from WPF – when a set of Radio
Buttons are placed together, they act as a &lt;em&gt;group&lt;/em&gt; – where only one is expected
to be checked and all the others are unchecked.&amp;nbsp; This happens because the selected
Radio Button itself tells the group to uncheck all the others.&amp;nbsp; This has the
effect of replacing the binding value for &lt;strong&gt;IsChecked&lt;/strong&gt; with a local
value of &lt;strong&gt;false&lt;/strong&gt;.&amp;nbsp; See the problem?&amp;nbsp; Eventually, all of the
buttons in the group have their value replaced and so we end up with all of them unchecked.&amp;nbsp;
The solution was very easy – put each one into a separate group by defining a unique &lt;strong&gt;GroupName&lt;/strong&gt; for
each Radio Button.&amp;nbsp; 
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red163\green21\blue21;\red255\green255\blue255;\red0\green0\blue255;\red255\green0\blue0;\red0\green0\blue0;}??\fs28 \cf1                     \cf3 &amp;lt;\cf1 RadioButton\cf4  Content\cf3 ="Blue"\cf0  \par ??                                \cf4  IsChecked\cf3 ="\{\cf1 Binding\cf4  SelectedValue\cf3 ,\cf4  Converter\cf3 =\{\cf1 StaticResource\cf4  CheckValueAgainst\cf3 \},\cf4  ConverterParameter\cf3 =Blue"/&amp;gt;\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;RadioButton&lt;/span&gt;&lt;span style="COLOR: red"&gt;&amp;nbsp;&lt;strong&gt;&lt;span style="COLOR: red"&gt;GroupName&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="gBlue"&lt;/span&gt;&lt;/strong&gt; Content&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Blue"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;IsChecked&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; SelectedValue&lt;/span&gt;&lt;span style="COLOR: blue"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Converter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;={&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="COLOR: red"&gt; CheckValueAgainst&lt;/span&gt;&lt;span style="COLOR: blue"&gt;},&lt;/span&gt;&lt;span style="COLOR: red"&gt; ConverterParameter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=Blue"/&amp;gt;&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;RadioButton&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;strong&gt;&lt;span style="COLOR: red"&gt;GroupName&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="gRed"&lt;/span&gt;&lt;/strong&gt; Content&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Red"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;IsChecked&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; SelectedValue&lt;/span&gt;&lt;span style="COLOR: blue"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Converter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;={&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="COLOR: red"&gt; CheckValueAgainst&lt;/span&gt;&lt;span style="COLOR: blue"&gt;},&lt;/span&gt;&lt;span style="COLOR: red"&gt; ConverterParameter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=Red"/&amp;gt;&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;RadioButton&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;strong&gt;&lt;span style="COLOR: red"&gt;GroupName&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="gYellow"&lt;/span&gt;&lt;/strong&gt; Content&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Yellow"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;IsChecked&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; SelectedValue&lt;/span&gt;&lt;span style="COLOR: blue"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Converter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;={&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="COLOR: red"&gt; CheckValueAgainst&lt;/span&gt;&lt;span style="COLOR: blue"&gt;},&lt;/span&gt;&lt;span style="COLOR: red"&gt; ConverterParameter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=Yellow"/&amp;gt;&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
This solves the problem and required no real code changes, but of course, I didn’t
want to stop there – I just had to whip up a quick MVVM version to show how I’d do
this if I were responsible for the application!
&lt;/p&gt;
&lt;h4&gt;Sample Application Description
&lt;/h4&gt;
&lt;p&gt;
Our goal will be to display a list of children and their details to track their favorite
games.&amp;nbsp; I started by sketching it out with SketchFlow to get a sense of what
I wanted to visually create:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMBindingRadioButtongroups_F849/image_4.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMBindingRadioButtongroups_F849/image_thumb_1.png" width=612 height=372&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
The top list is a &lt;strong&gt;ListBox&lt;/strong&gt;, showing each child and the bottom pane
shows the details.&amp;nbsp; Note the &lt;strong&gt;RadioButtons&lt;/strong&gt; used to represent
Gender and Favorite Game.&amp;nbsp; Our goal will be to use a &lt;strong&gt;ListBox&lt;/strong&gt; there
as well – showing the list of Radio Buttons and bound to a ViewModel collection of
data.&amp;nbsp; As a secondary goal, we want to separate the &lt;strong&gt;RadioButton&lt;/strong&gt; &lt;em&gt;value&lt;/em&gt; from
the &lt;em&gt;text displayed&lt;/em&gt;.&amp;nbsp; 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;font color=#ff0000&gt;&lt;em&gt;It turns out that anytime you need to display a list or sequence
of something, a ListBox (or ItemsControl if you don’t need the selection capability)
is almost always a good choice.&amp;nbsp; Let’s see if we can make it work here with the
MVVM pattern.&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Now that I have an idea of what I want to build, I created a blank Windows WPF application
and added the JulMar MVVM Helper library and created the directory structure I prefer
(&lt;strong&gt;Views&lt;/strong&gt;, &lt;strong&gt;ViewModels&lt;/strong&gt; and &lt;strong&gt;Dependencies&lt;/strong&gt;).&amp;nbsp;
I moved the Window1.xaml and corresponding code behind into the Views folder and renamed
it &lt;strong&gt;MainWindow.xaml&lt;/strong&gt;.&amp;nbsp; This also required I adjust &lt;strong&gt;App.xaml&lt;/strong&gt; to
point to the correct &lt;strong&gt;StartupUri&lt;/strong&gt; (Views\MainWindow.xaml).&amp;nbsp; As
a quick start you could also just use the JulMar MVVM project template and delete
the XAML and view models.&amp;nbsp; Here’s what I ended up with in the solution:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMBindingRadioButtongroups_F849/GamePrefSolution_2.jpg"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=GamePrefSolution border=0 alt=GamePrefSolution src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMBindingRadioButtongroups_F849/GamePrefSolution_thumb.jpg" width=226 height=244&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Now, we’re ready to begin our data modeling.&amp;nbsp; In this case, I don’t have a real
data model – I’m not going to store or manage any of the children in a persistent
way so I’m just going to define the View Model definitions for the children and collection.&amp;nbsp;
We’ll start with the child definition.&amp;nbsp; I created a class to manage the properties
of the child I want to display: Name, Dob, Gender, and FavoriteGame.&amp;nbsp; For the
Gender and Favorite Game, I will use &lt;strong&gt;Enums&lt;/strong&gt; to model those as a known
list.&amp;nbsp; I could have used a Boolean for Gender as well, but this serves my underlying
goal so we’ll go with an enumeration.&amp;nbsp; Here’s what I came up with:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs28 \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  Gender flag\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf4 public\cf0  \cf4 enum\cf0  \cf6 Gender\par ??\cf0 \{\par ??    Male, Female, Unknown\par ??\}\par ??\par ??\cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  Game types\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf4 public\cf0  \cf4 enum\cf0  \cf6 GameType\par ??\cf0 \{\par ??    Webkinz,\par ??    Playdoh,\par ??    PbsKids,\par ??    Wii\par ??\}\par ??\par ??\cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  ViewModel to represent a single child.\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf4 public\cf0  \cf4 class\cf0  \cf6 ChildViewModel\cf0  : \cf6 SimpleViewModel\par ??\cf0 \{\par ??\cf4     #region\cf0  Private Data\par ??    \cf4 private\cf0  \cf4 string\cf0  _name;\par ??    \cf4 private\cf0  \cf6 Gender\cf0  _gender;\par ??    \cf4 private\cf0  \cf6 DateTime\cf0  _dob;\par ??    \cf4 private\cf0  \cf6 GameType\cf0  _favoriteGame;\par ??\cf4     #endregion\par ??\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Name\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf4 public\cf0  \cf4 string\cf0  Name\par ??    \{\par ??        \cf4 get\cf0  \{ \cf4 return\cf0  _name; \}\par ??        \cf4 set\cf0  \{ _name = \cf4 value\cf0 ; OnPropertyChanged(\cf7 "Name"\cf0 ); \}\par ??    \}\par ??\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Gender of child\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf4 public\cf0  \cf6 Gender\cf0  Gender\par ??    \{\par ??        \cf4 get\cf0  \{ \cf4 return\cf0  _gender; \}\par ??        \cf4 set\cf0  \{ _gender = \cf4 value\cf0 ; OnPropertyChanged(\cf7 "Gender"\cf0 ); \}\par ??    \}\par ??\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Date of birth\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf4 public\cf0  \cf6 DateTime\cf0  Dob\par ??    \{\par ??        \cf4 get\cf0  \{ \cf4 return\cf0  _dob; \}\par ??        \cf4 set\cf0  \{ _dob = \cf4 value\cf0 ; OnPropertyChanged(\cf7 "Dob"\cf0 ); \}\par ??    \}\par ??\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Game they like to play\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf4 public\cf0  \cf6 GameType\cf0  FavoriteGame\par ??    \{\par ??        \cf4 get\cf0  \{ \cf4 return\cf0  _favoriteGame; \}\par ??        \cf4 set\cf0  \{ _favoriteGame = \cf4 value\cf0 ; OnPropertyChanged(\cf7 "FavoriteGame"\cf0 ); \}\par ??    \}\par ??\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Returns textual representation of child.\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;\par ??\cf0     \cf4 public\cf0  \cf4 override\cf0  \cf4 string\cf0  ToString()\par ??    \{\par ??        \cf4 return\cf0  \cf4 string\cf0 .Format(\cf7 "\{0\} is a \{1\}, was born on \{2\} and loves to play \{3\}"\cf0 , Name, Gender, Dob, FavoriteGame);\par ??    \}\par ??\}}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Gender flag&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;enum&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Gender&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Male, Female, Unknown
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Game types&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;enum&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GameType&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Webkinz,
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Playdoh,
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PbsKids,
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Wii
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; ViewModel to represent
a single child.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ChildViewModel&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;SimpleViewModel&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; _name;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Gender&lt;/span&gt; _gender;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DateTime&lt;/span&gt; _dob;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GameType&lt;/span&gt; _favoriteGame;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Name&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Name
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _name;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt; {
_name = &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;; OnPropertyChanged(&lt;span style="COLOR: #a31515"&gt;"Name",&lt;span style="COLOR: #a31515"&gt;"Details"&lt;/span&gt;&lt;/span&gt;);
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Gender
of child&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Gender&lt;/span&gt; Gender
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _gender;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt; {
_gender = &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;; OnPropertyChanged(&lt;span style="COLOR: #a31515"&gt;"Gender",&lt;span style="COLOR: #a31515"&gt;"Details"&lt;/span&gt;&lt;/span&gt;);
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Date
of birth&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DateTime&lt;/span&gt; Dob
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _dob;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt; {
_dob = &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;; OnPropertyChanged(&lt;span style="COLOR: #a31515"&gt;"Dob",&lt;span style="COLOR: #a31515"&gt;"Details"&lt;/span&gt;&lt;/span&gt;);
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Game
they like to play&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GameType&lt;/span&gt; FavoriteGame
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _favoriteGame;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt; {
_favoriteGame = &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;; OnPropertyChanged(&lt;span style="COLOR: #a31515"&gt;"FavoriteGame"&lt;/span&gt;,&lt;span style="COLOR: #a31515"&gt;"Details"&lt;/span&gt;);
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Returns
textual representation of child.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Details
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="COLOR: #a31515"&gt;"{0}
is a {1}, was born on {2:D} and loves to play {3}"&lt;/span&gt;,
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Name, Gender, Dob, FavoriteGame);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Pretty standard stuff – we have field backed properties and raise the &lt;strong&gt;PropertyChange&lt;/strong&gt; notification
on each one.&amp;nbsp; For this case I don’t think we’ll need any additional services
so I derive from the &lt;strong&gt;JulMar.Windows.Mvvm.SimpleViewModel&lt;/strong&gt; class which
just provides &lt;strong&gt;INotifyPropertyChanged&lt;/strong&gt; support.&amp;nbsp; The one extra
thing I’ve added here is a &lt;strong&gt;Details&lt;/strong&gt; property which is a concatenation
of all the other properties – we’ll use this to verify that the data binding is working
properly as a secondary display of the same data.&amp;nbsp; We need to be sure to include
that property invalidation when any of the other properties it depends on changes.&amp;nbsp;
The &lt;strong&gt;OnPropertyChanged &lt;/strong&gt;implementation allows you to pass multiple
strings for this very purpose.
&lt;/p&gt;
&lt;p&gt;
Moving on, I want to display the generated Enumerations above as a list, so we need
a way to encapsulate a value and the text used to represent the value together.&amp;nbsp;
If I were using .NET4 I could use the uber-cool new &lt;strong&gt;Tuple&amp;lt;K,V&amp;gt;&lt;/strong&gt; class
but I want to target .NET 3.5 here so we’ll define a new &lt;strong&gt;ValueAndText&lt;/strong&gt; class
to hold this:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;}??\fs28 \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  This class wraps a value and string together.\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??///\cf3  \cf1 &amp;lt;typeparam name="T"&amp;gt;\cf3 Type of value\cf1 &amp;lt;/typeparam&amp;gt;\par ??\cf4 public\cf0  \cf4 class\cf0  \cf6 EnumValue\cf0 &amp;lt;T&amp;gt;\par ??\{\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Value to bind to\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf4 public\cf0  T Value \{ \cf4 get\cf0 ; \cf4 private\cf0  \cf4 set\cf0 ; \}\par ??\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Text string to present\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf4 public\cf0  \cf4 string\cf0  Text \{ \cf4 get\cf0 ; \cf4 private\cf0  \cf4 set\cf0 ; \}\par ??\par ??    \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  Constructor\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;param name="value"&amp;gt;&amp;lt;/param&amp;gt;\par ??\cf0     \cf1 ///\cf3  \cf1 &amp;lt;param name="text"&amp;gt;&amp;lt;/param&amp;gt;\par ??\cf0     \cf4 public\cf0  EnumValue(T value, \cf4 string\cf0  text)\par ??    \{\par ??        Value = value;\par ??        Text = text;\par ??    \}\par ??\}\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; This class wraps a
value and string together.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;typeparam
name="T"&amp;gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;Type of value&lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/typeparam&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ValueAndText&lt;/span&gt;&amp;lt;T&amp;gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Value
to bind to&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; T Value { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Text
string to present&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Text
{ &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Constructor&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;param
name="value"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;param
name="text"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; ValueAndText(T value, &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; text)
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value = value;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Text = text;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Now, let’s turn to the actual glue – the MainViewModel that pulls it all together.&amp;nbsp; 
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;}??\fs28 \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  Main View Model that connects it all together.\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf4 public\cf0  \cf4 class\cf0  \cf6 MainViewModel\cf0  : \cf6 SimpleViewModel\par ??\cf0 \{\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Main View Model that
connects it all together.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;MainViewModel&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;SimpleViewModel&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
Let’s use a SimpleViewModel here as well.&amp;nbsp; The first property we need is a collection
for the children – we won’t be modifying the list (i.e. no adding or deleting) so
the backing storage can just be a &lt;strong&gt;List&amp;lt;T&amp;gt;&lt;/strong&gt;, as part of the constructor
we’ll populate it with some sample data:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red128\green128\blue128;\red0\green128\blue0;\red0\green0\blue255;\red43\green145\blue175;}??\fs28         \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  Collection of children\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 public\cf0  \cf6 IList\cf0 &amp;lt;\cf6 ChildViewModel\cf0 &amp;gt; Children \{ \cf5 get\cf0 ; \cf5 private\cf0  \cf5 set\cf0 ; \}\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Collection of children&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;ChildViewModel&lt;/span&gt;&amp;gt;
Children { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red128\green128\blue128;\red0\green128\blue0;\red0\green0\blue255;\red43\green145\blue175;\red163\green21\blue21;}??\fs28         \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  Constructor\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 public\cf0  MainViewModel()\par ??        \{\par ??            \cf4 // Fill with sample data.\par ??\cf0             Children = \cf5 new\cf0  \cf6 List\cf0 &amp;lt;\cf6 ChildViewModel\cf0 &amp;gt;\par ??               \{\par ??                   \cf5 new\cf0  \cf6 ChildViewModel\par ??\cf0                    \{\par ??                       Name = \cf7 "Jonathan"\cf0 ,\par ??                       Dob = \cf5 new\cf0  \cf6 DateTime\cf0 (2006, 3, 14),\par ??                       FavoriteGame = \cf6 GameType\cf0 .PbsKids,\par ??                       Gender = \cf6 Gender\cf0 .Male\par ??                   \},\par ??                   \cf5 new\cf0  \cf6 ChildViewModel\par ??\cf0                    \{\par ??                       Name = \cf7 "Amanda"\cf0 ,\par ??                       Dob = \cf5 new\cf0  \cf6 DateTime\cf0 (1999, 9, 8),\par ??                       FavoriteGame = \cf6 GameType\cf0 .Wii,\par ??                       Gender = \cf6 Gender\cf0 .Female\par ??                   \},\par ??                   \cf5 new\cf0  \cf6 ChildViewModel\par ??\cf0                    \{\par ??                       Name = \cf7 "Cassidy"\cf0 ,\par ??                       Dob = \cf5 new\cf0  \cf6 DateTime\cf0 (2004, 1, 14),\par ??                       FavoriteGame = \cf6 GameType\cf0 .Wii,\par ??                       Gender = \cf6 Gender\cf0 .Female\par ??                   \},\par ??                   \cf5 new\cf0  \cf6 ChildViewModel\par ??\cf0                    \{\par ??                       Name = \cf7 "Jack"\cf0 ,\par ??                       Dob = \cf5 new\cf0  \cf6 DateTime\cf0 (2001, 10, 24),\par ??                       FavoriteGame = \cf6 GameType\cf0 .Playdoh,\par ??                       Gender = \cf6 Gender\cf0 .Male\par ??                   \},\par ??               \};\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Constructor&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; MainViewModel()
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: green"&gt;&amp;nbsp;&amp;nbsp; // Fill with sample data.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp; Children = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;ChildViewModel&lt;/span&gt;&amp;gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ChildViewModel&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name = &lt;span style="COLOR: #a31515"&gt;"Jonathan"&lt;/span&gt;,
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dob = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DateTime&lt;/span&gt;(2006,
3, 14),
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FavoriteGame = &lt;span style="COLOR: #2b91af"&gt;GameType&lt;/span&gt;.PbsKids,
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Gender = &lt;span style="COLOR: #2b91af"&gt;Gender&lt;/span&gt;.Male
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; },
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp; };
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
Next, we want a single child to be the “current” selected child.&amp;nbsp; This is just
a property of type &lt;strong&gt;ChildViewModel&lt;/strong&gt; exposed by the parent view model.
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;\red128\green128\blue128;\red0\green128\blue0;\red163\green21\blue21;}??\fs28         \cf3 private\cf0  \cf4 ChildViewModel\cf0  _currentChild;\par ??\par ??        \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  The current (and only for now) child\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf3 public\cf0  \cf4 ChildViewModel\cf0  CurrentChild\par ??        \{\par ??            \cf3 get\cf0  \{ \cf3 return\cf0  _currentChild; \}\par ??            \cf3 set\par ??\cf0             \{\par ??                \cf3 if\cf0  (_currentChild != \cf3 value\cf0 )\par ??                \{\par ??                    \cf3 if\cf0  (_currentChild != \cf3 null\cf0 )\par ??                        _currentChild.PropertyChanged -= RaiseChildDetailsChange;\par ??                    _currentChild = \cf3 value\cf0 ;\par ??                    \cf3 if\cf0  (_currentChild != \cf3 null\cf0 )\par ??                        _currentChild.PropertyChanged += RaiseChildDetailsChange;\par ??                    OnPropertyChanged(\cf7 "CurrentChild"\cf0 );\par ??                \}\par ??            \}\par ??        \}\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ChildViewModel&lt;/span&gt; _currentChild;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; The current (and only
for now) child&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ChildViewModel&lt;/span&gt; CurrentChild
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp; get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _currentChild;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (_currentChild
!= &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _currentChild = &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OnPropertyChanged(&lt;span style="COLOR: #a31515"&gt;"CurrentChild"&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
We’ll also set the first child as the current child in the &lt;strong&gt;MainViewModel &lt;/strong&gt;constructor
after we populate the collection:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green128\blue0;}??\fs28             \cf3 // Set the first child as selected.\par ??\cf0             CurrentChild = Children[0];\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: green"&gt;// Set the first child as selected.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
CurrentChild = Children[0];
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
We want to have a bindable list of the gender values (and text) and a bindable list
of the game types.&amp;nbsp; In this case, let’s take advantage of the ability to bind
to any IEnumerable data source and just generate the list using the C# 2.0 iterator
support: 
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs28 \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  Gets the gender values\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf4 public\cf0  \cf6 IEnumerable\cf0 &amp;lt;\cf6 EnumValue\cf0 &amp;lt;\cf6 Gender\cf0 &amp;gt;&amp;gt; GenderValues\par ??\{\par ??    \cf4 get\par ??\cf0     \{\par ??        \cf4 yield\cf0  \cf4 return\cf0  \cf4 new\cf0  \cf6 EnumValue\cf0 &amp;lt;\cf6 Gender\cf0 &amp;gt;(\cf6 Gender\cf0 .Male, \cf7 "Boy"\cf0 );\par ??        \cf4 yield\cf0  \cf4 return\cf0  \cf4 new\cf0  \cf6 EnumValue\cf0 &amp;lt;\cf6 Gender\cf0 &amp;gt;(\cf6 Gender\cf0 .Female, \cf7 "Girl"\cf0 );\par ??    \}\par ??\}\par ??\par ??\cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  Gets the game types\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??\cf4 public\cf0  \cf6 IEnumerable\cf0 &amp;lt;\cf6 EnumValue\cf0 &amp;lt;\cf6 GameType\cf0 &amp;gt;&amp;gt; GameTypes\par ??\{\par ??    \cf4 get\par ??\cf0     \{\par ??        \cf4 yield\cf0  \cf4 return\cf0  \cf4 new\cf0  \cf6 EnumValue\cf0 &amp;lt;\cf6 GameType\cf0 &amp;gt;(\cf6 GameType\cf0 .Webkinz, \cf7 "WebKinz (http://www.webkinz.com)"\cf0 );\par ??        \cf4 yield\cf0  \cf4 return\cf0  \cf4 new\cf0  \cf6 EnumValue\cf0 &amp;lt;\cf6 GameType\cf0 &amp;gt;(\cf6 GameType\cf0 .Playdoh, \cf7 "Loves Playdoh"\cf0 );\par ??        \cf4 yield\cf0  \cf4 return\cf0  \cf4 new\cf0  \cf6 EnumValue\cf0 &amp;lt;\cf6 GameType\cf0 &amp;gt;(\cf6 GameType\cf0 .PbsKids, \cf7 "PBS Kids (http://www.pbskids.com)"\cf0 );\par ??        \cf4 yield\cf0  \cf4 return\cf0  \cf4 new\cf0  \cf6 EnumValue\cf0 &amp;lt;\cf6 GameType\cf0 &amp;gt;(\cf6 GameType\cf0 .Wii, \cf7 "Wii and other console"\cf0 );\par ??    \}\par ??\}\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Gets the gender values&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;ValueAndText&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;Gender&lt;/span&gt;&amp;gt;&amp;gt;
GenderValues
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;yield&lt;/span&gt; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ValueAndText&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;Gender&lt;/span&gt;&amp;gt;(&lt;span style="COLOR: #2b91af"&gt;Gender&lt;/span&gt;.Male, &lt;span style="COLOR: #a31515"&gt;"Boy"&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;yield&lt;/span&gt; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ValueAndText&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;Gender&lt;/span&gt;&amp;gt;(&lt;span style="COLOR: #2b91af"&gt;Gender&lt;/span&gt;.Female, &lt;span style="COLOR: #a31515"&gt;"Girl"&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Gets the game types&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;ValueAndText&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;GameType&lt;/span&gt;&amp;gt;&amp;gt;
GameTypes
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;yield&lt;/span&gt; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ValueAndText&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;GameType&lt;/span&gt;&amp;gt;(&lt;span style="COLOR: #2b91af"&gt;GameType&lt;/span&gt;.Webkinz, 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: #a31515"&gt;"WebKinz
(http://www.webkinz.com)"&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;yield&lt;/span&gt; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ValueAndText&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;GameType&lt;/span&gt;&amp;gt;(&lt;span style="COLOR: #2b91af"&gt;GameType&lt;/span&gt;.Playdoh, &lt;span style="COLOR: #a31515"&gt;"Loves
Playdoh"&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;yield&lt;/span&gt; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ValueAndText&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;GameType&lt;/span&gt;&amp;gt;(&lt;span style="COLOR: #2b91af"&gt;GameType&lt;/span&gt;.PbsKids, 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: #a31515"&gt;"PBS
Kids (http://www.pbskids.com)"&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;yield&lt;/span&gt; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ValueAndText&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;GameType&lt;/span&gt;&amp;gt;(&lt;span style="COLOR: #2b91af"&gt;GameType&lt;/span&gt;.Wii, &lt;span style="COLOR: #a31515"&gt;"Wii
and other console"&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
That should do it for our logic and data requirements, now let’s turn to the visualization
for it.&amp;nbsp; We have the following properties defined on the &lt;strong&gt;MainViewModel&lt;/strong&gt; to
drive the view:
&lt;/p&gt;
&lt;table border=1 cellspacing=0 cellpadding=2 width=615&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign=top width=200&gt;
&lt;strong&gt;Children&lt;/strong&gt;&lt;/td&gt;
&lt;td valign=top width=413&gt;
Collection of &lt;strong&gt;PersonViewModel&lt;/strong&gt; objects with child details.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=top width=200&gt;
&lt;strong&gt;CurrentChild&lt;/strong&gt;&lt;/td&gt;
&lt;td valign=top width=413&gt;
Current (selected) child&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=top width=200&gt;
&lt;strong&gt;GenderValues&lt;/strong&gt;&lt;/td&gt;
&lt;td valign=top width=413&gt;
Collection of &lt;strong&gt;ValueAndText&lt;/strong&gt; objects to select child gender&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=top width=200&gt;
&lt;strong&gt;GameTypes&lt;/strong&gt;&lt;/td&gt;
&lt;td valign=top width=413&gt;
Collection of &lt;strong&gt;ValueAndText&lt;/strong&gt; objects to select the favorite game&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;br&gt;
&lt;br&gt;
Using the SketchFlow prototype as an example, we’ll start with a &lt;strong&gt;DockPanel&lt;/strong&gt; as
the root element – locking a &lt;strong&gt;StatusBar&lt;/strong&gt; at the bottom, a &lt;strong&gt;ListBox&lt;/strong&gt; at
the top and a &lt;strong&gt;Border&lt;/strong&gt; (which will contain our details pane) as the
fill content.&amp;nbsp; We’ll use the JulMar &lt;strong&gt;ViewModelCreator&lt;/strong&gt; markup
extension to tie this to the &lt;strong&gt;MainViewModel&lt;/strong&gt;, and let’s push the initial
focus into the children &lt;strong&gt;ListBox&lt;/strong&gt; using the &lt;strong&gt;FocusManager.FocusedElement&lt;/strong&gt; attached
property on the window.
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green0\blue0;\red0\green128\blue0;}??\fs28 \cf1 &amp;lt;\cf3 Window\cf4  x\cf1 :\cf4 Class\cf1 ="RadioButtonBinding.Views.MainWindow"\par ??\cf0    \cf4  xmlns\cf1 ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"\par ??\cf0    \cf4  xmlns\cf1 :\cf4 x\cf1 ="http://schemas.microsoft.com/winfx/2006/xaml"\par ??\cf0    \cf4  xmlns\cf1 :\cf4 julmar\cf1 ="http://www.julmar.com/wpfhelpers"\cf0  \par ??   \cf4  xmlns\cf1 :\cf4 ViewModels\cf1 ="clr-namespace:RadioButtonBinding.ViewModels"\cf0  \par ??   \cf4  xmlns\cf1 :\cf4 Controls\cf1 ="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"\cf0  \par ??   \cf4  DataContext\cf1 ="\{\cf3 julmar\cf1 :\cf3 ViewModelCreator\cf1  \{\cf3 x\cf1 :\cf3 Type\cf4  ViewModels\cf1 :\cf4 MainViewModel\cf1 \}\}"\par ??\cf0    \cf4  FocusManager.FocusedElement\cf1 ="\{\cf3 Binding\cf4  ElementName\cf1 =lbChildren\}"\par ??\cf0    \cf4  Title\cf1 ="Game Preference Tracker"\cf4  Height\cf1 ="400"\cf4  Width\cf1 ="500"\cf4  Background\cf1 ="OldLace"&amp;gt;\par ??\par ??\cf3     \cf1 &amp;lt;\cf3 Window.Resources\cf1 &amp;gt;\par ??\cf3         \cf6 &amp;lt;!-- Simple style to present RadioButton controls as the ListBox elements.\par ??             The IsChecked state is bound to the selection state - make sure the ListBox uses\par ??             Single-Selection! --&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 Style\cf4  x\cf1 :\cf4 Key\cf1 ="radioListBox"\cf4  TargetType\cf1 ="ListBox"\cf4  BasedOn\cf1 ="\{\cf3 StaticResource\cf1  \{\cf3 x\cf1 :\cf3 Type\cf4  ListBox\cf1 \}\}"&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="BorderThickness"\cf4  Value\cf1 ="0" /&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="Margin"\cf4  Value\cf1 ="5" /&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="DisplayMemberPath"\cf4  Value\cf1 ="Text" /&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="SelectedValuePath"\cf4  Value\cf1 ="Value" /&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="Background"\cf4  Value\cf1 ="\{\cf3 x\cf1 :\cf3 Null\cf1 \}" /&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="ItemContainerStyle"&amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 Setter.Value\cf1 &amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 Style\cf4  TargetType\cf1 ="ListBoxItem"\cf4  BasedOn\cf1 ="\{\cf3 StaticResource\cf1  \{\cf3 x\cf1 :\cf3 Type\cf4  ListBoxItem\cf1 \}\}"&amp;gt;\par ??\cf3                         \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="Template"&amp;gt;\par ??\cf3                             \cf1 &amp;lt;\cf3 Setter.Value\cf1 &amp;gt;\par ??\cf3                                 \cf1 &amp;lt;\cf3 ControlTemplate\cf4  TargetType\cf1 ="ListBoxItem"&amp;gt;\par ??\cf3                                     \cf1 &amp;lt;\cf3 Border\cf4  Background\cf1 ="Transparent"&amp;gt;\par ??\cf3                                         \cf1 &amp;lt;\cf3 RadioButton\cf4  Focusable\cf1 ="False"\cf4  IsHitTestVisible\cf1 ="False"\cf4  IsChecked\cf1 ="\{\cf3 TemplateBinding\cf4  IsSelected\cf1 \}"&amp;gt;\par ??\cf3                                             \cf1 &amp;lt;\cf3 ContentPresenter\cf1  /&amp;gt;\par ??\cf3                                         \cf1 &amp;lt;/\cf3 RadioButton\cf1 &amp;gt;\par ??\cf3                                     \cf1 &amp;lt;/\cf3 Border\cf1 &amp;gt;\par ??\cf3                                 \cf1 &amp;lt;/\cf3 ControlTemplate\cf1 &amp;gt;\par ??\cf3                             \cf1 &amp;lt;/\cf3 Setter.Value\cf1 &amp;gt;\par ??\cf3                         \cf1 &amp;lt;/\cf3 Setter\cf1 &amp;gt;\par ??\cf3                     \cf1 &amp;lt;/\cf3 Style\cf1 &amp;gt;\par ??\cf3                 \cf1 &amp;lt;/\cf3 Setter.Value\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;/\cf3 Setter\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 Style\cf1 &amp;gt;\par ??\cf3     \cf1 &amp;lt;/\cf3 Window.Resources\cf1 &amp;gt;\par ??\cf3     \par ??    \cf1 &amp;lt;\cf3 DockPanel\cf1 &amp;gt;\par ??\par ??\cf3         \cf6 &amp;lt;!-- List of children we are tracking --&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 ListBox\cf4  x\cf1 :\cf4 Name\cf1 ="lbChildren"\cf4  DockPanel.Dock\cf1 ="Top"\cf4  ItemsSource\cf1 ="\{\cf3 Binding\cf4  Children\cf1 \}"\cf0  \par ??                \cf4  SelectedItem\cf1 ="\{\cf3 Binding\cf4  CurrentChild\cf1 ,\cf4  Mode\cf1 =TwoWay\}"\par ??\cf0                 \cf4  ScrollViewer.HorizontalScrollBarVisibility\cf1 ="Disabled"&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 ListBox.ItemsPanel\cf1 &amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 ItemsPanelTemplate\cf1 &amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 WrapPanel\cf1  /&amp;gt;\par ??\cf3                 \cf1 &amp;lt;/\cf3 ItemsPanelTemplate\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;/\cf3 ListBox.ItemsPanel\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 ListBox.ItemTemplate\cf1 &amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 DataTemplate\cf1 &amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 Border\cf4  BorderBrush\cf1 ="DarkBlue"\cf4  BorderThickness\cf1 ="2"\cf4  Background\cf1 ="SkyBlue"\cf4  CornerRadius\cf1 ="5"&amp;gt;\par ??\cf3                         \cf1 &amp;lt;\cf3 StackPanel\cf4  Margin\cf1 ="10"&amp;gt;\par ??\cf3                             \cf1 &amp;lt;\cf3 TextBlock\cf4  FontWeight\cf1 ="Bold"\cf4  FontSize\cf1 ="12pt"\cf4  Text\cf1 ="\{\cf3 Binding\cf4  Name\cf1 \}" /&amp;gt;\par ??\cf3                             \cf1 &amp;lt;\cf3 TextBlock\cf4  Text\cf1 ="\{\cf3 Binding\cf4  FavoriteGame\cf1 \}" /&amp;gt;\par ??\cf3                         \cf1 &amp;lt;/\cf3 StackPanel\cf1 &amp;gt;\par ??\cf3                     \cf1 &amp;lt;/\cf3 Border\cf1 &amp;gt;\par ??\cf3                 \cf1 &amp;lt;/\cf3 DataTemplate\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;/\cf3 ListBox.ItemTemplate\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 ListBox\cf1 &amp;gt;\par ??\par ??\cf3         \cf6 &amp;lt;!-- StatusBar just to make sure two-way binding is working properly --&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 StatusBar\cf4  DockPanel.Dock\cf1 ="Bottom"\cf4  BorderBrush\cf1 ="Black"\cf4  BorderThickness\cf1 ="0,1,0,0"&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 TextBlock\cf4  Text\cf1 ="\{\cf3 Binding\cf4  CurrentChild\cf1 .\cf4 Details\cf1 \}"\cf4  TextWrapping\cf1 ="Wrap" /&amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 StatusBar\cf1 &amp;gt;\par ??\par ??\cf3         \cf6 &amp;lt;!-- Details pane --&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 Border\cf4  Margin\cf1 ="5"\cf4  BorderBrush\cf1 ="LightGray"\cf4  BorderThickness\cf1 ="1"&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 Grid\cf1 &amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 Grid.Resources\cf1 &amp;gt;\par ??\cf3                     \cf6 &amp;lt;!-- Common style for header labels --&amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 Style\cf4  TargetType\cf1 ="Label"&amp;gt;\par ??\cf3                         \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="HorizontalAlignment"\cf4  Value\cf1 ="Right" /&amp;gt;\par ??\cf3                         \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="VerticalAlignment"\cf4  Value\cf1 ="Top" /&amp;gt;\par ??\cf3                         \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="FontWeight"\cf4  Value\cf1 ="Bold" /&amp;gt;\par ??\cf3                         \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="Margin"\cf4  Value\cf1 ="5,2" /&amp;gt;\par ??\cf3                     \cf1 &amp;lt;/\cf3 Style\cf1 &amp;gt;\par ??\cf3                 \cf1 &amp;lt;/\cf3 Grid.Resources\cf1 &amp;gt;\par ??\par ??\cf3                 \cf1 &amp;lt;\cf3 Grid.ColumnDefinitions\cf1 &amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 ColumnDefinition\cf4  Width\cf1 ="Auto" /&amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 ColumnDefinition\cf1  /&amp;gt;\par ??\cf3                 \cf1 &amp;lt;/\cf3 Grid.ColumnDefinitions\cf1 &amp;gt;\par ??\par ??\cf3                 \cf1 &amp;lt;\cf3 Grid.RowDefinitions\cf1 &amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 RowDefinition\cf4  Height\cf1 ="Auto" /&amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 RowDefinition\cf4  Height\cf1 ="Auto" /&amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 RowDefinition\cf4  Height\cf1 ="Auto" /&amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 RowDefinition\cf4  Height\cf1 ="Auto" /&amp;gt;\par ??\cf3                 \cf1 &amp;lt;/\cf3 Grid.RowDefinitions\cf1 &amp;gt;\par ??\par ??\cf3                 \cf1 &amp;lt;\cf3 Label\cf4  Grid.Row\cf1 ="0"\cf4  Content\cf1 ="Name:" /&amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 TextBox\cf4  Grid.Row\cf1 ="0"\cf4  Grid.Column\cf1 ="1"\cf4  Margin\cf1 ="5,2"\cf4  Text\cf1 ="\{\cf3 Binding\cf4  CurrentChild\cf1 .\cf4 Name\cf1 \}" /&amp;gt;\par ??\par ??\cf3                 \cf1 &amp;lt;\cf3 Label\cf4  Grid.Row\cf1 ="1"\cf4  Content\cf1 ="Gender:" /&amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 ListBox\cf4  Grid.Row\cf1 ="1"\cf4  Grid.Column\cf1 ="1"\cf4  Style\cf1 ="\{\cf3 StaticResource\cf4  radioListBox\cf1 \}"\cf0  \par ??                        \cf4  ItemsSource\cf1 ="\{\cf3 Binding\cf4  GenderValues\cf1 \}"\cf4  SelectedValue\cf1 ="\{\cf3 Binding\cf4  CurrentChild\cf1 .\cf4 Gender\cf1 \}" /&amp;gt;\par ??\par ??\cf3                 \cf1 &amp;lt;\cf3 Label\cf4  Grid.Row\cf1 ="2"\cf4  Content\cf1 ="Date Of Birth:" /&amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 Controls\cf1 :\cf3 DatePicker\cf4  Grid.Row\cf1 ="2"\cf4  Grid.Column\cf1 ="1"\cf4  Margin\cf1 ="5,2"\cf4  SelectedDate\cf1 ="\{\cf3 Binding\cf4  CurrentChild\cf1 .\cf4 Dob\cf1 \}"\cf0  \cf1  /&amp;gt;\par ??\par ??\cf3                 \cf1 &amp;lt;\cf3 Label\cf4  Grid.Row\cf1 ="3"\cf4  Content\cf1 ="Favorite Game:" /&amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 ListBox\cf4  Grid.Row\cf1 ="3"\cf4  Grid.Column\cf1 ="1"\cf4  Style\cf1 ="\{\cf3 StaticResource\cf4  radioListBox\cf1 \}"\cf0  \par ??                        \cf4  ItemsSource\cf1 ="\{\cf3 Binding\cf4  GameTypes\cf1 \}"\cf4  SelectedValue\cf1 ="\{\cf3 Binding\cf4  CurrentChild\cf1 .\cf4 FavoriteGame\cf1 \}" /&amp;gt;\par ??\cf3             \cf1 &amp;lt;/\cf3 Grid\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 Border\cf1 &amp;gt;\par ??\cf3     \cf1 &amp;lt;/\cf3 DockPanel\cf1 &amp;gt;\par ??&amp;lt;/\cf3 Window\cf1 &amp;gt;\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Window&lt;/span&gt;&lt;span style="COLOR: red"&gt; x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;Class&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="RadioButtonBinding.Views.MainWindow"&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;julmar&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://www.julmar.com/wpfhelpers"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;ViewModels&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="clr-namespace:RadioButtonBinding.ViewModels"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;Controls&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;DataContext&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ViewModelCreator&lt;/span&gt;&lt;span style="COLOR: blue"&gt; {&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Type&lt;/span&gt;&lt;span style="COLOR: red"&gt; ViewModels&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;MainViewModel&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}}"&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;FocusManager.FocusedElement&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; ElementName&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=lbChildren}"&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;Title&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Game
Preference Tracker"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Height&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="400"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Width&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="500"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Background&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="OldLace"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;DockPanel&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: green"&gt;&amp;lt;!--
List of children we are tracking --&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ListBox&lt;/span&gt;&lt;span style="COLOR: red"&gt; x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;Name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="lbChildren"&lt;/span&gt;&lt;span style="COLOR: red"&gt; DockPanel.Dock&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Top"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ListBox&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: green"&gt;&amp;lt;!--
StatusBar just to make sure two-way binding is working properly --&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StatusBar&lt;/span&gt;&lt;span style="COLOR: red"&gt; DockPanel.Dock&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Bottom"&lt;/span&gt;&lt;span style="COLOR: red"&gt; BorderBrush&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Black"&lt;/span&gt;&lt;span style="COLOR: red"&gt; BorderThickness&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="0,1,0,0"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StatusBar&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: green"&gt;&amp;lt;!--
Details pane --&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Border&lt;/span&gt;&lt;span style="COLOR: red"&gt; Margin&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="5"&lt;/span&gt;&lt;span style="COLOR: red"&gt; BorderBrush&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="LightGray"&lt;/span&gt;&lt;span style="COLOR: red"&gt; BorderThickness&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Border&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;DockPanel&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Window&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Next, let’s fill in the top ListBox details.&amp;nbsp; We need to populate it with the
list of children – this is the Children property off our ViewModel, so we’ll bind
the &lt;strong&gt;ItemsSource&lt;/strong&gt; property to that collection.&amp;nbsp; Next, we’ll set
the &lt;strong&gt;SelectedItem&lt;/strong&gt; to the &lt;strong&gt;CurrentChild&lt;/strong&gt; property –
making sure to use a two-way binding:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red163\green21\blue21;\red255\green255\blue255;\red0\green0\blue255;\red255\green0\blue0;\red0\green0\blue0;}??\fs28 \cf1         \cf3 &amp;lt;\cf1 ListBox\cf4  x\cf3 :\cf4 Name\cf3 ="lbChildren"\cf4  DockPanel.Dock\cf3 ="Top"\cf4  ItemsSource\cf3 ="\{\cf1 Binding\cf4  Children\cf3 \}"\cf0  \par ??                \cf4  SelectedItem\cf3 ="\{\cf1 Binding\cf4  CurrentChild\cf3 ,\cf4  Mode\cf3 =TwoWay\}"\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ListBox&lt;/span&gt;&lt;span style="COLOR: red"&gt; x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;Name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="lbChildren"&lt;/span&gt;&lt;span style="COLOR: red"&gt; DockPanel.Dock&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Top"&lt;/span&gt;&lt;span style="COLOR: red"&gt; ItemsSource&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; Children&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;SelectedItem&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; CurrentChild&lt;/span&gt;&lt;span style="COLOR: blue"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt; Mode&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=TwoWay}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
This will generate a list of items, but won’t have any decent visualization – so we’ll
use a &lt;strong&gt;DataTemplate&lt;/strong&gt; to give us a basic visual, at the same time, let’s
replace the default panel with a &lt;strong&gt;WrapPanel&lt;/strong&gt; so it looks more like
our SketchFlow:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green0\blue0;}??\fs28 \cf1 &amp;lt;\cf3 ListBox\cf4  x\cf1 :\cf4 Name\cf1 ="lbChildren"\cf4  DockPanel.Dock\cf1 ="Top"\cf4  ItemsSource\cf1 ="\{\cf3 Binding\cf4  Children\cf1 \}"\cf0  \par ??        \cf4  SelectedItem\cf1 ="\{\cf3 Binding\cf4  CurrentChild\cf1 ,\cf4  Mode\cf1 =TwoWay\}"\par ??\cf0         \cf4  ScrollViewer.HorizontalScrollBarVisibility\cf1 ="Disabled"&amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 ListBox.ItemsPanel\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 ItemsPanelTemplate\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 WrapPanel\cf1  /&amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 ItemsPanelTemplate\cf1 &amp;gt;\par ??\cf3     \cf1 &amp;lt;/\cf3 ListBox.ItemsPanel\cf1 &amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 ListBox.ItemTemplate\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 DataTemplate\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 Border\cf4  BorderBrush\cf1 ="DarkBlue"\cf4  BorderThickness\cf1 ="2"\cf4  Background\cf1 ="SkyBlue"\cf4  CornerRadius\cf1 ="5"&amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 StackPanel\cf4  Margin\cf1 ="10"&amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 TextBlock\cf4  FontWeight\cf1 ="Bold"\cf4  FontSize\cf1 ="12pt"\cf4  Text\cf1 ="\{\cf3 Binding\cf4  Name\cf1 \}" /&amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 TextBlock\cf4  Text\cf1 ="\{\cf3 Binding\cf4  FavoriteGame\cf1 \}" /&amp;gt;\par ??\cf3                 \cf1 &amp;lt;/\cf3 StackPanel\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;/\cf3 Border\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 DataTemplate\cf1 &amp;gt;\par ??\cf3     \cf1 &amp;lt;/\cf3 ListBox.ItemTemplate\cf1 &amp;gt;\par ??&amp;lt;/\cf3 ListBox\cf1 &amp;gt;\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ListBox&lt;/span&gt;&lt;span style="COLOR: red"&gt; x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;Name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="lbChildren"&lt;/span&gt;&lt;span style="COLOR: red"&gt; DockPanel.Dock&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Top"&lt;/span&gt;&lt;span style="COLOR: red"&gt; ItemsSource&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; Children&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;SelectedItem&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; CurrentChild&lt;/span&gt;&lt;span style="COLOR: blue"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt; Mode&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=TwoWay}"&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;ScrollViewer.HorizontalScrollBarVisibility&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Disabled"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ListBox.ItemsPanel&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ItemsPanelTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;WrapPanel&lt;/span&gt;&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ItemsPanelTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ListBox.ItemsPanel&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Border&lt;/span&gt;&lt;span style="COLOR: red"&gt; BorderBrush&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="DarkBlue"&lt;/span&gt;&lt;span style="COLOR: red"&gt; BorderThickness&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="2"&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Background&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="SkyBlue"&lt;/span&gt;&lt;span style="COLOR: red"&gt; CornerRadius&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="5"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="COLOR: red"&gt; Margin&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="10"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="COLOR: red"&gt; FontWeight&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Bold"&lt;/span&gt;&lt;span style="COLOR: red"&gt; FontSize&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="12pt"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Text&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; Name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="COLOR: red"&gt; Text&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; FavoriteGame&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Border&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ListBox&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Now, let’s turn our attention to displaying the current child details.&amp;nbsp; Remember
the properties we created on the &lt;strong&gt;ChildViewModel&lt;/strong&gt;:
&lt;/p&gt;
&lt;table border=1 cellspacing=0 cellpadding=2 width=607&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign=top width=99&gt;
&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;
&lt;td valign=top width=506&gt;
Their name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=top width=99&gt;
&lt;strong&gt;Gender&lt;/strong&gt;&lt;/td&gt;
&lt;td valign=top width=506&gt;
Their gender – Male/Female&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=top width=99&gt;
&lt;strong&gt;Dob&lt;/strong&gt;&lt;/td&gt;
&lt;td valign=top width=506&gt;
The date of birth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=top width=99&gt;
&lt;strong&gt;Details&lt;/strong&gt;&lt;/td&gt;
&lt;td valign=top width=506&gt;
The string with all the details for this child.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;br&gt;
So let’s first use the details – we can bind a &lt;strong&gt;TextBlock&lt;/strong&gt; in the &lt;strong&gt;StatusBar&lt;/strong&gt; to
the &lt;strong&gt;CurrentChild.Details&lt;/strong&gt; property to display the selected child details:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green128\blue0;\red255\green255\blue255;\red0\green0\blue255;\red163\green21\blue21;\red255\green0\blue0;}??\fs28 \cf1 &amp;lt;!-- StatusBar just to make sure two-way binding is working properly --&amp;gt;\par ??\cf3 &amp;lt;\cf4 StatusBar\cf5  DockPanel.Dock\cf3 ="Bottom"\cf5  BorderBrush\cf3 ="Black"\cf5  BorderThickness\cf3 ="0,1,0,0"&amp;gt;\par ??\cf4     \cf3 &amp;lt;\cf4 TextBlock\cf5  Text\cf3 ="\{\cf4 Binding\cf5  CurrentChild\cf3 .\cf5 Details\cf3 \}"\cf5  TextWrapping\cf3 ="Wrap" /&amp;gt;\par ??&amp;lt;/\cf4 StatusBar\cf3 &amp;gt;\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: green"&gt;&amp;lt;!-- StatusBar just to make sure two-way binding is
working properly --&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StatusBar&lt;/span&gt;&lt;span style="COLOR: red"&gt; DockPanel.Dock&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Bottom"&lt;/span&gt;&lt;span style="COLOR: red"&gt; BorderBrush&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Black"&lt;/span&gt;&lt;span style="COLOR: red"&gt; BorderThickness&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="0,1,0,0"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="COLOR: red"&gt; Text&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; CurrentChild&lt;/span&gt;&lt;span style="COLOR: blue"&gt;.&lt;/span&gt;&lt;span style="COLOR: red"&gt;Details&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"&lt;/span&gt;&lt;span style="COLOR: red"&gt; TextWrapping&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Wrap"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StatusBar&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Now, let’s turn our attention to the details – we’ll use a Grid to lay it out within
the Border, the Name and Date Of Birth are pretty easy to just drop in a set of Labels
and TextBox/DatePicker – we’ll need the WPF Toolkit for this.&amp;nbsp; We’ll drop in
two ListBox elements for the Radio Button list.
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue0;}??\fs28 \cf1 &amp;lt;\cf3 Border\cf4  Margin\cf1 ="5"\cf4  BorderBrush\cf1 ="LightGray"\cf4  BorderThickness\cf1 ="1"&amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 Grid\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 Grid.Resources\cf1 &amp;gt;\par ??\cf3             \cf5 &amp;lt;!-- Common style for header labels --&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 Style\cf4  TargetType\cf1 ="Label"&amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="HorizontalAlignment"\cf4  Value\cf1 ="Right" /&amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="VerticalAlignment"\cf4  Value\cf1 ="Top" /&amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="FontWeight"\cf4  Value\cf1 ="Bold" /&amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="Margin"\cf4  Value\cf1 ="5,2" /&amp;gt;\par ??\cf3             \cf1 &amp;lt;/\cf3 Style\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 Grid.Resources\cf1 &amp;gt;\par ??\par ??\cf3         \cf1 &amp;lt;\cf3 Grid.ColumnDefinitions\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 ColumnDefinition\cf4  Width\cf1 ="Auto" /&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 ColumnDefinition\cf1  /&amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 Grid.ColumnDefinitions\cf1 &amp;gt;\par ??\par ??\cf3         \cf1 &amp;lt;\cf3 Grid.RowDefinitions\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 RowDefinition\cf4  Height\cf1 ="Auto" /&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 RowDefinition\cf4  Height\cf1 ="Auto" /&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 RowDefinition\cf4  Height\cf1 ="Auto" /&amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 RowDefinition\cf4  Height\cf1 ="Auto" /&amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 Grid.RowDefinitions\cf1 &amp;gt;\par ??\par ??\cf3         \cf1 &amp;lt;\cf3 Label\cf4  Grid.Row\cf1 ="0"\cf4  Content\cf1 ="Name:" /&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 TextBox\cf4  Grid.Row\cf1 ="0"\cf4  Grid.Column\cf1 ="1"\cf4  Margin\cf1 ="5,2"\cf4  Text\cf1 ="\{\cf3 Binding\cf4  CurrentChild\cf1 .\cf4 Name\cf1 \}" /&amp;gt;\par ??\par ??\cf3         \cf1 &amp;lt;\cf3 Label\cf4  Grid.Row\cf1 ="1"\cf4  Content\cf1 ="Gender:" /&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 ListBox\cf4  Grid.Row\cf1 ="1"\cf4  Grid.Column\cf1 ="1"\cf4  Style\cf1 ="\{\cf3 StaticResource\cf4  radioListBox\cf1 \}"\cf0  \par ??                \cf4  ItemsSource\cf1 ="\{\cf3 Binding\cf4  GenderValues\cf1 \}"\cf4  SelectedValue\cf1 ="\{\cf3 Binding\cf4  CurrentChild\cf1 .\cf4 Gender\cf1 \}" /&amp;gt;\par ??\par ??\cf3         \cf1 &amp;lt;\cf3 Label\cf4  Grid.Row\cf1 ="2"\cf4  Content\cf1 ="Date Of Birth:" /&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 Controls\cf1 :\cf3 DatePicker\cf4  Grid.Row\cf1 ="2"\cf4  Grid.Column\cf1 ="1"\cf4  Margin\cf1 ="5,2"\cf4  SelectedDate\cf1 ="\{\cf3 Binding\cf4  CurrentChild\cf1 .\cf4 Dob\cf1 \}"\cf0  \cf1  /&amp;gt;\par ??\par ??\cf3         \cf1 &amp;lt;\cf3 Label\cf4  Grid.Row\cf1 ="3"\cf4  Content\cf1 ="Favorite Game:" /&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 ListBox\cf4  Grid.Row\cf1 ="3"\cf4  Grid.Column\cf1 ="1"\cf4  Style\cf1 ="\{\cf3 StaticResource\cf4  radioListBox\cf1 \}"\cf0  \par ??                \cf4  ItemsSource\cf1 ="\{\cf3 Binding\cf4  GameTypes\cf1 \}"\cf4  SelectedValue\cf1 ="\{\cf3 Binding\cf4  CurrentChild\cf1 .\cf4 FavoriteGame\cf1 \}" /&amp;gt;\par ??\cf3     \cf1 &amp;lt;/\cf3 Grid\cf1 &amp;gt;\par ??&amp;lt;/\cf3 Border\cf1 &amp;gt;\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Border&lt;/span&gt;&lt;span style="COLOR: red"&gt; Margin&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="5"&lt;/span&gt;&lt;span style="COLOR: red"&gt; BorderBrush&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="LightGray"&lt;/span&gt;&lt;span style="COLOR: red"&gt; BorderThickness&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Grid.Resources&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: green"&gt;&amp;lt;!--
Common style for header labels --&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Style&lt;/span&gt;&lt;span style="COLOR: red"&gt; TargetType&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Label"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="COLOR: red"&gt; Property&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="HorizontalAlignment"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Right"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="COLOR: red"&gt; Property&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="VerticalAlignment"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Top"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="COLOR: red"&gt; Property&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="FontWeight"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Bold"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="COLOR: red"&gt; Property&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Margin"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="5,2"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Style&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Grid.Resources&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="COLOR: red"&gt; Width&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Auto"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;RowDefinition&lt;/span&gt;&lt;span style="COLOR: red"&gt; Height&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Auto"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;RowDefinition&lt;/span&gt;&lt;span style="COLOR: red"&gt; Height&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Auto"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;RowDefinition&lt;/span&gt;&lt;span style="COLOR: red"&gt; Height&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Auto"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;RowDefinition&lt;/span&gt;&lt;span style="COLOR: red"&gt; Height&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Auto"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Label&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="0"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Content&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Name:"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="0"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Column&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Margin&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="5,2"&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Text&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; CurrentChild&lt;/span&gt;&lt;span style="COLOR: blue"&gt;.&lt;/span&gt;&lt;span style="COLOR: red"&gt;Name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Label&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Content&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Gender:"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ListBox&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Column&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Label&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="2"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Content&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Date
Of Birth:" /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Controls&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;DatePicker&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="2"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Column&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Margin&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="5,2"&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
SelectedDate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; CurrentChild&lt;/span&gt;&lt;span style="COLOR: blue"&gt;.&lt;/span&gt;&lt;span style="COLOR: red"&gt;Dob&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"&lt;/span&gt; &lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Label&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="3"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Content&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Favorite
Game:" /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ListBox&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="3"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Column&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Border&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Let’s focus on the Gender list first – the same concepts will apply to the game list.&amp;nbsp;
We have an &lt;strong&gt;IEnumerable&lt;/strong&gt; list of &lt;strong&gt;ValueAndText&lt;/strong&gt; objects
– each object has a Value property (corresponding to the underlying &lt;strong&gt;enum&lt;/strong&gt; value
tracked in the &lt;strong&gt;ChildViewModel&lt;/strong&gt;) and a Text property which is what
we want displayed in the &lt;strong&gt;RadioButton&lt;/strong&gt; choice.&amp;nbsp; First, let’s set
it up so we get a list of &lt;strong&gt;RadioButtons&lt;/strong&gt; – we can do this by changing
the &lt;strong&gt;ControlTemplate&lt;/strong&gt; for each item in the list itself – that is, change
the &lt;strong&gt;ListBoxItem&lt;/strong&gt; control template.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
As a bit of background, anytime you add an element to an &lt;strong&gt;ItemsControl&lt;/strong&gt; (&lt;strong&gt;ListBox&lt;/strong&gt;, &lt;strong&gt;ComboBox&lt;/strong&gt;, &lt;strong&gt;TreeView&lt;/strong&gt;, &lt;strong&gt;Menu&lt;/strong&gt;,
etc.) a special wrapper is internally created around your data to provide the special
UI properties necessary to drive the functionality – things like focus, selection,
mouse-over, etc. are all provided by this wrapper.&amp;nbsp; In the case of the &lt;strong&gt;ListBox&lt;/strong&gt;,
the created wrapper is a &lt;strong&gt;ListBoxItem&lt;/strong&gt; class and we can control it’s
properties by overriding the &lt;strong&gt;ItemContainerStyle&lt;/strong&gt; on the &lt;strong&gt;ListBox&lt;/strong&gt; itself.&amp;nbsp;
So, to start off, we’ll create a new &lt;strong&gt;Style&lt;/strong&gt; for the &lt;strong&gt;ListBox&lt;/strong&gt;,
set some basic properties and then override the &lt;strong&gt;ListBoxItem&lt;/strong&gt; style
inside that:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;}??\fs28 \cf1 &amp;lt;\cf3 Style\cf4  x\cf1 :\cf4 Key\cf1 ="radioListBox"\cf4  TargetType\cf1 ="ListBox"\cf4  BasedOn\cf1 ="\{\cf3 StaticResource\cf1  \{\cf3 x\cf1 :\cf3 Type\cf4  ListBox\cf1 \}\}"&amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="BorderThickness"\cf4  Value\cf1 ="0" /&amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="Margin"\cf4  Value\cf1 ="5" /&amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="DisplayMemberPath"\cf4  Value\cf1 ="Text" /&amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="SelectedValuePath"\cf4  Value\cf1 ="Value" /&amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="Background"\cf4  Value\cf1 ="\{\cf3 x\cf1 :\cf3 Null\cf1 \}" /&amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="ItemContainerStyle"&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 Setter.Value\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 Style\cf4  TargetType\cf1 ="ListBoxItem"\cf4  BasedOn\cf1 ="\{\cf3 StaticResource\cf1  \{\cf3 x\cf1 :\cf3 Type\cf4  ListBoxItem\cf1 \}\}"&amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="Template"&amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 Setter.Value\cf1 &amp;gt;\par ??\cf3                         \cf1 &amp;lt;\cf3 ControlTemplate\cf4  TargetType\cf1 ="ListBoxItem"&amp;gt;\par ??\cf3                             \cf1 &amp;lt;\cf3 Border\cf4  Background\cf1 ="Transparent"&amp;gt;\par ??\cf3                                 \cf1 &amp;lt;\cf3 RadioButton\cf4  Focusable\cf1 ="False"\cf4  IsHitTestVisible\cf1 ="False"\cf4  IsChecked\cf1 ="\{\cf3 TemplateBinding\cf4  IsSelected\cf1 \}"&amp;gt;\par ??\cf3                                     \cf1 &amp;lt;\cf3 ContentPresenter\cf1  /&amp;gt;\par ??\cf3                                 \cf1 &amp;lt;/\cf3 RadioButton\cf1 &amp;gt;\par ??\cf3                             \cf1 &amp;lt;/\cf3 Border\cf1 &amp;gt;\par ??\cf3                         \cf1 &amp;lt;/\cf3 ControlTemplate\cf1 &amp;gt;\par ??\cf3                     \cf1 &amp;lt;/\cf3 Setter.Value\cf1 &amp;gt;\par ??\cf3                 \cf1 &amp;lt;/\cf3 Setter\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;/\cf3 Style\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 Setter.Value\cf1 &amp;gt;\par ??\cf3     \cf1 &amp;lt;/\cf3 Setter\cf1 &amp;gt;\par ??&amp;lt;/\cf3 Style\cf1 &amp;gt;\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Style&lt;/span&gt;&lt;span style="COLOR: red"&gt; x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;Key&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="radioListBox"&lt;/span&gt;&lt;span style="COLOR: red"&gt; TargetType&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ListBox"&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BasedOn&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="COLOR: blue"&gt; {&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Type&lt;/span&gt;&lt;span style="COLOR: red"&gt; ListBox&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}}"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="COLOR: red"&gt; Property&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="BorderThickness"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="0"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="COLOR: red"&gt; Property&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Margin"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="5"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="COLOR: red"&gt; Property&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Background"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Null&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="COLOR: red"&gt; Property&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ItemContainerStyle"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter.Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Style&lt;/span&gt;&lt;span style="COLOR: red"&gt; TargetType&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ListBoxItem"&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
BasedOn&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="COLOR: blue"&gt; {&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Type&lt;/span&gt;&lt;span style="COLOR: red"&gt; ListBoxItem&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}}"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Style&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter.Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Style&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Since this is going to list a group of radio buttons, we’ll drop the border off the &lt;strong&gt;ListBox&lt;/strong&gt; and
the &lt;strong&gt;Background&lt;/strong&gt; color as well so that our parent’s background shows
through.&amp;nbsp; We’ll throw a &lt;strong&gt;Margin&lt;/strong&gt; on there to give it a little
spacing. Next, to change the visualization of the &lt;strong&gt;ListBoxItem&lt;/strong&gt;, we’ll
override it’s &lt;strong&gt;ControlTemplate&lt;/strong&gt; (the thing that generates the visual
tree for the item).&amp;nbsp; This, like all Controls in WPF, is done by overriding the &lt;strong&gt;Template&lt;/strong&gt; property.
What we want is put a Radio Button in there:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;}??\fs28 \cf1 &amp;lt;\cf3 Style\cf4  TargetType\cf1 ="ListBoxItem"\cf4  BasedOn\cf1 ="\{\cf3 StaticResource\cf1  \{\cf3 x\cf1 :\cf3 Type\cf4  ListBoxItem\cf1 \}\}"&amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="Template"&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 Setter.Value\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 ControlTemplate\cf4  TargetType\cf1 ="ListBoxItem"&amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 Border\cf4  Background\cf1 ="Transparent"&amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 RadioButton\cf4  Focusable\cf1 ="False"\cf4  IsHitTestVisible\cf1 ="False"\cf4  IsChecked\cf1 ="\{\cf3 TemplateBinding\cf4  IsSelected\cf1 \}"&amp;gt;\par ??\cf3                         \cf1 &amp;lt;\cf3 ContentPresenter\cf1  /&amp;gt;\par ??\cf3                     \cf1 &amp;lt;/\cf3 RadioButton\cf1 &amp;gt;\par ??\cf3                 \cf1 &amp;lt;/\cf3 Border\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;/\cf3 ControlTemplate\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 Setter.Value\cf1 &amp;gt;\par ??\cf3     \cf1 &amp;lt;/\cf3 Setter\cf1 &amp;gt;\par ??&amp;lt;/\cf3 Style\cf1 &amp;gt;\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Style&lt;/span&gt;&lt;span style="COLOR: red"&gt; TargetType&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ListBoxItem"&lt;/span&gt;&lt;span style="COLOR: red"&gt; BasedOn&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="COLOR: blue"&gt; {&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Type&lt;/span&gt;&lt;span style="COLOR: red"&gt; ListBoxItem&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}}"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="COLOR: red"&gt; Property&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Template"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter.Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ControlTemplate&lt;/span&gt;&lt;span style="COLOR: red"&gt; TargetType&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ListBoxItem"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;RadioButton&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;IsChecked&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TemplateBinding&lt;/span&gt;&lt;span style="COLOR: red"&gt; IsSelected&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ContentPresenter&lt;/span&gt;&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;RadioButton&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ControlTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter.Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Style&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
In order to get the &lt;strong&gt;IsChecked&lt;/strong&gt; state properly setup, we’ll bind it
to the&lt;strong&gt; ListBoxItem.IsSelected&lt;/strong&gt; property – so if the item is selected
according to the ListBox, then the Radio Button will be checked.&amp;nbsp; We also drop
a &lt;strong&gt;ContentPresenter &lt;/strong&gt;into the &lt;strong&gt;RadioButton &lt;/strong&gt;so it displays
whatever the data bound value is – this will provide for any &lt;strong&gt;DataTemplate &lt;/strong&gt;visualization
if one is present.&amp;nbsp; This will achieve the visualization we desire, but it won’t
work properly as we interact with it.&amp;nbsp; The problem is that the Radio button will
override this state when it is clicked – exactly the problem we had originally!
&lt;/p&gt;
&lt;p&gt;
To fix this, let’s make the radio button invisible to the mouse and keyboard.. we
can do this by setting the &lt;strong&gt;Focusable &lt;/strong&gt;and &lt;strong&gt;IsHitTestable &lt;/strong&gt;properties
to false – however this makes them non-interactive and now we can’t select the ListBoxItem
with the mouse.. so, let’s wrap it in something that is selectable – anything should
work, so we’ll just throw it into a Grid.&amp;nbsp; Set the Grid.Background to transparent
so you can click on it and we end up with:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;}??\fs28 \cf1 &amp;lt;\cf3 Style\cf4  TargetType\cf1 ="ListBoxItem"\cf4  BasedOn\cf1 ="\{\cf3 StaticResource\cf1  \{\cf3 x\cf1 :\cf3 Type\cf4  ListBoxItem\cf1 \}\}"&amp;gt;\par ??\cf3     \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="Template"&amp;gt;\par ??\cf3         \cf1 &amp;lt;\cf3 Setter.Value\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;\cf3 ControlTemplate\cf4  TargetType\cf1 ="ListBoxItem"&amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 Grid\cf4  Background\cf1 ="Transparent"&amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 RadioButton\cf4  Focusable\cf1 ="False"\cf4  IsHitTestVisible\cf1 ="False"\cf4  IsChecked\cf1 ="\{\cf3 TemplateBinding\cf4  IsSelected\cf1 \}"&amp;gt;\par ??\cf3                         \cf1 &amp;lt;\cf3 ContentPresenter\cf1  /&amp;gt;\par ??\cf3                     \cf1 &amp;lt;/\cf3 RadioButton\cf1 &amp;gt;\par ??\cf3                 \cf1 &amp;lt;/\cf3 Grid\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;/\cf3 ControlTemplate\cf1 &amp;gt;\par ??\cf3         \cf1 &amp;lt;/\cf3 Setter.Value\cf1 &amp;gt;\par ??\cf3     \cf1 &amp;lt;/\cf3 Setter\cf1 &amp;gt;\par ??&amp;lt;/\cf3 Style\cf1 &amp;gt;\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Style&lt;/span&gt;&lt;span style="COLOR: red"&gt; TargetType&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ListBoxItem"&lt;/span&gt;&lt;span style="COLOR: red"&gt; BasedOn&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="COLOR: blue"&gt; {&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Type&lt;/span&gt;&lt;span style="COLOR: red"&gt; ListBoxItem&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}}"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="COLOR: red"&gt; Property&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Template"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter.Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ControlTemplate&lt;/span&gt;&lt;span style="COLOR: red"&gt; TargetType&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ListBoxItem"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="COLOR: red"&gt; Background&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Transparent"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;RadioButton&lt;/span&gt;&lt;span style="COLOR: red"&gt; Focusable&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="False"&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
IsHitTestVisible&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="False"&lt;/span&gt;&lt;span style="COLOR: red"&gt; IsChecked&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TemplateBinding&lt;/span&gt;&lt;span style="COLOR: red"&gt; IsSelected&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ContentPresenter&lt;/span&gt;&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;RadioButton&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ControlTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter.Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Style&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
This does exactly what we want – clicking on the radio button changes the selection
in the &lt;strong&gt;ListBox&lt;/strong&gt; and, in turn, checks or unchecks the radio button
in question.&amp;nbsp; Now, let’s wire it up to our data – remember we have a Value and
Text.&amp;nbsp; We want to bind to the Value but display the Text.&amp;nbsp; It turns out
the &lt;strong&gt;ListBox&lt;/strong&gt; already has this feature backed in – there is a &lt;strong&gt;SelectedItem&lt;/strong&gt; property
we normally use, but there is also a &lt;strong&gt;SelectedValue&lt;/strong&gt; property that
makes the distinction between the item in the collection and the value used to select
it.&amp;nbsp; There is also a &lt;strong&gt;DisplayMemberPath&lt;/strong&gt; and &lt;strong&gt;SelectedValuePath&lt;/strong&gt; property
used for data binding purposes when generating the content from an &lt;strong&gt;ItemsSource&lt;/strong&gt; supplied
value.&amp;nbsp; Pulling these things together we can do this:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green0\blue0;}??\fs28 \cf1 &amp;lt;\cf3 ListBox\cf4  Grid.Row\cf1 ="1"\cf4  Grid.Column\cf1 ="1"\cf4  Style\cf1 ="\{\cf3 StaticResource\cf4  radioListBox\cf1 \}"\cf0  \par ??        \cf4  ItemsSource\cf1 ="\{\cf3 Binding\cf4  GenderValues\cf1 \}"\cf4  SelectedValue\cf1 ="\{\cf3 Binding\cf4  CurrentChild\cf1 .\cf4 Gender\cf1 \}" /&amp;gt;\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ListBox&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Column&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Style&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="COLOR: red"&gt; radioListBox&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DisplayMemberPath&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Text&lt;/span&gt;&lt;span style="COLOR: blue"&gt;"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectedValuePath&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;ItemsSource&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; GenderValues&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectedValue&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; CurrentChild&lt;/span&gt;&lt;span style="COLOR: blue"&gt;.&lt;/span&gt;&lt;span style="COLOR: red"&gt;Gender&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Testing this, it works perfectly!&amp;nbsp; Since the &lt;strong&gt;DisplayMemberPath/SelectedValuePath&lt;/strong&gt; are
the same for the two lists, we can move that to our radioListBox style, leaving us
with the two &lt;strong&gt;ListBox&lt;/strong&gt; definitions being:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green0\blue0;}??\fs28 \cf1 &amp;lt;\cf3 ListBox\cf4  Grid.Row\cf1 ="1"\cf4  Grid.Column\cf1 ="1"\cf4  Style\cf1 ="\{\cf3 StaticResource\cf4  radioListBox\cf1 \}"\cf0  \par ??\cf4  ItemsSource\cf1 ="\{\cf3 Binding\cf4  GenderValues\cf1 \}"\cf4  SelectedValue\cf1 ="\{\cf3 Binding\cf4  CurrentChild\cf1 .\cf4 Gender\cf1 \}" /&amp;gt;\par ??\par ??&amp;lt;\cf3 Label\cf4  Grid.Row\cf1 ="2"\cf4  Content\cf1 ="Date Of Birth:" /&amp;gt;\par ??&amp;lt;\cf3 Controls\cf1 :\cf3 DatePicker\cf4  Grid.Row\cf1 ="2"\cf4  Grid.Column\cf1 ="1"\cf4  Margin\cf1 ="5,2"\cf4  SelectedDate\cf1 ="\{\cf3 Binding\cf4  CurrentChild\cf1 .\cf4 Dob\cf1 \}"\cf0  \cf1  /&amp;gt;\par ??\par ??&amp;lt;\cf3 Label\cf4  Grid.Row\cf1 ="3"\cf4  Content\cf1 ="Favorite Game:" /&amp;gt;\par ??&amp;lt;\cf3 ListBox\cf4  Grid.Row\cf1 ="3"\cf4  Grid.Column\cf1 ="1"\cf4  Style\cf1 ="\{\cf3 StaticResource\cf4  radioListBox\cf1 \}"\cf0  \par ??        \cf4  ItemsSource\cf1 ="\{\cf3 Binding\cf4  GameTypes\cf1 \}"\cf4  SelectedValue\cf1 ="\{\cf3 Binding\cf4  CurrentChild\cf1 .\cf4 FavoriteGame\cf1 \}" /&amp;gt;\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ListBox&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Column&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Style&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="COLOR: red"&gt; radioListBox&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ItemsSource&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; GenderValues&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectedValue&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; CurrentChild&lt;/span&gt;&lt;span style="COLOR: blue"&gt;.&lt;/span&gt;&lt;span style="COLOR: red"&gt;Gender&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;...&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ListBox&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="3"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Column&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Style&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="COLOR: red"&gt; radioListBox&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;ItemsSource&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; GameTypes&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectedValue&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; CurrentChild&lt;/span&gt;&lt;span style="COLOR: blue"&gt;.&lt;/span&gt;&lt;span style="COLOR: red"&gt;FavoriteGame&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
And the completed application looks like:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMBindingRadioButtongroups_F849/image_8.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMBindingRadioButtongroups_F849/image_thumb_3.png" width=478 height=383&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
You can download the completed project here: &lt;a href="http://www.julmar.com/samples/RadioButtonBinding.zip" target=_blank&gt;RadioButtonBinding
Test&lt;/a&gt;
&lt;/p&gt;</description>
      <comments>http://www.julmar.com/blog/mark/CommentView,guid,99559ede-2613-43f4-89a5-124081f24baa.aspx</comments>
      <category>.NET</category>
      <category>MVVM</category>
      <category>WPF</category>
    </item>
    <item>
      <trackback:ping>http://www.julmar.com/blog/mark/Trackback.aspx?guid=9250b94b-00c5-4e83-86ea-31359f1e4170</trackback:ping>
      <pingback:server>http://www.julmar.com/blog/mark/pingback.aspx</pingback:server>
      <pingback:target>http://www.julmar.com/blog/mark/PermaLink,guid,9250b94b-00c5-4e83-86ea-31359f1e4170.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.julmar.com/blog/mark/CommentView,guid,9250b94b-00c5-4e83-86ea-31359f1e4170.aspx</wfw:comment>
      <wfw:commentRss>http://www.julmar.com/blog/mark/SyndicationService.asmx/GetEntryCommentsRss?guid=9250b94b-00c5-4e83-86ea-31359f1e4170</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The main project I’ve been working on the past few months has been a rRNA sequencing
application.  It’s a joint project involving Microsoft Research and the University
of Texas in Austin.  The goal being to produce lightning fast visualizations
(nucleotide, 2D and 3D) with very large (100,000 sequence) data sets on WPF. 
It’s been a big learning experience for me in many ways because the traditional mechanisms
for dealing with things in WPF just flat out fail when we load big datasets and start
scrolling them around.  So, we’ve had to invent data virtualization schemes,
our own UI virtualization for scrolling, several custom controls and a variety of
other elements to pull it off so far.  rCAT 4.0 (coming in March) is even more
ambitious with editing support for the sequences!
</p>
        <p>
All that said, our current effort is now online with full source code – it’s interesting
stuff to browse through even if you aren’t into molecular biology – check it out at <a href="http://rcat.codeplex.com/" target="_blank">http://rcat.codeplex.com/</a></p>
        <p>
Here’s a nice screen shot showing some of the elements – dockable tabs and sidebar
items, birds-eye viewer, taxonomy viewer and custom colorization of nucelotide data. 
And it, of course, is all MVVM.  Fun stuff!
</p>
        <p>
          <a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/rCAT2.0isonline3.0iscoming_D2A1/CATUI.Overview.Shrink_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CATUI.Overview.Shrink" border="0" alt="CATUI.Overview.Shrink" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/rCAT2.0isonline3.0iscoming_D2A1/CATUI.Overview.Shrink_thumb.png" width="654" height="392" />
          </a>
        </p>
      </body>
      <title>rCAT 2.0 is online, 3.0 is coming</title>
      <guid isPermaLink="false">http://www.julmar.com/blog/mark/PermaLink,guid,9250b94b-00c5-4e83-86ea-31359f1e4170.aspx</guid>
      <link>http://www.julmar.com/blog/mark/2010/01/28/rCAT20IsOnline30IsComing.aspx</link>
      <pubDate>Thu, 28 Jan 2010 20:58:46 GMT</pubDate>
      <description>&lt;p&gt;
The main project I’ve been working on the past few months has been a rRNA sequencing
application.&amp;nbsp; It’s a joint project involving Microsoft Research and the University
of Texas in Austin.&amp;nbsp; The goal being to produce lightning fast visualizations
(nucleotide, 2D and 3D) with very large (100,000 sequence) data sets on WPF.&amp;nbsp;
It’s been a big learning experience for me in many ways because the traditional mechanisms
for dealing with things in WPF just flat out fail when we load big datasets and start
scrolling them around.&amp;nbsp; So, we’ve had to invent data virtualization schemes,
our own UI virtualization for scrolling, several custom controls and a variety of
other elements to pull it off so far.&amp;nbsp; rCAT 4.0 (coming in March) is even more
ambitious with editing support for the sequences!
&lt;/p&gt;
&lt;p&gt;
All that said, our current effort is now online with full source code – it’s interesting
stuff to browse through even if you aren’t into molecular biology – check it out at &lt;a href="http://rcat.codeplex.com/" target="_blank"&gt;http://rcat.codeplex.com/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Here’s a nice screen shot showing some of the elements – dockable tabs and sidebar
items, birds-eye viewer, taxonomy viewer and custom colorization of nucelotide data.&amp;nbsp;
And it, of course, is all MVVM.&amp;nbsp; Fun stuff!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/rCAT2.0isonline3.0iscoming_D2A1/CATUI.Overview.Shrink_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CATUI.Overview.Shrink" border="0" alt="CATUI.Overview.Shrink" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/rCAT2.0isonline3.0iscoming_D2A1/CATUI.Overview.Shrink_thumb.png" width="654" height="392"&gt;&lt;/a&gt;
&lt;/p&gt;</description>
      <comments>http://www.julmar.com/blog/mark/CommentView,guid,9250b94b-00c5-4e83-86ea-31359f1e4170.aspx</comments>
      <category>.NET</category>
      <category>MVVM</category>
      <category>WPF</category>
    </item>
    <item>
      <trackback:ping>http://www.julmar.com/blog/mark/Trackback.aspx?guid=276acdbc-7308-416c-a4ca-b75e43ac54bd</trackback:ping>
      <pingback:server>http://www.julmar.com/blog/mark/pingback.aspx</pingback:server>
      <pingback:target>http://www.julmar.com/blog/mark/PermaLink,guid,276acdbc-7308-416c-a4ca-b75e43ac54bd.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.julmar.com/blog/mark/CommentView,guid,276acdbc-7308-416c-a4ca-b75e43ac54bd.aspx</wfw:comment>
      <wfw:commentRss>http://www.julmar.com/blog/mark/SyndicationService.asmx/GetEntryCommentsRss?guid=276acdbc-7308-416c-a4ca-b75e43ac54bd</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>MVVM: Rename TreeView nodes</title>
      <guid isPermaLink="false">http://www.julmar.com/blog/mark/PermaLink,guid,276acdbc-7308-416c-a4ca-b75e43ac54bd.aspx</guid>
      <link>http://www.julmar.com/blog/mark/2010/01/28/MVVMRenameTreeViewNodes.aspx</link>
      <pubDate>Thu, 28 Jan 2010 17:13:52 GMT</pubDate>
      <description>&lt;p&gt;
I know I said I was going to cover some services next, but I got a request last night
to show how to rename TreeView nodes (ala Explorer) using the MVVM pattern in WPF.&amp;nbsp;
The solution is quite easy and elegant and I thought I’d share it here.
&lt;/p&gt;
&lt;p&gt;
First, the idea is we want to be able to double-click on the text portion of the &lt;strong&gt;TreeViewItem&lt;/strong&gt; and
have it allow us to type in a new name, replacing the current text.&amp;nbsp; This involves
changing the visual template out (from a &lt;strong&gt;TextBlock&lt;/strong&gt; to a &lt;strong&gt;TextBox&lt;/strong&gt;)
and then detecting that the edit is complete.
&lt;/p&gt;
&lt;p&gt;
I started with the &lt;a href="http://www.julmar.com/blog/mark/2010/01/20/MVVMHelpersProjectTemplate.aspx" target="_blank"&gt;MVVM
project template&lt;/a&gt;, creating the default File Explorer view.&amp;nbsp; The &lt;strong&gt;TreeView&lt;/strong&gt; on
the left is displaying folders – so I opened the &lt;strong&gt;DirectoryViewModel.cs&lt;/strong&gt; that
drives the data.
&lt;/p&gt;
&lt;p&gt;
First, let’s add a property to indicate whether we are in “editing” mode or not.&amp;nbsp;
This is a simple field-backed property that raises the PropertyChange notification:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red128\green128\blue128;\red0\green128\blue0;\red0\green0\blue255;\red163\green21\blue21;}??\fs28         \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  True/False whether we are changing the name of the directory\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 public\cf0  \cf5 bool\cf0  IsEditingName\par ??        \{\par ??            \cf5 get\cf0  \{ \cf5 return\cf0  _isEditingName; \}\par ??            \cf5 set\cf0  \{ _isEditingName = \cf5 value\cf0 ; OnPropertyChanged(\cf6 "IsEditingName"\cf0 ); \}\par ??        \}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; True/False whether
we are changing the name of the directory&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;bool&lt;/span&gt; IsEditingName
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp; get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _isEditingName;
}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;set&lt;/span&gt; { _isEditingName = &lt;span style="color: blue"&gt;value&lt;/span&gt;;
OnPropertyChanged(&lt;span style="color: #a31515"&gt;"IsEditingName"&lt;/span&gt;); }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
I also added the private field (_isEditingName) into the class.&amp;nbsp; Next, locate
the &lt;strong&gt;Name&lt;/strong&gt; property that is being used to display the name.&amp;nbsp; Here
we need to add a setter that renames the directory.&amp;nbsp; We want it to be robust,
so we do some upfront checks and make sure to catch any I/O exceptions that occur:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red128\green128\blue128;\red0\green128\blue0;\red0\green0\blue255;\red43\green145\blue175;\red163\green21\blue21;}??\fs28         \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  Name of the directory\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 public\cf0  \cf5 string\cf0  Name\par ??        \{\par ??            \cf5 get\cf0  \{ \cf5 return\cf0  _data.Name; \}\par ??\par ??            \cf4 // Code to rename directory\par ??\cf0             \cf5 set\par ??\cf0             \{\par ??                \cf5 string\cf0  newValue = \cf5 value\cf0 ;\par ??                \cf5 if\cf0  (!\cf5 string\cf0 .IsNullOrEmpty(newValue))\par ??                \{\par ??                    \cf4 // Remove any trailing backslash.\par ??\cf0                     \cf5 string\cf0  fullName = _data.FullName.TrimEnd(\cf6 Path\cf0 .DirectorySeparatorChar);\par ??\par ??                    \cf4 // Determine the new directory name\par ??\cf0                     \cf5 string\cf0  directoryPath = fullName.Substring(0, fullName.Length - _data.Name.Length);\par ??                    \cf5 if\cf0  (!\cf5 string\cf0 .IsNullOrEmpty(directoryPath) &amp;amp;&amp;amp; directoryPath != fullName)\par ??                    \{\par ??                        \cf5 string\cf0  newFullName = \cf6 Path\cf0 .Combine(directoryPath, newValue);\par ??                        \cf5 try\par ??\cf0                         \{\par ??                            _data.MoveTo(newFullName);\par ??                        \}\par ??                        \cf5 catch\cf0  (\cf6 IOException\cf0  ex)\par ??                        \{\par ??                            \cf5 var\cf0  errorVisualizer = Resolve&amp;lt;\cf6 IErrorVisualizer\cf0 &amp;gt;();\par ??                            \cf5 if\cf0  (errorVisualizer != \cf5 null\cf0 )\par ??                            \{\par ??                                errorVisualizer.Show(\cf7 "Cannot rename directory"\cf0 , ex.Message);\par ??                            \}\par ??                        \}\par ??                    \}\par ??                \}\par ??\par ??                \cf4 // Tell WPF the name has changed.  Note if the same control is being used to display vs. edit then the\par ??\cf0                 \cf4 // binding will need to force WPF3x to re-read the property value.  This is done by using a RefreshValueConverter; \par ??\cf0                 \cf4 // under .NET4 this won't be necessary.\par ??\cf0                 OnPropertyChanged(\cf7 "Name"\cf0 );\par ??\par ??                \cf4 // Flip off the editing bit\par ??\cf0                 IsEditingName = \cf5 false\cf0 ;\par ??            \}\par ??        \}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Name of the directory&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; Name
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp; get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _data.Name;
}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// Code to rename directory&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;set&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;string&lt;/span&gt; newValue = &lt;span style="color: blue"&gt;value&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (!&lt;span style="color: blue"&gt;string&lt;/span&gt;.IsNullOrEmpty(newValue))
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// Remove
any trailing backslash.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;string&lt;/span&gt; fullName
= _data.FullName.TrimEnd(&lt;span style="color: #2b91af"&gt;Path&lt;/span&gt;.DirectorySeparatorChar);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// Determine
the new directory name&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;string&lt;/span&gt; directoryPath
= fullName.Substring(0, fullName.Length - _data.Name.Length);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (!&lt;span style="color: blue"&gt;string&lt;/span&gt;.IsNullOrEmpty(directoryPath)
&amp;amp;&amp;amp; directoryPath != fullName)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;string&lt;/span&gt; newFullName
= &lt;span style="color: #2b91af"&gt;Path&lt;/span&gt;.Combine(directoryPath, newValue);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;try&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
_data.MoveTo(newFullName);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;catch&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;IOException&lt;/span&gt; ex)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;var&lt;/span&gt; errorVisualizer
= Resolve&amp;lt;&lt;span style="color: #2b91af"&gt;IErrorVisualizer&lt;/span&gt;&amp;gt;();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (errorVisualizer
!= &lt;span style="color: blue"&gt;null&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
errorVisualizer.Show(&lt;span style="color: #a31515"&gt;"Cannot rename directory"&lt;/span&gt;,
ex.Message);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// Tell WPF the name has
changed.&amp;nbsp; Note if the same control &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // is being used to display
vs. edit then the&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// binding will need to
force WPF3x to re-read the property value.&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // This is done by using
a RefreshValueConverter; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// under .NET4 this won't
be necessary.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OnPropertyChanged(&lt;span style="color: #a31515"&gt;"Name"&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// Flip off the editing bit&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IsEditingName = &lt;span style="color: blue"&gt;false&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Notice how changes the editing flag at the end – we assume that once the rename has
occurred we are out of editing mode.&amp;nbsp; Finally, we need a way to transition from
“normal” to “edit” mode and back.&amp;nbsp; In the VM these kinds of things are driven
with commands – so, let’s define an &lt;strong&gt;ICommand&lt;/strong&gt; that takes us in and
out of edit mode:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red128\green128\blue128;\red0\green128\blue0;\red0\green0\blue255;\red43\green145\blue175;}??\fs28         \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  Command used to switch to editing mode\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 public\cf0  \cf6 ICommand\cf0  SwitchToEditingMode \{ \cf5 get\cf0 ; \cf5 private\cf0  \cf5 set\cf0 ; \}\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Command used to switch
to editing mode&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ICommand&lt;/span&gt; SwitchToEditingMode
{ &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;set&lt;/span&gt;;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
And then finally initialize it in the default constructor – we also now need to chain
to that constructor from the parameterized version since we always want this initialization
to happen (you could also do the initialization in both, but I prefer this approach):
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red128\green128\blue128;\red0\green128\blue0;\red0\green0\blue255;\red43\green145\blue175;}??\fs28         \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  Constructor for the marker directory.  This is used to detect an expansion.\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 private\cf0  DirectoryViewModel()\par ??        \{\par ??            \cf4 // Command that switches us into editing mode.\par ??\cf0             SwitchToEditingMode = \cf5 new\cf0  \cf6 DelegatingCommand\cf0 (() =&amp;gt; IsEditingName = !IsEditingName, () =&amp;gt; _data.FullName != _data.Name);\par ??        \}\par ??\par ??        \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  Public constructor\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;param name="di"&amp;gt;\cf4 DirectoryInfo to pull information from\cf3 &amp;lt;/param&amp;gt;\par ??\cf0         \cf5 public\cf0  DirectoryViewModel(\cf6 DirectoryInfo\cf0  di) : \cf5 this\cf0 ()\par ??        \{\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Constructor for the
marker directory.&amp;nbsp; This is used to detect an expansion.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;private&lt;/span&gt; DirectoryViewModel()
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: green"&gt;&amp;nbsp;&amp;nbsp; // Command that switches us into editing mode.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp; SwitchToEditingMode = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DelegatingCommand&lt;/span&gt;(
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
() =&amp;gt; IsEditingName = !IsEditingName, 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
() =&amp;gt; _data.FullName != _data.Name);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Public constructor&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;param
name="di"&amp;gt;&lt;/span&gt;&lt;span style="color: green"&gt;DirectoryInfo to pull information from&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;public&lt;/span&gt; DirectoryViewModel(&lt;span style="color: #2b91af"&gt;DirectoryInfo&lt;/span&gt; di)
: &lt;span style="color: blue"&gt;this&lt;/span&gt;()
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
...
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
That’s all the code changes we need for this – now let’s switch to the View and see
how we will wire this up!&amp;nbsp; Open the &lt;strong&gt;MainWindow.xaml&lt;/strong&gt; file and
look at the &lt;strong&gt;DataTemplate&lt;/strong&gt; used by the &lt;strong&gt;TreeView&lt;/strong&gt;.&amp;nbsp;
All of our changes will go into this template. First, we need to add a &lt;strong&gt;TextBox&lt;/strong&gt; into
the template that sits in the same space as the &lt;strong&gt;TextBlock&lt;/strong&gt; that displays
the name.&amp;nbsp; Then we need some way to switch between these two elements – I use
Visibility here, you could also swap out the entire template.&amp;nbsp; We’ll use a &lt;strong&gt;DataTrigger&lt;/strong&gt; and
drive it off our new &lt;strong&gt;IsEditingName&lt;/strong&gt; property:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red163\green21\blue21;\red255\green255\blue255;\red0\green0\blue255;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue0;}??\fs28 \cf1         \cf3 &amp;lt;\cf1 HierarchicalDataTemplate\cf4  x\cf3 :\cf4 Key\cf3 ="DirectoryTemplate"\cf4  ItemsSource\cf3 ="\{\cf1 Binding\cf4  Subdirectories\cf3 \}"&amp;gt;\par ??\cf1             \cf3 &amp;lt;\cf1 StackPanel\cf4  Orientation\cf3 ="Horizontal"&amp;gt;\par ??\cf1                 \cf3 &amp;lt;\cf1 Image\cf4  Width\cf3 ="16"\cf4  Height\cf3 ="16"\cf4  Source\cf3 ="\{\cf1 Binding\cf4  FullName\cf3 ,\cf4  Converter\cf3 =\{\cf1 StaticResource\cf4  iconConverter\cf3 \}\}" /&amp;gt;\par ??\cf1                 \cf3 &amp;lt;\cf1 Grid\cf4  Margin\cf3 ="5,0"&amp;gt;\par ??\cf1                     \cf3 &amp;lt;\cf1 Grid.Resources\cf3 &amp;gt;\par ??\cf1                         \cf5 &amp;lt;!-- Put here so it inherits the data context properly.  We want the command to execute on\par ??                             directory view model --&amp;gt;\par ??\cf1                         \cf3 &amp;lt;\cf1 julmar\cf3 :\cf1 BindableCommand\cf4  x\cf3 :\cf4 Key\cf3 ="EditingModeCommand"\cf4  Command\cf3 ="\{\cf1 Binding\cf4  SwitchToEditingMode\cf3 \}" /&amp;gt;\par ??\cf1                     \cf3 &amp;lt;/\cf1 Grid.Resources\cf3 &amp;gt;\par ??\cf1                     \cf3 &amp;lt;\cf1 TextBlock\cf4  x\cf3 :\cf4 Name\cf3 ="tb"\cf4  Text\cf3 ="\{\cf1 Binding\cf4  Name\cf3 \}"&amp;gt;\par ??\cf1                         \cf3 &amp;lt;\cf1 Interactivity\cf3 :\cf1 Interaction.Triggers\cf3 &amp;gt;\par ??\cf1                             \cf5 &amp;lt;!-- DoubleClick activates editing mode --&amp;gt;\par ??\cf1                             \cf3 &amp;lt;\cf1 julmar\cf3 :\cf1 DoubleClickTrigger\cf3 &amp;gt;\par ??\cf1                                 \cf3 &amp;lt;\cf1 julmar\cf3 :\cf1 InvokeCommand\cf4  Command\cf3 ="\{\cf1 Binding\cf4  SwitchToEditingMode\cf3 \}" /&amp;gt;\par ??\cf1                             \cf3 &amp;lt;/\cf1 julmar\cf3 :\cf1 DoubleClickTrigger\cf3 &amp;gt;\par ??\cf1                         \cf3 &amp;lt;/\cf1 Interactivity\cf3 :\cf1 Interaction.Triggers\cf3 &amp;gt;\par ??\cf1                     \cf3 &amp;lt;/\cf1 TextBlock\cf3 &amp;gt;\par ??\cf1                     \cf5 &amp;lt;!-- Editing text box --&amp;gt;\par ??\cf1                     \cf3 &amp;lt;\cf1 TextBox\cf4  x\cf3 :\cf4 Name\cf3 ="etb"\cf4  Visibility\cf3 ="Collapsed"\cf4  MinWidth\cf3 ="100"\cf0  \par ??                            \cf4  Text\cf3 ="\{\cf1 Binding\cf4  Name\cf3 ,\cf4  UpdateSourceTrigger\cf3 =LostFocus,\cf4  Converter\cf3 =\{\cf1 julmar\cf3 :\cf1 RefreshValueConverter\cf3 \}\}"&amp;gt;\par ??\cf1                         \cf5 &amp;lt;!-- Pressing ENTER in the TextBox turns off editing mode.  \par ??                             Tab or clicking away will do the same thing --&amp;gt;\par ??\cf1                         \cf3 &amp;lt;\cf1 TextBox.InputBindings\cf3 &amp;gt;\par ??\cf1                             \cf3 &amp;lt;\cf1 KeyBinding\cf4  Key\cf3 ="Enter"\cf4  Command\cf3 ="\{\cf1 StaticResource\cf4  EditingModeCommand\cf3 \}" /&amp;gt;\par ??\cf1                         \cf3 &amp;lt;/\cf1 TextBox.InputBindings\cf3 &amp;gt;\par ??\cf1                     \cf3 &amp;lt;/\cf1 TextBox\cf3 &amp;gt;\par ??\cf1                 \cf3 &amp;lt;/\cf1 Grid\cf3 &amp;gt;\cf1  \par ??            \cf3 &amp;lt;/\cf1 StackPanel\cf3 &amp;gt;\cf1  \par ??            \cf3 &amp;lt;\cf1 HierarchicalDataTemplate.Triggers\cf3 &amp;gt;\par ??\cf1                 \cf3 &amp;lt;\cf1 DataTrigger\cf4  Binding\cf3 ="\{\cf1 Binding\cf4  IsSelected\cf3 \}"\cf4  Value\cf3 ="True"&amp;gt;\par ??\cf1                     \cf3 &amp;lt;\cf1 Setter\cf4  TargetName\cf3 ="tb"\cf4  Property\cf3 ="FontWeight"\cf4  Value\cf3 ="Bold" /&amp;gt;\par ??\cf1                 \cf3 &amp;lt;/\cf1 DataTrigger\cf3 &amp;gt;\par ??\cf1                 \cf5 &amp;lt;!-- When editing mode is turned on, get rid of the TextBlock and make the TextBlock visible. --&amp;gt;\par ??\cf1                 \cf3 &amp;lt;\cf1 DataTrigger\cf4  Binding\cf3 ="\{\cf1 Binding\cf4  IsEditingName\cf3 \}"\cf4  Value\cf3 ="True"&amp;gt;\par ??\cf1                     \cf3 &amp;lt;\cf1 Setter\cf4  TargetName\cf3 ="tb"\cf4  Property\cf3 ="Visibility"\cf4  Value\cf3 ="Collapsed" /&amp;gt;\par ??\cf1                     \cf3 &amp;lt;\cf1 Setter\cf4  TargetName\cf3 ="etb"\cf4  Property\cf3 ="Visibility"\cf4  Value\cf3 ="Visible" /&amp;gt;\par ??\cf1                 \cf3 &amp;lt;/\cf1 DataTrigger\cf3 &amp;gt;\par ??\cf1             \cf3 &amp;lt;/\cf1 HierarchicalDataTemplate.Triggers\cf3 &amp;gt;\par ??\cf1         \cf3 &amp;lt;/\cf1 HierarchicalDataTemplate\cf3 &amp;gt;\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;="DirectoryTemplate"&lt;/span&gt;&lt;span style="color: red"&gt; ItemsSource&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Subdirectories&lt;/span&gt;&lt;span style="color: blue"&gt;}"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: red"&gt; Orientation&lt;/span&gt;&lt;span style="color: blue"&gt;="Horizontal"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Image&lt;/span&gt;&lt;span style="color: red"&gt; Width&lt;/span&gt;&lt;span style="color: blue"&gt;="16"&lt;/span&gt;&lt;span style="color: red"&gt; Height&lt;/span&gt;&lt;span style="color: blue"&gt;="16"&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Source&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; FullName&lt;/span&gt;&lt;span style="color: blue"&gt;,&lt;/span&gt;&lt;span style="color: red"&gt; Converter&lt;/span&gt;&lt;span style="color: blue"&gt;={&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color: red"&gt; iconConverter&lt;/span&gt;&lt;span style="color: blue"&gt;}}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: red"&gt; Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="5,0"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="tb"&lt;/span&gt;&lt;span style="color: red"&gt; Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Name&lt;/span&gt;&lt;span style="color: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--
Editing text box --&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="etb"&lt;/span&gt;&lt;span style="color: red"&gt; Visibility&lt;/span&gt;&lt;span style="color: blue"&gt;="Collapsed"&lt;/span&gt;&lt;span style="color: red"&gt; MinWidth&lt;/span&gt;&lt;span style="color: blue"&gt;="100"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Name&lt;/span&gt;&lt;span style="color: blue"&gt;,&lt;/span&gt;&lt;span style="color: red"&gt; UpdateSourceTrigger&lt;/span&gt;&lt;span style="color: blue"&gt;=LostFocus,&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Converter&lt;/span&gt;&lt;span style="color: blue"&gt;={&lt;/span&gt;&lt;span style="color: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;RefreshValueConverter&lt;/span&gt;&lt;span style="color: blue"&gt;}}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;HierarchicalDataTemplate.Triggers&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataTrigger&lt;/span&gt;&lt;span style="color: red"&gt; Binding&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; IsSelected&lt;/span&gt;&lt;span style="color: blue"&gt;}"&lt;/span&gt;&lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="True"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="color: red"&gt; TargetName&lt;/span&gt;&lt;span style="color: blue"&gt;="tb"&lt;/span&gt;&lt;span style="color: red"&gt; Property&lt;/span&gt;&lt;span style="color: blue"&gt;="FontWeight"&lt;/span&gt;&lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="Bold"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataTrigger&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- When editing mode
is turned on, get rid of the TextBlock and &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
make the TextBlock visible. --&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataTrigger&lt;/span&gt;&lt;span style="color: red"&gt; Binding&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; IsEditingName&lt;/span&gt;&lt;span style="color: blue"&gt;}"&lt;/span&gt;&lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="True"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="color: red"&gt; TargetName&lt;/span&gt;&lt;span style="color: blue"&gt;="tb"&lt;/span&gt;&lt;span style="color: red"&gt; Property&lt;/span&gt;&lt;span style="color: blue"&gt;="Visibility"&lt;/span&gt;&lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="Collapsed"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="color: red"&gt; TargetName&lt;/span&gt;&lt;span style="color: blue"&gt;="etb"&lt;/span&gt;&lt;span style="color: red"&gt; Property&lt;/span&gt;&lt;span style="color: blue"&gt;="Visibility"&lt;/span&gt;&lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="Visible"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataTrigger&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;HierarchicalDataTemplate.Triggers&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
The other thing we need to do is set the &lt;strong&gt;TextBox&lt;/strong&gt; binding (which also
uses the &lt;strong&gt;Name&lt;/strong&gt; property) to apply any changes when the control loses
focus – that way we don’t rename as the user types!&amp;nbsp; This is done by changing
the &lt;strong&gt;UpdateSourceTrigger&lt;/strong&gt; on the binding to “&lt;strong&gt;LostFocus&lt;/strong&gt;”.
This happens to be the default setting for WPF – but not for Silverlight, so I tend
to be deliberate when I want to ensure a specific behavior.&amp;nbsp; I’ve also added
a converter onto the binding above – the RefreshValueConverter.&amp;nbsp; This is a no-op
converter, but it forces WPF to re-read the property value after the setter is called,
without it, the &lt;strong&gt;TextBox&lt;/strong&gt; will have stale data if the rename fails.&amp;nbsp;
Note that this is unnecessary in WPF4 which now always re-reads the property values
automatically.&amp;nbsp; Since this targets WPF3.5, this converter will ensure proper
behavior.
&lt;/p&gt;
&lt;p&gt;
The final thing we need to do is somehow get in and out of editing mode.&amp;nbsp; We
want this to happen when we double-click on the text element – so let’s add a JulMar
behavior and action to the &lt;strong&gt;TextBlock&lt;/strong&gt;:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red163\green21\blue21;\red255\green255\blue255;\red0\green0\blue255;\red255\green0\blue0;\red0\green128\blue0;}??\fs28 \cf1                     \cf3 &amp;lt;\cf1 TextBlock\cf4  x\cf3 :\cf4 Name\cf3 ="tb"\cf4  Text\cf3 ="\{\cf1 Binding\cf4  Name\cf3 \}"&amp;gt;\par ??\cf1                         \cf3 &amp;lt;\cf1 Interactivity\cf3 :\cf1 Interaction.Triggers\cf3 &amp;gt;\par ??\cf1                             \cf5 &amp;lt;!-- DoubleClick activates editing mode --&amp;gt;\par ??\cf1                             \cf3 &amp;lt;\cf1 julmar\cf3 :\cf1 DoubleClickTrigger\cf3 &amp;gt;\par ??\cf1                                 \cf3 &amp;lt;\cf1 julmar\cf3 :\cf1 InvokeCommand\cf4  Command\cf3 ="\{\cf1 Binding\cf4  SwitchToEditingMode\cf3 \}" /&amp;gt;\par ??\cf1                             \cf3 &amp;lt;/\cf1 julmar\cf3 :\cf1 DoubleClickTrigger\cf3 &amp;gt;\par ??\cf1                         \cf3 &amp;lt;/\cf1 Interactivity\cf3 :\cf1 Interaction.Triggers\cf3 &amp;gt;\par ??\cf1                     \cf3 &amp;lt;/\cf1 TextBlock\cf3 &amp;gt;\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="tb"&lt;/span&gt;&lt;span style="color: red"&gt; Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Name&lt;/span&gt;&lt;span style="color: blue"&gt;}"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;strong&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interactivity&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interaction.Triggers&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: green"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- DoubleClick
activates editing mode --&amp;gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;strong&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;DoubleClickTrigger&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;strong&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;InvokeCommand&lt;/span&gt;&lt;span style="color: red"&gt; Command&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; SwitchToEditingMode&lt;/span&gt;&lt;span style="color: blue"&gt;}"
/&amp;gt;&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;strong&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;DoubleClickTrigger&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;strong&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interactivity&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Interaction.Triggers&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
This also requires you define the proper namespace on the Window element:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red255\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;}??\fs28 \cf1 xmlns\cf3 :\cf1 Interactivity\cf3 ="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Interactivity&lt;/span&gt;&lt;span style="color: blue"&gt;="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
I’d also like to drop &lt;em&gt;out&lt;/em&gt; of editing mode when you press ENTER in the &lt;strong&gt;TextBox&lt;/strong&gt;.
To accomplish this, let’s add an &lt;strong&gt;InputBinding&lt;/strong&gt; to the &lt;strong&gt;TextBox&lt;/strong&gt; for
the ENTER key that invokes our &lt;strong&gt;SwitchToEditingMode&lt;/strong&gt; command – in WPF
3.5 we need to go through a resource-based binding helper to get access to the ViewModel
(which is our &lt;strong&gt;DataContext&lt;/strong&gt;).&amp;nbsp; So, let’s defined a &lt;strong&gt;BindableCommand&lt;/strong&gt; in
the &lt;strong&gt;Grid &lt;/strong&gt;resources (so we get the &lt;strong&gt;DirectoryViewModel&lt;/strong&gt; as
the DataContext) and then bind the input command to that:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red163\green21\blue21;\red255\green255\blue255;\red0\green0\blue255;\red0\green128\blue0;\red255\green0\blue0;}??\fs28 \cf1                     \cf3 &amp;lt;\cf1 Grid.Resources\cf3 &amp;gt;\par ??\cf1                         \cf4 &amp;lt;!-- Put here so it inherits the data context properly.  We want the command to execute on\par ??                             directory view model --&amp;gt;\par ??\cf1                         \cf3 &amp;lt;\cf1 julmar\cf3 :\cf1 BindableCommand\cf5  x\cf3 :\cf5 Key\cf3 ="EditingModeCommand"\cf5  Command\cf3 ="\{\cf1 Binding\cf5  SwitchToEditingMode\cf3 \}" /&amp;gt;\par ??\cf1                     \cf3 &amp;lt;/\cf1 Grid.Resources\cf3 &amp;gt;\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid.Resources&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: green"&gt;&amp;lt;!-- Put here so it inherits the data context properly.&amp;nbsp;
We want the command to execute on&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; directory view model --&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;BindableCommand&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;="EditingModeCommand"&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Command&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; SwitchToEditingMode&lt;/span&gt;&lt;span style="color: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid.Resources&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;… &lt;/strong&gt;
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red163\green21\blue21;\red255\green255\blue255;\red0\green0\blue255;\red255\green0\blue0;\red0\green0\blue0;\red0\green128\blue0;}??\fs28 \cf1                     \cf3 &amp;lt;\cf1 TextBox\cf4  x\cf3 :\cf4 Name\cf3 ="etb"\cf4  Visibility\cf3 ="Collapsed"\cf4  MinWidth\cf3 ="100"\cf0  \par ??                            \cf4  Text\cf3 ="\{\cf1 Binding\cf4  Name\cf3 ,\cf4  UpdateSourceTrigger\cf3 =LostFocus,\cf4  Converter\cf3 =\{\cf1 julmar\cf3 :\cf1 RefreshValueConverter\cf3 \}\}"&amp;gt;\par ??\cf1                         \cf6 &amp;lt;!-- Pressing ENTER in the TextBox turns off editing mode.  \par ??                             Tab or clicking away will do the same thing --&amp;gt;\par ??\cf1                         \cf3 &amp;lt;\cf1 TextBox.InputBindings\cf3 &amp;gt;\par ??\cf1                             \cf3 &amp;lt;\cf1 KeyBinding\cf4  Key\cf3 ="Enter"\cf4  Command\cf3 ="\{\cf1 StaticResource\cf4  EditingModeCommand\cf3 \}" /&amp;gt;\par ??\cf1                         \cf3 &amp;lt;/\cf1 TextBox.InputBindings\cf3 &amp;gt;\par ??\cf1                     \cf3 &amp;lt;/\cf1 TextBox\cf3 &amp;gt;\par ??}
--&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="etb"&lt;/span&gt;&lt;span style="color: red"&gt; Visibility&lt;/span&gt;&lt;span style="color: blue"&gt;="Collapsed"&lt;/span&gt;&lt;span style="color: red"&gt; MinWidth&lt;/span&gt;&lt;span style="color: blue"&gt;="100"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Name&lt;/span&gt;&lt;span style="color: blue"&gt;,&lt;/span&gt;&lt;span style="color: red"&gt; UpdateSourceTrigger&lt;/span&gt;&lt;span style="color: blue"&gt;=LostFocus,&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Converter&lt;/span&gt;&lt;span style="color: blue"&gt;={&lt;/span&gt;&lt;span style="color: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;RefreshValueConverter&lt;/span&gt;&lt;span style="color: blue"&gt;}}"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: green"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Pressing ENTER in the TextBox turns
off editing mode.&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tab or clicking
away will do the same thing --&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.InputBindings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;KeyBinding&lt;/span&gt;&lt;span style="color: red"&gt; Key&lt;/span&gt;&lt;span style="color: blue"&gt;="Enter"&lt;/span&gt;&lt;span style="color: red"&gt; Command&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color: red"&gt; EditingModeCommand&lt;/span&gt;&lt;span style="color: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.InputBindings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
And that’s it!&amp;nbsp; If you run the app and double-click on a directory name (except
the root) you can rename it!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMRenameTreeViewnodes_9D40/RenameTreeNodePic_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="RenameTreeNodePic" border="0" alt="RenameTreeNodePic" src="http://www.julmar.com/blog/mark/content/binary/WindowsLiveWriter/MVVMRenameTreeViewnodes_9D40/RenameTreeNodePic_thumb.jpg" width="244" height="196"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Here’s the finished solution: &lt;a href="http://www.julmar.com/samples/RenameTreeNode.zip" target="_blank"&gt;RenameTreeNode.zip&lt;/a&gt;
&lt;/p&gt;</description>
      <comments>http://www.julmar.com/blog/mark/CommentView,guid,276acdbc-7308-416c-a4ca-b75e43ac54bd.aspx</comments>
      <category>.NET</category>
      <category>MVVM</category>
      <category>WPF</category>
    </item>
    <item>
      <trackback:ping>http://www.julmar.com/blog/mark/Trackback.aspx?guid=513ec8da-076b-4f88-91be-2151f0010610</trackback:ping>
      <pingback:server>http://www.julmar.com/blog/mark/pingback.aspx</pingback:server>
      <pingback:target>http://www.julmar.com/blog/mark/PermaLink,guid,513ec8da-076b-4f88-91be-2151f0010610.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.julmar.com/blog/mark/CommentView,guid,513ec8da-076b-4f88-91be-2151f0010610.aspx</wfw:comment>
      <wfw:commentRss>http://www.julmar.com/blog/mark/SyndicationService.asmx/GetEntryCommentsRss?guid=513ec8da-076b-4f88-91be-2151f0010610</wfw:commentRss>
      <title>MVVM: Views and ViewModels</title>
      <guid isPermaLink="false">http://www.julmar.com/blog/mark/PermaLink,guid,513ec8da-076b-4f88-91be-2151f0010610.aspx</guid>
      <link>http://www.julmar.com/blog/mark/2010/01/22/MVVMViewsAndViewModels.aspx</link>
      <pubDate>Fri, 22 Jan 2010 22:35:37 GMT</pubDate>
      <description>&lt;p&gt;
In the previous post, I provided a link to the project template you can use to start
a new MVVM project using the JulMar MVVM library. Here's the two links in case you
didn't get them before: 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.julmar.com/samples/mvvmhelpers.zip"&gt;MVVM Helpers Distribution&lt;/a&gt; 
&lt;br&gt;
&lt;a href="http://www.julmar.com/samples/WpfMvvmApplication.zip"&gt;Project Template&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Copy the project template into your Visual Studio 2008 templates directory located
off your user documents - mine is at &lt;strong&gt;%UserProfile%\Documents\Visual Studio
2008\Templates\ProjectTemplates\Visual C#\Windows&lt;/strong&gt;. 
&lt;/p&gt;
&lt;p&gt;
Ok, so once you have these installed, what can you do with them? Well, for starters,
you can now generate a starter project that provides a nice template for an MVVM application.
The starter template creates a simple "Explorer" like program - it looks like this: 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.julmar.com/blog/mark/content/binary/images/sample-run1.jpg" width=600&gt; 
&lt;/p&gt;
&lt;p&gt;
Notice there are two sections - a &lt;strong&gt;TreeView&lt;/strong&gt; listing all the directories,
and a &lt;strong&gt;ListView&lt;/strong&gt; showing all the files in the selected directory. Let's
look a little closer at the project structure. There are four directories in the solution:
&lt;/p&gt;
&lt;table border=1 cellspacing=0 cellpadding=2 width=588&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign=top width=113&gt;
&lt;strong&gt;Converters&lt;/strong&gt;&lt;/td&gt;
&lt;td valign=top width=473&gt;
This has a simple &lt;font face="Courier new"&gt;ValueConverter&lt;/font&gt; that takes a filename
and returns an icon as an &lt;strong&gt;ImageSource&lt;/strong&gt;. 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=top width=118&gt;
&lt;strong&gt;Dependencies&lt;/strong&gt;&lt;/td&gt;
&lt;td valign=top width=468&gt;
This is the binary dependencies the project requires, specifically it contains the
JulMar MVVM libraries and Blend action libraries.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=top width=123&gt;
&lt;strong&gt;ViewModels&lt;/strong&gt;&lt;/td&gt;
&lt;td valign=top width=464&gt;
This directory contains all the business logic in the form of ViewModels.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=top width=127&gt;
&lt;strong&gt;Views&lt;/strong&gt;&lt;/td&gt;
&lt;td valign=top width=461&gt;
Finally, this directory contains all the UI (XAML) for the application.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;Views
&lt;/h4&gt;
&lt;p&gt;
Let's start with the last folder - the Views. Views are the UI presentation of data
- in the case of a WPF/Silverlight application this is most commonly the XAML and
XAML code behind files (they are considered a single element together). We want to
have UI-specific code and designer elements present in these files. Generally we prefer
to place business logic and testable elements into the ViewModel area.
&lt;/p&gt;
&lt;p&gt;
In this starter project, we have a single view &lt;strong&gt;MainWindow.xaml&lt;/strong&gt;. This
is what presents the main UI shown above. The code behind file contains the required
boilerplate code (essentially a constructor and call to &lt;strong&gt;InitializeComponent&lt;/strong&gt;). 
&lt;/p&gt;
&lt;p&gt;
If you open the view (note that the designer will choke on it until you compile the
project), you will find fairly straightforward XAML that creates the UI, let’s break
it down as we go:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green0\blue0;}??\fs28 \cf1 &amp;lt;\cf3 Window\cf4  x\cf1 :\cf4 Class\cf1 ="WpfMVVMApplication1.Views.MainWindow"\par ??\cf0    \cf4  xmlns\cf1 ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"\par ??\cf0    \cf4  xmlns\cf1 :\cf4 x\cf1 ="http://schemas.microsoft.com/winfx/2006/xaml"\par ??\cf0    \cf4  xmlns\cf1 :\cf4 julmar\cf1 ="http://www.julmar.com/wpfhelpers"\par ??\cf0    \cf4  xmlns\cf1 :\cf4 ViewModels\cf1 ="clr-namespace:WpfMVVMApplication1.ViewModels"\par ??\cf0    \cf4  xmlns\cf1 :\cf4 Converters\cf1 ="clr-namespace:WpfMVVMApplication1.Converters"\par ??\cf0    \cf4  DataContext\cf1 ="\{\cf3 julmar\cf1 :\cf3 ViewModelCreator\cf1  \{\cf3 x\cf1 :\cf3 Type\cf4  ViewModels\cf1 :\cf4 MainViewModel\cf1 \}\}"\par ??\cf0    \cf4  Title\cf1 ="File Explorer"\cf4  Height\cf1 ="400"\cf4  Width\cf1 ="500"&amp;gt;\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 14pt"&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;font size=2&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Window&lt;/span&gt;&lt;span style="COLOR: red"&gt; x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;Class&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="WpfMVVMApplication1.Views.MainWindow"&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;font size=2&gt;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt; xmlns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;font size=2&gt;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt; xmlns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;font size=2&gt;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt; xmlns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;julmar&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://www.julmar.com/wpfhelpers"&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;font size=2&gt;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt; xmlns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;ViewModels&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="clr-namespace:WpfMVVMApplication1.ViewModels"&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;font size=2&gt;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt; xmlns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;Converters&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="clr-namespace:WpfMVVMApplication1.Converters"&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;font size=2&gt;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt; &lt;strong&gt;&lt;u&gt;&lt;em&gt;DataContext&lt;/em&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;u&gt;&lt;em&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ViewModelCreator&lt;/span&gt;&lt;span style="COLOR: blue"&gt; {&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Type&lt;/span&gt;&lt;span style="COLOR: red"&gt; ViewModels&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;MainViewModel&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}}"&lt;/span&gt;&lt;/em&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;font size=2&gt;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt; Title&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="File
Explorer"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Height&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="400"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Width&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="500"&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
First, notice how the &lt;strong&gt;DataContext&lt;/strong&gt; is established – through a custom &lt;strong&gt;MarkupExtension&lt;/strong&gt; called &lt;strong&gt;ViewModelCreator&lt;/strong&gt;.&amp;nbsp;
This extension is responsible for creating an associated ViewModel for this view (where
our testable business logic should go) and also wiring up a couple of special event
handlers that will allow the ViewModel to activate the view and close the view respectively.
&lt;/p&gt;
&lt;p&gt;
Next, let’s check out the resources:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red163\green21\blue21;\red255\green255\blue255;\red0\green0\blue255;\red0\green128\blue0;\red255\green0\blue0;}??\fs28 \cf1     \cf3 &amp;lt;\cf1 Window.Resources\cf3 &amp;gt;\par ??\cf1         \cf4 &amp;lt;!-- Bindable commands sit in resources and allow keyboard input to target ViewModel commands --&amp;gt;\par ??\cf1         \cf3 &amp;lt;\cf1 julmar\cf3 :\cf1 BindableCommand\cf5  x\cf3 :\cf5 Key\cf3 ="CloseCommand"\cf5  Command\cf3 ="\{\cf1 Binding\cf5  CloseAppCommand\cf3 \}" /&amp;gt;\par ??\cf1         \par ??        \cf3 &amp;lt;\cf1 Converters\cf3 :\cf1 FilenameToIconConverter\cf5  x\cf3 :\cf5 Key\cf3 ="iconConverter" /&amp;gt;\par ??\cf1         \par ??        \cf3 &amp;lt;\cf1 HierarchicalDataTemplate\cf5  x\cf3 :\cf5 Key\cf3 ="DirectoryTemplate"\cf5  ItemsSource\cf3 ="\{\cf1 Binding\cf5  Subdirectories\cf3 \}"&amp;gt;\par ??\cf1             \cf3 &amp;lt;\cf1 StackPanel\cf5  Orientation\cf3 ="Horizontal"&amp;gt;\par ??\cf1                 \cf3 &amp;lt;\cf1 Image\cf5  Width\cf3 ="16"\cf5  Height\cf3 ="16"\cf5  Source\cf3 ="\{\cf1 Binding\cf5  FullName\cf3 ,\cf5  Converter\cf3 =\{\cf1 StaticResource\cf5  iconConverter\cf3 \}\}" /&amp;gt;\par ??\cf1                 \cf3 &amp;lt;\cf1 TextBlock\cf5  x\cf3 :\cf5 Name\cf3 ="tb"\cf5  Margin\cf3 ="5,0"\cf5  Text\cf3 ="\{\cf1 Binding\cf5  Name\cf3 \}" /&amp;gt;\par ??\cf1             \cf3 &amp;lt;/\cf1 StackPanel\cf3 &amp;gt;\cf1  \par ??            \cf3 &amp;lt;\cf1 HierarchicalDataTemplate.Triggers\cf3 &amp;gt;\par ??\cf1                 \cf3 &amp;lt;\cf1 DataTrigger\cf5  Binding\cf3 ="\{\cf1 Binding\cf5  IsSelected\cf3 \}"\cf5  Value\cf3 ="True"&amp;gt;\par ??\cf1                     \cf3 &amp;lt;\cf1 Setter\cf5  TargetName\cf3 ="tb"\cf5  Property\cf3 ="FontWeight"\cf5  Value\cf3 ="Bold" /&amp;gt;\par ??\cf1                 \cf3 &amp;lt;/\cf1 DataTrigger\cf3 &amp;gt;\par ??\cf1             \cf3 &amp;lt;/\cf1 HierarchicalDataTemplate.Triggers\cf3 &amp;gt;\par ??\cf1         \cf3 &amp;lt;/\cf1 HierarchicalDataTemplate\cf3 &amp;gt;\par ??\par ??\cf1     \cf3 &amp;lt;/\cf1 Window.Resources\cf3 &amp;gt;\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 14pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Window.Resources&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: green"&gt;&amp;nbsp; &amp;lt;!-- Bindable commands sit in resources
and allow keyboard input to target ViewModel commands --&amp;gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;julmar&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;BindableCommand&lt;/span&gt;&lt;span style="COLOR: red"&gt; x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;Key&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="CloseCommand"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Command&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; CloseAppCommand&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"
/&amp;gt;&lt;br&gt;
&lt;br&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Converters&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;FilenameToIconConverter&lt;/span&gt;&lt;span style="COLOR: red"&gt; x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;Key&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="iconConverter"
/&amp;gt;&lt;br&gt;
&lt;br&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="COLOR: red"&gt; x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;Key&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="DirectoryTemplate"&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
ItemsSource&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; Subdirectories&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"&amp;gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="COLOR: red"&gt; Orientation&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Horizontal"&amp;gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Image&lt;/span&gt;&lt;span style="COLOR: red"&gt; Width&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="16"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Height&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="16"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Source&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; FullName&lt;/span&gt;&lt;span style="COLOR: blue"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt; &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Converter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;={&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="COLOR: red"&gt; iconConverter&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}}"
/&amp;gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="COLOR: red"&gt; x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;Name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="tb"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Margin&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="5,0"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Text&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; Name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"
/&amp;gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt; &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;HierarchicalDataTemplate.Triggers&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;DataTrigger&lt;/span&gt;&lt;span style="COLOR: red"&gt; Binding&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; IsSelected&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="True"&amp;gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="COLOR: red"&gt; TargetName&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="tb"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Property&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="FontWeight"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Bold"
/&amp;gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;DataTrigger&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;HierarchicalDataTemplate.Triggers&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: blue"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;font size=2&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Window.Resources&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;
Here we find three defined resources – first we have a JulMar MVVM &lt;strong&gt;BindableCommand&lt;/strong&gt;.&amp;nbsp;
This is a special &lt;strong&gt;ICommand&lt;/strong&gt; instance that can be data bound and forwards
to the specified binding.&amp;nbsp; We use this a bit later in the keyboard accelerator
to close the application.&amp;nbsp; Next, there is the converter that takes a filename
and converts it to an icon – that’s the source code in the &lt;strong&gt;Converters&lt;/strong&gt; folder
mentioned earlier.&amp;nbsp; I use a converter here because this is very UI-centric and
not very testable – so the converter will data bind to a string (filename) property
of the ViewModel and retrieve the icon for the UI to display.&amp;nbsp; That way, my ViewModel
sticks with base (non-WPF) types.&amp;nbsp; This isn’t a hard rule – but it’s a good one
to try to follow.
&lt;/p&gt;
&lt;p&gt;
Finally, there is a &lt;strong&gt;DataTemplate&lt;/strong&gt; that is used to display the directory
structure – this is what the &lt;strong&gt;TreeView&lt;/strong&gt; uses to display it’s data.&amp;nbsp;
Notice it data binds to a couple of properties – &lt;strong&gt;FullName&lt;/strong&gt;, Name and &lt;strong&gt;IsSelected&lt;/strong&gt;.&amp;nbsp;
All of these, as you will see, exist in our ViewModel definition.&amp;nbsp; The View takes
the data from the ViewModel and displays it onto the UI for the user to interact with.
&lt;/p&gt;
&lt;p&gt;
Next in the XAML is the input bindings – this is where we define keyboard and mouse
gesture accelerators, and it’s where I use the bindable command I defined earlier:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red163\green21\blue21;\red255\green255\blue255;\red0\green0\blue255;\red255\green0\blue0;}??\fs28 \cf1     \cf3 &amp;lt;\cf1 Window.InputBindings\cf3 &amp;gt;\par ??\cf1         \cf3 &amp;lt;\cf1 KeyBinding\cf4  Key\cf3 ="X"\cf4  Modifiers\cf3 ="ALT"\cf4  Command\cf3 ="\{\cf1 StaticResource\cf4  CloseCommand\cf3 \}" /&amp;gt;\par ??\cf1     \cf3 &amp;lt;/\cf1 Window.InputBindings\cf3 &amp;gt;\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Window.InputBindings&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;KeyBinding&lt;/span&gt;&lt;span style="COLOR: red"&gt; Key&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="X"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Modifiers&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ALT"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Command&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="COLOR: red"&gt; CloseCommand&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Window.InputBindings&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Here you can see that instead of trying to bind to the command, we use &lt;strong&gt;{StaticResource}&lt;/strong&gt; to
get it from the resources.&amp;nbsp; This is necessary under WPF 3.5 because the &lt;strong&gt;KeyBinding&lt;/strong&gt; will
not inherit the &lt;strong&gt;DataContext &lt;/strong&gt;and so cannot bind directly to the command
– but resources can, and specifically Freezable resources can – that’s what the &lt;strong&gt;BindableCommand&lt;/strong&gt; provides
– a Freezable resource that forwards the &lt;strong&gt;ICommand&lt;/strong&gt; implementation
onto a command defined in the DataContext ViewModel.&amp;nbsp; This is not necessary under
WPF4 – this is actually one of the new features they’ve added: to inherit the DataContext
in your input bindings!&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
The remainder of the view is fairly traditional – we use bindings to connect the UI
up to the ViewModel definitions, so let’s go look at what those are.
&lt;/p&gt;
&lt;h4&gt;ViewModels
&lt;/h4&gt;
&lt;p&gt;
The ViewModel folder contains three source code files – &lt;strong&gt;DirectoryViewModel.cs&lt;/strong&gt;, &lt;strong&gt;FileViewModel.cs&lt;/strong&gt;,
and &lt;strong&gt;MainViewModel.cs&lt;/strong&gt;.&amp;nbsp; If you recall from above, &lt;strong&gt;MainViewModel&lt;/strong&gt; is
the primary ViewModel that is data bound to the view.&amp;nbsp; The other two are child
view models used to represent the files and folders respectively.&amp;nbsp; Let’s look
at FileViewModel as an example:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;\red128\green128\blue128;\red0\green128\blue0;}??\fs28     \cf3 public\cf0  \cf3 class\cf0  \cf4 FileViewModel\cf0  : \cf4 SimpleViewModel\par ??\cf0     \{\par ??        \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  File expansion marker used by the directory\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf3 internal\cf0  \cf3 static\cf0  \cf4 FileViewModel\cf0  MarkerFile = \cf3 new\cf0  \cf4 FileViewModel\cf0 ();\par ??\par ??\cf3         #region\cf0  Internal Data\par ??        \cf3 private\cf0  \cf3 readonly\cf0  \cf4 FileInfo\cf0  _data;\par ??\cf3         #endregion\par ??\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  File name\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf3 public\cf0  \cf3 string\cf0  Name\par ??        \{\par ??            \cf3 get\cf0  \{ \cf3 return\cf0  _data.Name; \}\par ??        \}\par ??\par ??        \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  Full path + filename\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf3 public\cf0  \cf3 string\cf0  FullPath\par ??        \{\par ??            \cf3 get\cf0  \{ \cf3 return\cf0  _data.FullName; \}\par ??        \}\par ??\par ??        \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  Size of the file in bytes\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf3 public\cf0  \cf3 long\cf0  Size\par ??        \{\par ??            \cf3 get\cf0  \{ \cf3 return\cf0  _data.Length; \}\par ??        \}\par ??\par ??        \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  Internal constructor used to create the file marker.\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf3 private\cf0  FileViewModel()\par ??        \{\par ??            _data = \cf3 null\cf0 ;\par ??        \}\par ??\par ??        \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  Public constructor that captures a list of files.\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;param name="fi"&amp;gt;\cf6 FileInfo to grab file information from\cf5 &amp;lt;/param&amp;gt;\par ??\cf0         \cf3 public\cf0  FileViewModel(\cf4 FileInfo\cf0  fi)\par ??        \{\par ??            _data = fi;\par ??        \}\par ??    \}\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;FileViewModel&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;SimpleViewModel&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Marker
file that signals expansion of the tree.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;internal&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;FileViewModel&lt;/span&gt; MarkerFile
= &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;FileViewModel&lt;/span&gt;();
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;readonly&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;FileInfo&lt;/span&gt; _data;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; File
name&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Name
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _data.Name;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Full
path + filename&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; FullPath
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _data.FullName;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Size
of the file in bytes&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;long&lt;/span&gt; Size
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _data.Length;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Private
constructor used to create marker file.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; FileViewModel()
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Public
constructor that captures a list of files.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;param
name="fi"&amp;gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;FileInfo to grab file information from&lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; FileViewModel(&lt;span style="COLOR: #2b91af"&gt;FileInfo&lt;/span&gt; fi)
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _data = fi;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
As you can see, it is &lt;em&gt;very&lt;/em&gt; simple – it is simply a wrapper around a piece
of data, a &lt;strong&gt;FileInfo&lt;/strong&gt; that represents a file on disk.&amp;nbsp; It exposes
properties that are data bindable.&amp;nbsp; There is one element (&lt;strong&gt;MarkerFile&lt;/strong&gt;)
that I want you to ignore for a moment – we’ll get to it in a second.&amp;nbsp; Notice
that it extends &lt;strong&gt;SimpleViewModel&lt;/strong&gt;.&amp;nbsp; This is one of three primary
VM classes in the MVVM helper library.&amp;nbsp; &lt;strong&gt;SimpleViewModel&lt;/strong&gt; is intended
for cases where you need the bare minimum support – specifically support for &lt;strong&gt;INotifyPropertyChanged&lt;/strong&gt;.&amp;nbsp;
No other services are provided by this base class, and as such it is very light.&amp;nbsp;
Let’s look at the directory class next:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red128\green128\blue128;\red0\green128\blue0;\red0\green0\blue255;\red43\green145\blue175;\red163\green21\blue21;}??\fs28     \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0     \cf3 ///\cf4  Sample ViewModel that wraps a Directory.\par ??\cf0     \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0     \cf5 public\cf0  \cf5 class\cf0  \cf6 DirectoryViewModel\cf0  : \cf6 ViewModel\par ??\cf0     \{\par ??        \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  String used to send message to main view model about directory selection.\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 internal\cf0  \cf5 const\cf0  \cf5 string\cf0  SelectedDirectoryChangedMessage = \cf7 @"SelectedDirectoryChanged"\cf0 ;\par ??\par ??        \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  Marker directory that signals expansion of the tree.\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 internal\cf0  \cf5 static\cf0  \cf6 DirectoryViewModel\cf0  MarkerDirectory = \cf5 new\cf0  \cf6 DirectoryViewModel\cf0 ();\par ??\par ??\cf5         #region\cf0  Internal Data\par ??        \cf5 private\cf0  \cf5 bool\cf0  _isSelected, _isExpanded;\par ??        \cf5 private\cf0  \cf5 readonly\cf0  \cf6 DirectoryInfo\cf0  _data;\par ??        \cf5 private\cf0  \cf5 readonly\cf0  \cf6 ObservableCollection\cf0 &amp;lt;\cf6 FileViewModel\cf0 &amp;gt; _files;\par ??        \cf5 private\cf0  \cf5 readonly\cf0  \cf6 ObservableCollection\cf0 &amp;lt;\cf6 DirectoryViewModel\cf0 &amp;gt; _subdirs;\par ??\cf5         #endregion\par ??\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  Name of the directory\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 public\cf0  \cf5 string\cf0  Name\par ??        \{\par ??            \cf5 get\cf0  \{ \cf5 return\cf0  _data.Name; \}\par ??        \}\par ??\par ??        \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  Full path + name of the directory\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 public\cf0  \cf5 string\cf0  FullName\par ??        \{\par ??            \cf5 get\cf0  \{ \cf5 return\cf0  _data.FullName; \}\par ??        \}\par ??\par ??        \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  True/False whether the directory is selected (i.e. current).\par ??\cf0         \cf3 ///\cf4  Selecting the directory causes it to populate it's file collection.\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 public\cf0  \cf5 bool\cf0  IsSelected\par ??        \{\par ??            \cf5 get\cf0  \{ \cf5 return\cf0  _isSelected; \}\par ??            \cf5 set\par ??\cf0             \{\par ??                \cf5 if\cf0  (_isSelected != \cf5 value\cf0 )\par ??                \{\par ??                    _isSelected = \cf5 value\cf0 ;\par ??\par ??                    \cf5 if\cf0  (_isSelected)\par ??                    \{\par ??                        \cf5 if\cf0  (_files.Count == 1 &amp;amp;&amp;amp; _files[0] == \cf6 FileViewModel\cf0 .MarkerFile)\par ??                        \{\par ??                            _files.Clear();\par ??                            _data.GetFiles()\par ??                                .Where(f =&amp;gt; (f.Attributes &amp;amp; (\cf6 FileAttributes\cf0 .Hidden | \cf6 FileAttributes\cf0 .System)) == 0)\par ??                                .ForEach(f =&amp;gt; _files.Add(\cf5 new\cf0  \cf6 FileViewModel\cf0 (f)));\par ??                            OnPropertyChanged(\cf7 "TotalFiles"\cf0 , \cf7 "TotalFileSize"\cf0 );\par ??                        \}\par ??                        SendMessage(SelectedDirectoryChangedMessage, \cf5 this\cf0 );\par ??                    \}\par ??                    \cf5 else\par ??\cf0                     \{\par ??                        _files.Clear();\par ??                        _files.Add(\cf6 FileViewModel\cf0 .MarkerFile);\par ??                    \}\par ??\par ??                    OnPropertyChanged(\cf7 "IsSelected"\cf0 );\par ??                \}\par ??            \}\par ??        \}\par ??\par ??        \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  True/False if the directory is expanded. Expanding the directory causes it\par ??\cf0         \cf3 ///\cf4  to fill it's subdirectory collection.\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 public\cf0  \cf5 bool\cf0  IsExpanded\par ??        \{\par ??            \cf5 get\cf0  \{ \cf5 return\cf0  _isExpanded; \}\par ??            \cf5 set\par ??\cf0             \{\par ??                \cf5 if\cf0  (_isExpanded != \cf5 value\cf0 )\par ??                \{\par ??                    _isExpanded = \cf5 value\cf0 ;\par ??                    \cf5 if\cf0  (_isExpanded)\par ??                    \{\par ??                        \cf5 if\cf0  (_subdirs.Count == 1 &amp;amp;&amp;amp; _subdirs[0] == \cf6 DirectoryViewModel\cf0 .MarkerDirectory)\par ??                        \{\par ??                            _subdirs.Clear();\par ??                            _data.GetDirectories()\par ??                                .Where(d =&amp;gt; (d.Attributes &amp;amp; (\cf6 FileAttributes\cf0 .Hidden | \cf6 FileAttributes\cf0 .System)) == 0)\par ??                                .ForEach(d =&amp;gt; _subdirs.Add(\cf5 new\cf0  \cf6 DirectoryViewModel\cf0 (d)));\par ??                        \}\par ??                    \}\par ??                    \cf4 // Throw them away to recollect later - implements a refresh.\par ??\cf0                     \cf5 else\par ??\cf0                     \{\par ??                        _subdirs.Clear();\par ??                        _subdirs.Add(\cf6 DirectoryViewModel\cf0 .MarkerDirectory);\par ??                    \}\par ??                \}\par ??\par ??                OnPropertyChanged(\cf7 "IsExpanded"\cf0 );\par ??            \}\par ??        \}\par ??\par ??        \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  List of files in this directory.\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 public\cf0  \cf6 IList\cf0 &amp;lt;\cf6 FileViewModel\cf0 &amp;gt; Files \{ \cf5 get\cf0  \{ \cf5 return\cf0  _files; \} \}\par ??\par ??        \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  List of subdirectories in this directory.\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 public\cf0  \cf6 IList\cf0 &amp;lt;\cf6 DirectoryViewModel\cf0 &amp;gt; Subdirectories \{ \cf5 get\cf0  \{ \cf5 return\cf0  _subdirs; \} \}\par ??\par ??        \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  Count of files in this directory.\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 public\cf0  \cf5 int\cf0  TotalFiles \{ \cf5 get\cf0  \{ \cf5 return\cf0  _files.Count; \} \}\par ??\par ??        \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  Total size of all files in this directory.\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 public\cf0  \cf5 long\cf0  TotalFileSize \{ \cf5 get\cf0  \{ \cf5 return\cf0  _files.Sum(file =&amp;gt; file.Size); \} \}\par ??\par ??        \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  Constructor for the marker directory.  This is used to detect an expansion.\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 private\cf0  DirectoryViewModel()\par ??        \{\par ??            _data = \cf5 null\cf0 ;\par ??        \}\par ??\par ??        \cf3 ///\cf4  \cf3 &amp;lt;summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  Public constructor\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf3 ///\cf4  \cf3 &amp;lt;param name="di"&amp;gt;\cf4 DirectoryInfo to pull information from\cf3 &amp;lt;/param&amp;gt;\par ??\cf0         \cf5 public\cf0  DirectoryViewModel(\cf6 DirectoryInfo\cf0  di)\par ??        \{\par ??            \cf5 if\cf0  (di == \cf5 null\cf0 )\par ??                \cf5 throw\cf0  \cf5 new\cf0  \cf6 ArgumentNullException\cf0 (\cf7 "di"\cf0 );\par ??\par ??            _data = di;\par ??            _files = \cf5 new\cf0  \cf6 ObservableCollection\cf0 &amp;lt;\cf6 FileViewModel\cf0 &amp;gt; \{ \cf6 FileViewModel\cf0 .MarkerFile \};\par ??            _subdirs = \cf5 new\cf0  \cf6 ObservableCollection\cf0 &amp;lt;\cf6 DirectoryViewModel\cf0 &amp;gt; \{ \cf6 DirectoryViewModel\cf0 .MarkerDirectory \};\par ??        \}\par ??    \}\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Sample
ViewModel that wraps a Directory.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DirectoryViewModel&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;ViewModel&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; String
used to send message to main view model about directory selection.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;internal&lt;/span&gt; &lt;span style="COLOR: blue"&gt;const&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; SelectedDirectoryChangedMessage
= &lt;span style="COLOR: #a31515"&gt;@"SelectedDirectoryChanged"&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Marker
directory that signals expansion of the tree.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;internal&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DirectoryViewModel&lt;/span&gt; MarkerDirectory
= &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DirectoryViewModel&lt;/span&gt;();
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; _isSelected,
_isExpanded;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;readonly&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DirectoryInfo&lt;/span&gt; _data;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;readonly&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ObservableCollection&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;FileViewModel&lt;/span&gt;&amp;gt;
_files;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;readonly&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ObservableCollection&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;DirectoryViewModel&lt;/span&gt;&amp;gt;
_subdirs;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Name
of the directory&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Name
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _data.Name;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Full
path + name of the directory&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; FullName
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _data.FullName;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; True/False
whether the directory is selected (i.e. current).&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Selecting
the directory causes it to populate it's file collection.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; IsSelected
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _isSelected;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (_isSelected
!= &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
_isSelected = &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (_isSelected)
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (_files.Count
== 1 &amp;amp;&amp;amp; _files[0] == &lt;span style="COLOR: #2b91af"&gt;FileViewModel&lt;/span&gt;.MarkerFile)
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
_files.Clear();
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
_data.GetFiles()
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
.Where(f =&amp;gt; (f.Attributes &amp;amp; (&lt;span style="COLOR: #2b91af"&gt;FileAttributes&lt;/span&gt;.Hidden
| &lt;span style="COLOR: #2b91af"&gt;FileAttributes&lt;/span&gt;.System)) == 0)
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
.ForEach(f =&amp;gt; _files.Add(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;FileViewModel&lt;/span&gt;(f)));
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
OnPropertyChanged(&lt;span style="COLOR: #a31515"&gt;"TotalFiles"&lt;/span&gt;, &lt;span style="COLOR: #a31515"&gt;"TotalFileSize"&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
SendMessage(SelectedDirectoryChangedMessage, &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;else&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
_files.Clear();
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
_files.Add(&lt;span style="COLOR: #2b91af"&gt;FileViewModel&lt;/span&gt;.MarkerFile);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
OnPropertyChanged(&lt;span style="COLOR: #a31515"&gt;"IsSelected"&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; True/False
if the directory is expanded. Expanding the directory causes it&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; to
fill it's subdirectory collection.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; IsExpanded
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _isExpanded;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (_isExpanded
!= &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
_isExpanded = &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (_isExpanded)
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (_subdirs.Count
== 1 &amp;amp;&amp;amp; _subdirs[0] == &lt;span style="COLOR: #2b91af"&gt;DirectoryViewModel&lt;/span&gt;.MarkerDirectory)
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
_subdirs.Clear();
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
_data.GetDirectories()
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
.Where(d =&amp;gt; (d.Attributes &amp;amp; (&lt;span style="COLOR: #2b91af"&gt;FileAttributes&lt;/span&gt;.Hidden
| &lt;span style="COLOR: #2b91af"&gt;FileAttributes&lt;/span&gt;.System)) == 0)
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
.ForEach(d =&amp;gt; _subdirs.Add(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DirectoryViewModel&lt;/span&gt;(d)));
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
Throw them away to recollect later - implements a refresh.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;else&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
_subdirs.Clear();
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
_subdirs.Add(&lt;span style="COLOR: #2b91af"&gt;DirectoryViewModel&lt;/span&gt;.MarkerDirectory);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
OnPropertyChanged(&lt;span style="COLOR: #a31515"&gt;"IsExpanded"&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; List
of files in this directory.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;FileViewModel&lt;/span&gt;&amp;gt;
Files { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _files;
} }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; List
of subdirectories in this directory.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;DirectoryViewModel&lt;/span&gt;&amp;gt;
Subdirectories { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _subdirs;
} }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Count
of files in this directory.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; TotalFiles
{ &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _files.Count;
} }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Total
size of all files in this directory.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;long&lt;/span&gt; TotalFileSize
{ &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _files.Sum(file
=&amp;gt; file.Size); } }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Constructor
for the marker directory.&amp;nbsp; This is used to detect an expansion.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; DirectoryViewModel()
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _data = &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Public
constructor&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;param
name="di"&amp;gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;DirectoryInfo to pull information from&lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; DirectoryViewModel(&lt;span style="COLOR: #2b91af"&gt;DirectoryInfo&lt;/span&gt; di)
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (di
== &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;throw&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="COLOR: #a31515"&gt;"di"&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _data = di;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _files = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ObservableCollection&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;FileViewModel&lt;/span&gt;&amp;gt;
{ &lt;span style="COLOR: #2b91af"&gt;FileViewModel&lt;/span&gt;.MarkerFile };
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _subdirs = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ObservableCollection&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;DirectoryViewModel&lt;/span&gt;&amp;gt;
{ &lt;span style="COLOR: #2b91af"&gt;DirectoryViewModel&lt;/span&gt;.MarkerDirectory };
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
This file is a bit more complicated – like the &lt;strong&gt;FileViewModel&lt;/strong&gt;, this
wraps a simple data object (a &lt;strong&gt;DirectoryInfo&lt;/strong&gt; in this case).&amp;nbsp;
Notice that it too exposes properties to provide access to various bits of information.&amp;nbsp;
Here you can see that it is creating new properties such as &lt;strong&gt;TotalFileSize&lt;/strong&gt; which
is the sum of all the files sizes in this directory.&amp;nbsp; That’s one of the jobs
of the ViewModel – to provide easily bindable properties for the bits of information
we want to display.&amp;nbsp; In this case, the &lt;strong&gt;TotalFiles&lt;/strong&gt; and &lt;strong&gt;TotalFileSize&lt;/strong&gt; gets
displayed in the &lt;strong&gt;StatusBar&lt;/strong&gt; of the window when the directory has files.
&lt;/p&gt;
&lt;p&gt;
Notice that the directory exposes files and subdirectories in &lt;strong&gt;ObservableCollections&lt;/strong&gt; –
but they are delay populated.&amp;nbsp; This is done so that the &lt;strong&gt;TreeView&lt;/strong&gt; comes
up quickly and we don’t have to enumerate the entire disk to retrieve the directories
and files!&amp;nbsp; When you expand and collapse the nodes in the tree, it is populating
the data.&amp;nbsp; This is done through the &lt;strong&gt;IsExpanded&lt;/strong&gt; property – if
you look back in the View, you will see that the &lt;strong&gt;TreeView&lt;/strong&gt; actually
binds the &lt;strong&gt;TreeViewItem.IsExpanded&lt;/strong&gt; to this property:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green0\blue0;}??\fs28 \cf1 &amp;lt;\cf3 TreeView\cf4  Grid.Column\cf1 ="0"\cf4  ItemsSource\cf1 ="\{\cf3 Binding\cf4  RootDirectory\cf1 \}"\cf0  \par ??                 \cf4  ItemTemplate\cf1 ="\{\cf3 StaticResource\cf4  DirectoryTemplate\cf1 \}"&amp;gt;\par ??\cf3                 \cf1 &amp;lt;\cf3 TreeView.ItemContainerStyle\cf1 &amp;gt;\par ??\cf3                     \cf1 &amp;lt;\cf3 Style\cf4  TargetType\cf1 ="TreeViewItem"&amp;gt;\par ??\cf3                         \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="IsSelected"\cf4  Value\cf1 ="\{\cf3 Binding\cf4  IsSelected\cf1 ,\cf4  Mode\cf1 =TwoWay\}" /&amp;gt;\par ??\cf3                         \cf1 &amp;lt;\cf3 Setter\cf4  Property\cf1 ="IsExpanded"\cf4  Value\cf1 ="\{\cf3 Binding\cf4  IsExpanded\cf1 ,\cf4  Mode\cf1 =TwoWay\}" /&amp;gt;\par ??\cf3                     \cf1 &amp;lt;/\cf3 Style\cf1 &amp;gt;\par ??\cf3                 \cf1 &amp;lt;/\cf3 TreeView.ItemContainerStyle\cf1 &amp;gt;\par ??\cf3             \cf1 &amp;lt;/\cf3 TreeView\cf1 &amp;gt;}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TreeView&lt;/span&gt;&lt;span style="COLOR: red"&gt; Grid.Column&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="0"&lt;/span&gt;&lt;span style="COLOR: red"&gt; ItemsSource&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; RootDirectory&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: red"&gt;ItemTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="COLOR: red"&gt; DirectoryTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;}"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TreeView.ItemContainerStyle&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Style&lt;/span&gt;&lt;span style="COLOR: red"&gt; TargetType&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="TreeViewItem"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="COLOR: red"&gt; Property&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="IsSelected"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; IsSelected&lt;/span&gt;&lt;span style="COLOR: blue"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt; Mode&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=TwoWay}"
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;u&gt;&lt;em&gt;&amp;lt;&lt;/em&gt;&lt;/u&gt;&lt;/span&gt;&lt;u&gt;&lt;em&gt;&lt;span style="COLOR: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="COLOR: red"&gt; Property&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="IsExpanded"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="{&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="COLOR: red"&gt; IsExpanded&lt;/span&gt;&lt;span style="COLOR: blue"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt; Mode&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=TwoWay}"
/&amp;gt;&lt;/span&gt;&lt;/em&gt;&lt;/u&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Style&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TreeView.ItemContainerStyle&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TreeView&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Notice it also binds up the &lt;strong&gt;IsSelected&lt;/strong&gt; property – this is when we
populate the files collection.&amp;nbsp; Since they are observable, they will force the
UI to update when new items are added or removed and we see the Explorer effect we
desire.
&lt;/p&gt;
&lt;p&gt;
Lastly, before we leave this file, notice that when a directory is selected, it makes
a method call to a function called &lt;strong&gt;SendMessage&lt;/strong&gt;:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;SendMessage(SelectedDirectoryChangedMessage, &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;);&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
It passes a string (the key) and an object (the data).&amp;nbsp; This is a built-in service
of the &lt;strong&gt;ViewModel&lt;/strong&gt; base class and it’s the reason why this ViewModel
does not derive from &lt;strong&gt;SimpleViewModel&lt;/strong&gt;, but instead from &lt;strong&gt;ViewModel&lt;/strong&gt; which
is the full version.&amp;nbsp; One of the services provided is a &lt;em&gt;Message Mediator&lt;/em&gt;.&amp;nbsp;
This service basically allows you to loosely couple various objects together – we’ll
see how the target registers, but for now, just notice the sender – it passes a string
key and an object.&amp;nbsp; Any target registered for the given key will receive the
object.&amp;nbsp; There are several overrides for the message mediator which I’ll detail
in a later post.
&lt;/p&gt;
&lt;p&gt;
Ok, let’s switch to the final file – the MainViewModel:
&lt;/p&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;\red128\green128\blue128;\red0\green128\blue0;\red163\green21\blue21;}??\fs28     \cf3 public\cf0  \cf3 class\cf0  \cf4 MainViewModel\cf0  : \cf4 ViewModel\par ??\cf0     \{\par ??\cf3         #region\cf0  Internal Data\par ??        \cf3 private\cf0  \cf4 DirectoryViewModel\cf0  _selectedDirectory;\par ??\cf3         #endregion\par ??\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  Root directory - can be bound to an ItemsControl on the UI.\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf3 public\cf0  \cf4 DirectoryViewModel\cf0 [] RootDirectory \{ \cf3 get\cf0 ; \cf3 private\cf0  \cf3 set\cf0 ; \}\par ??\par ??        \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  Selected (active) directory\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf3 public\cf0  \cf4 DirectoryViewModel\cf0  SelectedDirectory\par ??        \{\par ??            \cf3 get\cf0  \{ \cf3 return\cf0  _selectedDirectory; \}\par ??            \cf3 set\cf0  \{ _selectedDirectory = \cf3 value\cf0 ; OnPropertyChanged(\cf7 "SelectedDirectory"\cf0 ); \}\par ??        \}\par ??\par ??        \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  Command to display the About Box.\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf3 public\cf0  \cf4 ICommand\cf0  DisplayAboutCommand \{ \cf3 get\cf0 ; \cf3 private\cf0  \cf3 set\cf0 ; \}\par ??\par ??        \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  Command to end the application\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf3 public\cf0  \cf4 ICommand\cf0  CloseAppCommand \{ \cf3 get\cf0 ; \cf3 private\cf0  \cf3 set\cf0 ; \}\par ??\par ??        \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  Main constructor\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf3 public\cf0  MainViewModel()\par ??        \{\par ??            \cf6 // Register this instance with the message mediator so it can receive\par ??\cf0             \cf6 // messages from other views/viewmodels.\par ??\cf0             RegisterWithMessageMediator();\par ??\par ??            \cf6 // Create our commands\par ??\cf0             DisplayAboutCommand = \cf3 new\cf0  \cf4 DelegatingCommand\cf0 (OnShowAbout);\par ??            CloseAppCommand = \cf3 new\cf0  \cf4 DelegatingCommand\cf0 (OnCloseApp);\par ??\par ??            \cf6 // Fill in the root directory from C:\par ??\cf0             RootDirectory = \cf3 new\cf0 [] \{ \cf3 new\cf0  \cf4 DirectoryViewModel\cf0 (\cf3 new\cf0  \cf4 DirectoryInfo\cf0 (\cf7 @"C:\\"\cf0 )) \{ IsSelected = \cf3 true\cf0  \} \};\par ??        \}\par ??\par ??        \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  This method closes the application window.\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf3 private\cf0  \cf3 void\cf0  OnCloseApp()\par ??        \{\par ??            \cf6 // Ask the view to close.\par ??\cf0             RaiseCloseRequest();\par ??        \}\par ??\par ??        \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  This method displays the About Box.\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf3 private\cf0  \cf3 void\cf0  OnShowAbout()\par ??        \{\par ??            \cf6 // Get the message visualizer service from the service resolver.\par ??\cf0             \cf6 // All services can be replaced, so make sure to check if we have something\par ??\cf0             \cf6 // registered.\par ??\cf0             \cf4 IMessageVisualizer\cf0  messageVisualizer = Resolve&amp;lt;\cf4 IMessageVisualizer\cf0 &amp;gt;();\par ??            \cf3 if\cf0  (messageVisualizer != \cf3 null\cf0 )\par ??            \{\par ??                \cf6 // Show a message box.\par ??\cf0                 messageVisualizer.Show(\cf7 "About File Explorer Sample"\cf0 , \cf7 "File Explorer Sample 1.0"\cf0 , \cf4 MessageButtons\cf0 .OK);\par ??            \}\par ??        \}\par ??\par ??        \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  This method is invoked by the message mediator when a DirectoryViewModel is selected.\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0         \cf5 ///\cf6  \cf5 &amp;lt;param name="newDirectory"&amp;gt;\cf6 DirectoryViewModel that is now active\cf5 &amp;lt;/param&amp;gt;\par ??\cf0         [\cf4 MessageMediatorTarget\cf0 (\cf4 DirectoryViewModel\cf0 .SelectedDirectoryChangedMessage)]\par ??        \cf3 private\cf0  \cf3 void\cf0  OnCurrentDirectoryChanged(\cf4 DirectoryViewModel\cf0  newDirectory)\par ??        \{\par ??            SelectedDirectory = newDirectory;\par ??        \}\par ??    \}\par ??}
--&gt;
&lt;div style="FONT-FAMILY: consolas; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;MainViewModel&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;ViewModel&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DirectoryViewModel&lt;/span&gt; _selectedDirectory;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Root
directory - can be bound to an ItemsControl on the UI.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DirectoryViewModel&lt;/span&gt;[]
RootDirectory { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Selected
(active) directory&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DirectoryViewModel&lt;/span&gt; SelectedDirectory
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _selectedDirectory;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt; {
_selectedDirectory = &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;; OnPropertyChanged(&lt;span style="COLOR: #a31515"&gt;"SelectedDirectory"&lt;/span&gt;);
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Command
to display the About Box.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ICommand&lt;/span&gt; DisplayAboutCommand
{ &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Command
to end the application&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ICommand&lt;/span&gt; CloseAppCommand
{ &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;;
}
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Main
constructor&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; MainViewModel()
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
Register this instance with the message mediator so it can receive&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
messages from other views/viewmodels.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegisterWithMessageMediator();
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
Create our commands&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DisplayAboutCommand
= &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DelegatingCommand&lt;/span&gt;(OnShowAbout);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseAppCommand
= &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DelegatingCommand&lt;/span&gt;(OnCloseApp);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
Fill in the root directory from C:&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RootDirectory = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt;[]
{ &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DirectoryViewModel&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DirectoryInfo&lt;/span&gt;(&lt;span style="COLOR: #a31515"&gt;@"C:\"&lt;/span&gt;))
{ IsSelected = &lt;span style="COLOR: blue"&gt;true&lt;/span&gt; } };
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; This
method closes the application window.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; OnCloseApp()
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
Ask the view to close.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RaiseCloseRequest();
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; This
method displays the About Box.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; OnShowAbout()
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
Get the message visualizer service from the service resolver.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
All services can be replaced, so make sure to check if we have something&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
registered.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: #2b91af"&gt;IMessageVisualizer&lt;/span&gt; messageVisualizer
= Resolve&amp;lt;&lt;span style="COLOR: #2b91af"&gt;IMessageVisualizer&lt;/span&gt;&amp;gt;();
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (messageVisualizer
!= &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
Show a message box.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
messageVisualizer.Show(&lt;span style="COLOR: #a31515"&gt;"About File Explorer Sample"&lt;/span&gt;, &lt;span style="COLOR: #a31515"&gt;"File
Explorer Sample 1.0"&lt;/span&gt;, &lt;span style="COLOR: #2b91af"&gt;MessageButtons&lt;/span&gt;.OK);
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; This
method is invoked by the message mediator when a DirectoryViewModel is selected.&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;param
name="newDirectory"&amp;gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;DirectoryViewModel that is
now active&lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="COLOR: #2b91af"&gt;MessageMediatorTarget&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;DirectoryViewModel&lt;/span&gt;.SelectedDirectoryChangedMessage)]
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; OnCurrentDirectoryChanged(&lt;span style="COLOR: #2b91af"&gt;DirectoryViewModel&lt;/span&gt; newDirectory)
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectedDirectory
= newDirectory;
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Here you can see the same basic principle – it exposes properties the UI binds to.&amp;nbsp;
In particular here we see Commands being exposed as properties.&amp;nbsp; Commands is
what drives a UI – it allows a UI to trigger actions in the ViewModel.&amp;nbsp; We are
using two basic commands here – &lt;strong&gt;CloseAppCommand&lt;/strong&gt; and &lt;strong&gt;DisplayAboutCommand&lt;/strong&gt;.&amp;nbsp;
If you look at the constructor, you will see they are backed by a &lt;strong&gt;DelegatingCommand&lt;/strong&gt; object.&amp;nbsp;
This is a common pattern found in almost every MVVM framework out there, but it’s
essentially a pair of delegates that are called when the command is checked and when
it is invoked.&amp;nbsp; In our cases here, we always allow the command to execute so
we only provide the execution handler (a second parameter would define the typical &lt;strong&gt;CanExecute&lt;/strong&gt; handler).&amp;nbsp;
There are a couple of overrides for this object as well – one that provides type safety
for the parameter and one that always uses object and allows for any object as data.&amp;nbsp;
Again here we are being simple and not using any parameters so our bound methods are
both no-parameter methods.
&lt;/p&gt;
&lt;p&gt;
The &lt;strong&gt;CloseAppCommand &lt;/strong&gt;command invokes the &lt;strong&gt;OnCloseApp&lt;/strong&gt; method
– which in turn calls &lt;strong&gt;RaiseCloseRequest&lt;/strong&gt;.&amp;nbsp; This JulMar ViewModel
method will close the view associated with the ViewModel &lt;em&gt;if you associated the
two using the &lt;strong&gt;ViewModelCreator&lt;/strong&gt;&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
The &lt;strong&gt;OnShowAbout&lt;/strong&gt; method is called by the &lt;strong&gt;DisplayAboutCommand.&amp;nbsp; &lt;/strong&gt;It
uses another registered service in the library called &lt;strong&gt;IMessageVisualizer&lt;/strong&gt;.&amp;nbsp;
The message visualizer is used to display a simple message box from the ViewModel.&amp;nbsp;
Here we use it to display an about box.&amp;nbsp; There are several other services I’ll
talk about in the next post.
&lt;/p&gt;
&lt;p&gt;
Notice that the &lt;strong&gt;RootDirectory&lt;/strong&gt; property which is data bound to the &lt;strong&gt;TreeView.ItemsSource&lt;/strong&gt; is
exposes as an array – this is because the &lt;strong&gt;TreeView&lt;/strong&gt; always expects
a collection of items even though we always have a single root item.&amp;nbsp; So we wrap
a single &lt;strong&gt;DirectoryViewModel&lt;/strong&gt; into a collection and return it as the
property.
&lt;/p&gt;
&lt;p&gt;
If you look at the end of the file you will find our message mediator target – &lt;strong&gt;OnCurrentDirectoryChanged&lt;/strong&gt;.&amp;nbsp;
We use this as a way to see when a new directory has been selected in the tree.&amp;nbsp;
For a &lt;strong&gt;ListBox&lt;/strong&gt;, we could&amp;nbsp; have just data bound the &lt;strong&gt;SelectedItem&lt;/strong&gt; to
the property, but &lt;strong&gt;TreeView&lt;/strong&gt; isn’t a selector and doesn’t expose a &lt;strong&gt;SelectedItem&lt;/strong&gt; property.&amp;nbsp;
Instead you either have to catch an event (I’ll show how you can do that in a future
blog entry about the MVVM helpers library) or use this little mediator trick.
&lt;/p&gt;
&lt;p&gt;
The &lt;strong&gt;[MessageMediatorTarget]&lt;/strong&gt; attribute is the secret sauce here –
it tells the message mediator to wire this method up to the passed string key.&amp;nbsp;
When that key is used in a &lt;strong&gt;SendMessage&lt;/strong&gt; call &lt;em&gt;and&lt;/em&gt; the parameter
type is a &lt;strong&gt;DirectoryViewModel&lt;/strong&gt; (or derived type), the mediator will
invoke this method.&amp;nbsp; This all happens without any direct linkage between the &lt;strong&gt;DirectoryViewModel&lt;/strong&gt; and
the &lt;strong&gt;MainViewModel&lt;/strong&gt;.&amp;nbsp; The delegate instance is held in a weak
reference so there’s no concern for memory leaks.
&lt;/p&gt;
&lt;p&gt;
The second part of the magic is in the constructor – the message mediator is an opt-in
service, so notice the call to &lt;strong&gt;RegisterWithMessageMediator()&lt;/strong&gt;.&amp;nbsp;
This is what causes this instance to be noticed by the mediator.&amp;nbsp; There is a
balancing &lt;strong&gt;UnregisterWithMessageMediator&lt;/strong&gt; if you ever want to unhook
the instance.&amp;nbsp; You can also use methods to directly wire up handlers (without
attributes).&amp;nbsp; This is useful when you are dynamically linking things together
at runtime vs. compile time.
&lt;/p&gt;
&lt;p&gt;
Well, that covers the basics of the framework Views + ViewModels.&amp;nbsp; In the next
post, I will detail the service registration and basic service mechanism that’s built
into the framework for you to use.&amp;nbsp; Until then, ciao!
&lt;/p&gt;</description>
      <comments>http://www.julmar.com/blog/mark/CommentView,guid,513ec8da-076b-4f88-91be-2151f0010610.aspx</comments>
      <category>.NET</category>
      <category>Code</category>
      <category>MVVM</category>
      <category>WPF</category>
    </item>
    <item>
      <trackback:ping>http://www.julmar.com/blog/mark/Trackback.aspx?guid=27a95721-cf5e-4f75-9d90-d8ced629ae78</trackback:ping>
      <pingback:server>http://www.julmar.com/blog/mark/pingback.aspx</pingback:server>
      <pingback:target>http://www.julmar.com/blog/mark/PermaLink,guid,27a95721-cf5e-4f75-9d90-d8ced629ae78.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.julmar.com/blog/mark/CommentView,guid,27a95721-cf5e-4f75-9d90-d8ced629ae78.aspx</wfw:comment>
      <wfw:commentRss>http://www.julmar.com/blog/mark/SyndicationService.asmx/GetEntryCommentsRss?guid=27a95721-cf5e-4f75-9d90-d8ced629ae78</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just put the latest version of the MVVM helpers online - <a href="http://www.julmar.com/samples/mvvmhelpers.zip">mvvmhelpers.zip</a></p>
        <p>
There's a bunch of new stuff in it - check the release notes for the highlights. 
There's a set of breaking changes in it as well, specifically I've moved several of
the attached behaviors into the new Blend model.  Originally in my local version
I did it to the JulMar.Wpf.Helpers.dll and got a dependency against System.Windows.Interactivity.dll.
</p>
        <p>
I decided that for this release I didn't want to force that dependency so I created
a secondary assembly JulMar.Wpf.Behaviors.dll which has all those behaviors in it. 
The breaking change is I removed the original attached behaviors from the library
(DoubleClickBehavior, NumericTextBehavior, MouseDragBehavior) in favor of using these
new versions.  I did update the sample to show how they get used.
</p>
        <p>
In a recent Essential WPF class, one of the students wanted an ObservableDictionary
which we whipped up there - I cleaned up that implementation somewhat and added it
into this library along with some unit tests for it.
</p>
        <p>
Again, please check the readme included in the .zip file -- as always you are free
to do whatever you like with this code.  If you do anything interesting or fun,
let me know!
</p>
        <p>
 
</p>
      </body>
      <title>MVVM Helpers v1.03</title>
      <guid isPermaLink="false">http://www.julmar.com/blog/mark/PermaLink,guid,27a95721-cf5e-4f75-9d90-d8ced629ae78.aspx</guid>
      <link>http://www.julmar.com/blog/mark/2009/08/04/MVVMHelpersV103.aspx</link>
      <pubDate>Tue, 04 Aug 2009 18:14:38 GMT</pubDate>
      <description>&lt;p&gt;
I just put the latest version of the MVVM helpers online - &lt;a href="http://www.julmar.com/samples/mvvmhelpers.zip"&gt;mvvmhelpers.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
There's a bunch of new stuff in it - check the release notes for the highlights.&amp;nbsp;
There's a set of breaking changes in it as well, specifically I've moved several of
the attached behaviors into the new Blend model.&amp;nbsp; Originally in my local version
I did it to the JulMar.Wpf.Helpers.dll and got a dependency against System.Windows.Interactivity.dll.
&lt;/p&gt;
&lt;p&gt;
I decided that for this release I didn't want to force that dependency so I created
a secondary assembly JulMar.Wpf.Behaviors.dll which has all those behaviors in it.&amp;nbsp;
The breaking change is I removed the original attached behaviors from the library
(DoubleClickBehavior, NumericTextBehavior, MouseDragBehavior) in favor of using these
new versions.&amp;nbsp; I did update the sample to show how they get used.
&lt;/p&gt;
&lt;p&gt;
In a recent Essential WPF class, one of the students wanted an ObservableDictionary
which we whipped up there - I cleaned up that implementation somewhat and added it
into this library along with some unit tests for it.
&lt;/p&gt;
&lt;p&gt;
Again, please check the readme included in the .zip file -- as always you are free
to do whatever you like with this code.&amp;nbsp; If you do anything interesting or fun,
let me know!
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;</description>
      <comments>http://www.julmar.com/blog/mark/CommentView,guid,27a95721-cf5e-4f75-9d90-d8ced629ae78.aspx</comments>
      <category>.NET</category>
      <category>WPF</category>
      <category>MVVM</category>
    </item>
  </channel>
</rss>