<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://interactiveasp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Nate's Stuff : WPF, SmartForms, Data Binding, XAML</title><link>http://interactiveasp.net/blogs/natesstuff/archive/tags/WPF/SmartForms/Data+Binding/XAML/default.aspx</link><description>Tags: WPF, SmartForms, Data Binding, XAML</description><dc:language>en</dc:language><generator>CommunityServer 2008 (Build: 30417.1769)</generator><item><title>6 Things I Bet You Didn't Know About Data Binding in WPF</title><link>http://interactiveasp.net/blogs/natesstuff/archive/2009/01/21/6-things-i-bet-you-didn-t-know-about-data-binding-in-wpf.aspx</link><pubDate>Wed, 21 Jan 2009 22:26:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:396</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>19</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=396</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=396</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2009/01/21/6-things-i-bet-you-didn-t-know-about-data-binding-in-wpf.aspx#comments</comments><description>&lt;p&gt;&lt;img height="99" width="99" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/winFX_5F00_3.jpg" align="left" alt="winFX" border="0" style="border-right: 0px; border-top: 0px; margin: 0px 10px 5px 0px; border-left: 0px; border-bottom: 0px" /&gt; I fell in love with WPF the first time I saw it in action!&amp;nbsp; WPF is a thing of pure beauty!&amp;nbsp; Anyway, from the second I saw how the data binding worked I knew that there was going to be a lot to figure out there!&amp;nbsp; It also seems as though there is no real data binding expert -- or the experts don't blog too much about it.&amp;nbsp; I created my &lt;a target="_blank" href="http://interactiveasp.net/media/p/23.aspx"&gt;XAML Cheat Sheet&lt;/a&gt; shortly after feeling like I had some kind of grasp on the concept.&amp;nbsp; It is still a great reference for basic bindings, but when you are real serious about binding you'll have to do better than that.&lt;/p&gt;
&lt;p&gt;So I have been working on a project in my spare time called SmartForms 2.0 (more on that later) and I have had to do some very difficult things using bindings.&amp;nbsp; In my previous experience with WPF I would either create a cleaver type converter and/or just give up and set the value/state of the controls in code (eww!).&amp;nbsp; This time is different and I have to make data binding work.&amp;nbsp; &lt;/p&gt;
&lt;h2&gt;Example #1&lt;/h2&gt;
&lt;p&gt;Lets say that you need to bind a bool? (nullable boolean) type to a checkbox.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;CheckBox &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;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeBooleanField&lt;/span&gt;&lt;span style="color: blue"&gt;}"&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Checkbox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;CheckBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Produces:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DataBound-Checkbox_5F00_2.png"&gt;&lt;img height="68" width="178" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DataBound-Checkbox_5F00_thumb.png" alt="DataBound Checkbox" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;You will notice that the checkbox is in a neither checked nor unchecked state.&amp;nbsp; Setting IsThreeState="False" doesn't help you as it is false by default. I want the checkebox to be unchecked by default but have no control over the type or the initialization of the type.&amp;nbsp; Check this out:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;CheckBox &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;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeBooleanField&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;br /&gt;              &lt;/span&gt;&lt;span style="color: red"&gt;TargetNullValue&lt;/span&gt;&lt;span style="color: blue"&gt;=false}"&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;br /&gt;     &lt;/span&gt;&lt;span style="color: #a31515"&gt;Checkbox&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;CheckBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;And now we have normal looking checkboxes!&amp;nbsp; The best part is that this method doesn't mutate our property.&amp;nbsp; This was exactly what I was looking for!&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DataBound-Checkbox-Fixed_5F00_2.png"&gt;&lt;img height="66" width="164" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DataBound-Checkbox-Fixed_5F00_thumb.png" alt="DataBound Checkbox Fixed" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;Example #2&lt;/h2&gt;
&lt;p&gt;The following XAML is pretty straight forward.&amp;nbsp; It is simply a text box that we expect to put a city into.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&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;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;              &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;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;span style="color: #a31515"&gt;City&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: blue"&gt;&amp;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;SomeTextField&lt;/span&gt;&lt;span style="color: blue"&gt;}" /&amp;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;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Produces:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Textbox-No-Default_5F00_2.png"&gt;&lt;img height="87" width="175" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Textbox-No-Default_5F00_thumb.png" alt="Databing Textbox No Default" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;What if the item we are attempting to data bind to is not available.&amp;nbsp; It's not going to be null, the binding will just fail.&amp;nbsp; This should work well:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&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;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;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;span style="color: #a31515"&gt;City&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: blue"&gt;&amp;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;SomeTextField&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;FallbackValue&lt;/span&gt;&lt;span style="color: blue"&gt;=UNBOUND}" /&amp;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;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Produces:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Textbox-Default_5F00_2.png"&gt;&lt;img height="90" width="167" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Textbox-Default_5F00_thumb.png" alt="Databing Textbox Default" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;Example #3&lt;/h2&gt;
&lt;p&gt;This is a much more common occurrence.&amp;nbsp; You have a number that you need to format in a textbox.&amp;nbsp; This example shows the decimal value with no real format at all.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&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;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;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;span style="color: #a31515"&gt;Cost&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: blue"&gt;&amp;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;SomeDecimalField}" &lt;span style="color: blue"&gt;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;br /&gt;&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;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Produces:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Decimal-Non-Formatted_5F00_2.png"&gt;&lt;img height="100" width="170" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Decimal-Non-Formatted_5F00_thumb.png" alt="Databing Decimal Non Formatted" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;There are a few ways to get the format we desire.&amp;nbsp; The first example uses a static resource:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&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;clr&lt;/span&gt;&lt;span style="color: blue"&gt;="clr-namespace:System;assembly=mscorlib"&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;pre class="code"&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;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel.Resources&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;clr&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;String &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;="formatStr"&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;{0:C}&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;clr&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;String&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel.Resources&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;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;span style="color: #a31515"&gt;Cost&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: blue"&gt;&amp;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;SomeDecimalField&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;br /&gt;             &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&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;formatStr&lt;/span&gt;&lt;span style="color: blue"&gt;}}" /&amp;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;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can put the string inline but it looks really funny and for some reason the there has to be a non-whitespace character before the formatting expression which you may not want:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&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;SomeDecimalField&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;br /&gt;         &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;=Cost: {&lt;/span&gt;0&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;C&lt;/span&gt;&lt;span style="color: blue"&gt;}}" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This formats the string to look like "Cost: $1,2398.00".&amp;nbsp; You can see how that could cause lots of confusion and would be undesirable.&amp;nbsp; There is a way we can get the binding to work a little better:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&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;SomeDecimalField&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;br /&gt;             &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;={}{&lt;/span&gt;0&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;C&lt;/span&gt;&lt;span style="color: blue"&gt;}}" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;OR&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&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;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;="SomeDecimalField" &lt;br /&gt;              &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;="{}{0:C}" /&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;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;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The result is a nicely formatted output:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Decimal-Formatted_5F00_2.png"&gt;&lt;img height="99" width="177" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Decimal-Formatted_5F00_thumb.png" alt="Databing Decimal Formatted" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Notice how the binding was applied? This is how you apply MultiBindings which is the next topic.&lt;/p&gt;
&lt;h2&gt;Example #4&lt;/h2&gt;
&lt;p&gt;What if you want the value of one or more fields to exist in a single binding?&amp;nbsp; That is where MultiBindings shine!&amp;nbsp; Check out this very easy example:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&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;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;             &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;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;span style="color: #a31515"&gt;Name&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: blue"&gt;&amp;gt;            
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;MultiBinding &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;="{}{0}, {1}"&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;="LastName" /&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;="FirstName" /&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;MultiBinding&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;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;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Results:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Multi-Binding_5F00_2.png"&gt;&lt;img height="99" width="196" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Multi-Binding_5F00_thumb.png" alt="Multi Binding" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;Example #5&lt;/h2&gt;
&lt;p&gt;Validation can happen at the point of binding. This can be handy if the objects you are binding to have logic built in.&amp;nbsp; For example, lets say you have a property for birth date.&amp;nbsp; Obviously the person can not be born in the future!&amp;nbsp; Here is how we avoid such rotten input!&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime &lt;/span&gt;birthdate;
&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime &lt;/span&gt;BrithDate {
    &lt;span style="color: blue"&gt;get &lt;/span&gt;{ &lt;span style="color: blue"&gt;return &lt;/span&gt;birthdate; }
    &lt;span style="color: blue"&gt;set &lt;/span&gt;{
        &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: blue"&gt;value &lt;/span&gt;&amp;gt; &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.Today)
            &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ArgumentException&lt;/span&gt;(&lt;br /&gt;               &lt;span style="color: #a31515"&gt;"Person can not be born in the future!"&lt;/span&gt;);
        birthdate = &lt;span style="color: blue"&gt;value&lt;/span&gt;;
    }
}&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And the XAML:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&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;="5" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;br /&gt;           &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;           &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;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;span style="color: #a31515"&gt;Birthdate&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: blue"&gt;&amp;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;BrithDate&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;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;=d, 
                            &lt;/span&gt;&lt;span style="color: red"&gt;NotifyOnValidationError&lt;/span&gt;&lt;span style="color: blue"&gt;=true, 
                            &lt;/span&gt;&lt;span style="color: red"&gt;ValidatesOnExceptions&lt;/span&gt;&lt;span style="color: blue"&gt;=true}" /&amp;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;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Binding-No-Error_5F00_4.png"&gt;&lt;img height="99" width="169" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Binding-No-Error_5F00_thumb_5F00_1.png" alt="Binding No Error" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Binding-Error_5F00_4.png"&gt;&lt;img height="103" width="169" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Binding-Error_5F00_thumb_5F00_1.png" alt="Binding Error" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The error can also be styled if required.&amp;nbsp; Shown is the default style (nothing custom).&lt;/p&gt;
&lt;h2&gt;Example #6&lt;/h2&gt;
&lt;p&gt;The last example is for something called PriorityBinding.&amp;nbsp; This is poorly named in my opinion as it would be better called CascadingBinding.&amp;nbsp; The point to PriorityBinding is to name multiple data bindings in order of most desirable to least desirable. This way if the first binding fails, is empty and/or default, another binding can take it's place.&amp;nbsp; You may have to be a little imaginative to think of such a scenario, but this kind of thing could be useful so I'm glad it's there.&amp;nbsp; Just for fun, I am using the IsAsync field as well.&amp;nbsp; This tells WPF to use a thread other than the GUI thread to retrieve this property.&amp;nbsp; This is important for properties that take a long time to return as it will leave your app unresponsive until the value is bound.&amp;nbsp; In the case of this example without that attribute the window will not show until the 5 seconds had elapsed.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private string &lt;/span&gt;fname;
&lt;span style="color: blue"&gt;public string &lt;/span&gt;FirstName {
&lt;span style="color: blue"&gt;     get &lt;/span&gt;{
          &lt;span style="color: #2b91af"&gt;Thread&lt;/span&gt;.Sleep(5000);
          &lt;span style="color: blue"&gt;return &lt;/span&gt;fname; 
     }
          &lt;span style="color: blue"&gt;set &lt;/span&gt;{ fname = &lt;span style="color: blue"&gt;value&lt;/span&gt;; }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;Xaml:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&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;="5" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;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;span style="color: #a31515"&gt;Name&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: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;PriorityBinding&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;="LastNameNonExistant" &lt;br /&gt;                     &lt;/span&gt;&lt;span style="color: red"&gt;IsAsync&lt;/span&gt;&lt;span style="color: blue"&gt;="True" /&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;="FirstName" &lt;br /&gt;                     &lt;/span&gt;&lt;span style="color: red"&gt;IsAsync&lt;/span&gt;&lt;span style="color: blue"&gt;="True" /&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;PriorityBinding&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;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;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Priority-Binding_5F00_2.png"&gt;&lt;img height="97" width="175" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Priority-Binding_5F00_thumb.png" alt="Priority Binding" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Another neat little thing to know is that the Hierarchy for Binding is Binding -&amp;gt; BindingBase -&amp;gt; MarkupExtension -&amp;gt; Object.&amp;nbsp; Unlike much of the rest of the .NET Framework you can actually inherit from any of these classes and provide support for your customized binding needs.&amp;nbsp; That is exactly what I am doing for SmartForms 2.0!&amp;nbsp; I created a binding class called DataBinding and it looks a little like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&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;db&lt;/span&gt;&lt;span style="color: blue"&gt;="clr-namespace:SmartForms2.Binding;assembly=SmartForms2"&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;pre class="code"&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;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="firstName" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="175" &lt;br /&gt;         &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;db&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataBinding &lt;/span&gt;&lt;span style="color: red"&gt;Data&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;/span&gt;&lt;span style="color: red"&gt;DataSource&lt;/span&gt;&lt;span style="color: blue"&gt;=DB1}" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;My DataBinding class inherits directly from MarkupExtension so all I had to do is implement the abstract method ProvideValue.&lt;/p&gt;
&lt;h5&gt;Links:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.multibinding.aspx" title="http://msdn.microsoft.com/en-us/library/system.windows.data.multibinding.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.windows.data.multibinding.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc716880.aspx" title="http://msdn.microsoft.com/en-us/library/cc716880.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc716880.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.prioritybinding.aspx" title="http://msdn.microsoft.com/en-us/library/system.windows.data.prioritybinding.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.windows.data.prioritybinding.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase_members.aspx" title="http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase_members.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase_members.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.binding.isasync.aspx" title="http://msdn.microsoft.com/en-us/library/system.windows.data.binding.isasync.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.windows.data.binding.isasync.aspx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=396" width="1" height="1"&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/XAML/default.aspx">XAML</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/WPF/default.aspx">WPF</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Tips+_2600_amp_3B00_+Tricks/default.aspx">Tips &amp;amp; Tricks</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/SmartForms/default.aspx">SmartForms</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Data+Binding/default.aspx">Data Binding</category></item></channel></rss>