<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Zeeshan Amjad&#039;s WPF Blog</title>
	<atom:link href="http://zamjad.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://zamjad.wordpress.com</link>
	<description>My WPF programming experiments</description>
	<lastBuildDate>Mon, 16 Jan 2012 23:33:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='zamjad.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Zeeshan Amjad&#039;s WPF Blog</title>
		<link>http://zamjad.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://zamjad.wordpress.com/osd.xml" title="Zeeshan Amjad&#039;s WPF Blog" />
	<atom:link rel='hub' href='http://zamjad.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Using Mediator to communicate between user controls: Part 5</title>
		<link>http://zamjad.wordpress.com/2012/01/11/using-mediator-to-communicate-between-user-controls-part-5/</link>
		<comments>http://zamjad.wordpress.com/2012/01/11/using-mediator-to-communicate-between-user-controls-part-5/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 05:08:05 +0000</pubDate>
		<dc:creator>Zeeshan Amjad</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Mediator]]></category>
		<category><![CDATA[DynamicInvoke]]></category>

		<guid isPermaLink="false">https://zamjad.wordpress.com/?p=1762</guid>
		<description><![CDATA[We made a mediator that can register different type of messages with different type of call back methods here. But there are still two problems in it. The first problem is that we have to pass the object as a parameter to the call back method and then do the casting. In other words it [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1762&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We made a mediator that can register different type of messages with different type of call back methods <a href="http://zamjad.wordpress.com/2012/01/09/using-mediator-to-communicate-between-user-controls-part-4/">here</a>. But there are still two problems in it. The first problem is that we have to pass the object as a parameter to the call back method and then do the casting. In other words it is not type safe. The other problem is that once message is registered then there is no way to unregister the message. Let’s handle both problems one by one. </p>
<p>Type safety we can handle by using generics. But there is going to be one change in the internal data structure i.e. dictionary to store call back method. Now we don’t know in advance what will be the parameter of the call back method, therefore we are creating list of Delegate instead of Action&lt;object&gt;. Here is our new dictionary object to store call back methods against messages. </p>
<div style="width:496px;display:block;float:none;margin-left:auto;margin-right:auto;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:7f330256-dace-42d8-bc6d-a49c0df9abb3" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;"><span style="color:#0000ff;">private</span> <span style="color:#2b91af;">Dictionary</span>&lt;<span style="color:#0000ff;">string</span>, <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Delegate</span>&gt;&gt; actions = <br />     <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Dictionary</span>&lt;<span style="color:#0000ff;">string</span>, <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Delegate</span>&gt;&gt;();</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Now come to Register method. We make this method generic so we can pass any parameter to Action delegate. Here is modified code of our Register method. </p>
<div style="width:496px;display:block;float:none;margin-left:auto;margin-right:auto;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:96ce4a9c-2583-4cd8-9592-872e348dbe47" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;"><span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Register&lt;T&gt;(<span style="color:#0000ff;">string</span> message, <span style="color:#2b91af;">Action</span>&lt;T&gt; action)<br /> {<br />     <span style="color:#0000ff;">if</span> (!actions.ContainsKey(message))<br />     {<br />         actions[message] = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Delegate</span>&gt;();<br />     }<br />     <br />     actions[message].Add(action);<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Note that we can add the Action&lt;T&gt; type object inside the List&lt;Delegate&gt;. Now we have to specify the parameter type of the delegate at the time of registering the message. Here is a code to register the callback methods. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:11376e5f-02d1-421b-a512-3976f0564fe6" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;">Mediator = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Mediator</span>();<br /> Mediator.Register&lt;<span style="color:#2b91af;">Student</span>&gt;(<span style="color:#a31515;">&quot;mymessage1&quot;</span>, studentform.Notify);<br /> Mediator.Register&lt;<span style="color:#2b91af;">Student</span>&gt;(<span style="color:#a31515;">&quot;mymessage1&quot;</span>, studentlist.Notify);<br />     <br /> Mediator.Register&lt;<span style="color:#2b91af;">Student</span>&gt;(<span style="color:#a31515;">&quot;mymessage2&quot;</span>, studentform.AnotherNotify);</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Its main advantage is that now we don’t have to do the typecasting inside the call back method, because call back method accept the correct type. Our call back method is quite simple now. Here is a code of our new call back method. </p>
<div style="width:496px;display:block;float:none;margin-left:auto;margin-right:auto;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:18bb396f-64c4-43e7-a117-5c20a78afc7a" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;"><span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Notify(<span style="color:#2b91af;">Student</span> student)<br /> {<br />     DataContext = student;<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Now let’s come to another problem i.e. unregister the callback method. This code is almost opposite of register method. First check if there is any method register against the given method, then remove it and if the list of call back methods empty then remove that entry from the registry. Here is a code of unregister method. </p>
<div style="width:496px;display:block;float:none;margin-left:auto;margin-right:auto;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ac608285-fb21-4906-b371-872fa697f6c1" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;"><span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> UnRegister&lt;T&gt;(<span style="color:#0000ff;">string</span> message, <span style="color:#2b91af;">Action</span>&lt;T&gt; action)<br /> {<br />     <span style="color:#0000ff;">if</span> (actions.ContainsKey(message))<br />     {<br />         <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Delegate</span>&gt; actionlist = actions[message];</p>
<p>         actionlist.Remove(action);</p>
<p>         <span style="color:#0000ff;">if</span> (actionlist.Count == 0)<br />             actions.Remove(message);<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Here is the usage of this method. </p>
<p>&#160;</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:fd5d53b2-79f4-4dfb-8be7-450f07c828d6" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;">Mediator.UnRegister&lt;<span style="color:#2b91af;">Student</span>&gt;(<span style="color:#a31515;">&quot;mymessage1&quot;</span>, studentform.Notify);<br /> Mediator.UnRegister&lt;<span style="color:#2b91af;">Student</span>&gt;(<span style="color:#a31515;">&quot;mymessage1&quot;</span>, studentlist.Notify);<br /> Mediator.UnRegister&lt;<span style="color:#2b91af;">Student</span>&gt;(<span style="color:#a31515;">&quot;mymessage1&quot;</span>, studentlist.Notify);</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Note that even if we register the same call back method more than once, then it has no effect. Here is complete C# code of our new mediator class. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6c978769-d13a-4a83-befa-0c483ff370d9" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"> <span style="color:#0000ff;">using</span> System;<br /> <span style="color:#0000ff;">using</span> System.Collections.Generic;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">Mediator</span><br />     {<br />         <span style="color:#0000ff;">private</span> <span style="color:#2b91af;">Dictionary</span>&lt;<span style="color:#0000ff;">string</span>, <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Delegate</span>&gt;&gt; actions = <br />             <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Dictionary</span>&lt;<span style="color:#0000ff;">string</span>, <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Delegate</span>&gt;&gt;();</p>
<p>         <span style="color:#0000ff;">public</span> Mediator()<br />         {<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Register&lt;T&gt;(<span style="color:#0000ff;">string</span> message, <span style="color:#2b91af;">Action</span>&lt;T&gt; action)<br />         {<br />             <span style="color:#0000ff;">if</span> (!actions.ContainsKey(message))<br />             {<br />                 actions[message] = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Delegate</span>&gt;();<br />             }<br />             <br />             actions[message].Add(action);<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> UnRegister&lt;T&gt;(<span style="color:#0000ff;">string</span> message, <span style="color:#2b91af;">Action</span>&lt;T&gt; action)<br />         {<br />             <span style="color:#0000ff;">if</span> (actions.ContainsKey(message))<br />             {<br />                 <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Delegate</span>&gt; actionlist = actions[message];</p>
<p>                 actionlist.Remove(action);</p>
<p>                 <span style="color:#0000ff;">if</span> (actionlist.Count == 0)<br />                     actions.Remove(message);<br />             }<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Send&lt;T&gt;(<span style="color:#0000ff;">string</span> message, T param)<br />         {<br />             <span style="color:#0000ff;">if</span> (actions.ContainsKey(message))<br />             {<br />                 <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Delegate</span>&gt; actionslist = actions[message];</p>
<p>                 <span style="color:#0000ff;">foreach</span> (<span style="color:#0000ff;">var</span> action <span style="color:#0000ff;">in</span> actionslist)<br />                 {                    <br />                     action.DynamicInvoke(param);<br />                 }<br />             }<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Here is a complete code of our main program. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:dd02d605-6e54-458e-981a-451e9ae2d00a" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System;<br /> <span style="color:#0000ff;">using</span> System.Collections.ObjectModel;<br /> <span style="color:#0000ff;">using</span> System.Windows;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for MainWindow.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">MainWindow</span> : <span style="color:#2b91af;">Window</span><br />     {<br />         <span style="color:#0000ff;">private</span> <span style="color:#2b91af;">ObservableCollection</span>&lt;<span style="color:#2b91af;">Student</span>&gt; students = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">ObservableCollection</span>&lt;<span style="color:#2b91af;">Student</span>&gt;();</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Mediator</span> Mediator<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }</p>
<p>         <span style="color:#0000ff;">public</span> MainWindow()<br />         {<br />             InitializeComponent();</p>
<p>             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;1&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Bob&quot;</span>, LastName = <span style="color:#a31515;">&quot;Smith&quot;</span>, Degree = <span style="color:#a31515;">&quot;Associate&quot;</span> });<br />             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;2&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Alex&quot;</span>, LastName = <span style="color:#a31515;">&quot;White&quot;</span>, Degree = <span style="color:#a31515;">&quot;Certificate&quot;</span> });<br />             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;3&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Chris&quot;</span>, LastName = <span style="color:#a31515;">&quot;Martin&quot;</span>, Degree = <span style="color:#a31515;">&quot;Master&quot;</span> });<br />             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;4&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Michal&quot;</span>, LastName = <span style="color:#a31515;">&quot;Brown&quot;</span>, Degree = <span style="color:#a31515;">&quot;Bachlor&quot;</span> });</p>
<p>             Mediator = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Mediator</span>();<br />             Mediator.Register&lt;<span style="color:#2b91af;">Student</span>&gt;(<span style="color:#a31515;">&quot;mymessage1&quot;</span>, studentform.Notify);<br />             Mediator.Register&lt;<span style="color:#2b91af;">Student</span>&gt;(<span style="color:#a31515;">&quot;mymessage1&quot;</span>, studentlist.Notify);<br />                 <br />             studentform.Mediator = Mediator;<br />             studentlist.Mediator = Mediator;</p>
<p>             DataContext = students;<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Code for both user controls are almost same the only difference is now our call back methods accept the parameter of given type not the object, so we don’t have to down cast it. </p>
<p>Here is a code of CustomizedList user control. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:0ab67cae-2711-4c3b-84cb-417a5628d33b" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Windows;<br /> <span style="color:#0000ff;">using</span> System.Windows.Controls;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for CustomizedList.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">CustomizedList</span> : <span style="color:#2b91af;">UserControl</span><br />     {<br />         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">readonly</span> <span style="color:#2b91af;">DependencyProperty</span> SelectedStudentProperty =<br />             <span style="color:#2b91af;">DependencyProperty</span>.Register(<span style="color:#a31515;">&quot;SelectedStudent&quot;</span>, <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">Student</span>), <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">CustomizedList</span>));</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Student</span> SelectedStudent<br />         {<br />             <span style="color:#0000ff;">get</span> { <span style="color:#0000ff;">return</span> (<span style="color:#2b91af;">Student</span>)GetValue(SelectedStudentProperty); }<br />             <span style="color:#0000ff;">set</span> { SetValue(SelectedStudentProperty, <span style="color:#0000ff;">value</span>); }<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Mediator</span> Mediator<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>;  }</p>
<p>         <span style="color:#0000ff;">public</span> CustomizedList()<br />         {<br />             InitializeComponent();<br />         }</p>
<p>         <span style="color:#0000ff;">private</span> <span style="color:#0000ff;">void</span> list_SelectionChanged(<span style="color:#0000ff;">object</span> sender, <span style="color:#2b91af;">SelectionChangedEventArgs</span> e)<br />         {<br />             SelectedStudent = list.SelectedItem <span style="color:#0000ff;">as</span> <span style="color:#2b91af;">Student</span>;<br />             Send(<span style="color:#a31515;">&quot;mymessage1&quot;</span>, SelectedStudent);<br />             Send(<span style="color:#a31515;">&quot;mymessage2&quot;</span>, SelectedStudent);<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">string</span> message, <span style="color:#2b91af;">Student</span> student)<br />         {<br />             Mediator.Send&lt;<span style="color:#2b91af;">Student</span>&gt;(message, student);<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Notify(<span style="color:#2b91af;">Student</span> message)<br />         {</p>
<p>         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>And here is C# code of StudentForm user control. </p>
<div style="width:496px;display:block;float:none;margin-left:auto;margin-right:auto;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:7cc24b72-7a98-4670-a938-9d2d5b2f9e37" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Windows.Controls;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for StudentForm.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">StudentForm</span> : <span style="color:#2b91af;">UserControl</span><br />     {<br />         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Mediator</span> Mediator<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }</p>
<p>         <span style="color:#0000ff;">public</span> StudentForm()<br />         {<br />             InitializeComponent();<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Notify(<span style="color:#2b91af;">Student</span> student)<br />         {<br />             DataContext = student;<br />         }<br />     }</p>
<p>     <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">test</span><br />     {<br />         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">int</span> a { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>The output of the program is same as previous programs. </p>
<p><a href="http://zamjad.files.wordpress.com/2012/01/mediator_02_output3.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="mediator_02_output" border="0" alt="mediator_02_output" src="http://zamjad.files.wordpress.com/2012/01/mediator_02_output_thumb3.jpg?w=529&#038;h=354" width="529" height="354" /></a></p>
<br />Filed under: <a href='http://zamjad.wordpress.com/category/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/category/c/'>C#</a>, <a href='http://zamjad.wordpress.com/category/programming/design-patterns/'>Design Patterns</a>, <a href='http://zamjad.wordpress.com/category/programming/'>Programming</a>, <a href='http://zamjad.wordpress.com/category/wpf/'>WPF</a> Tagged: <a href='http://zamjad.wordpress.com/tag/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/tag/c/'>C#</a>, <a href='http://zamjad.wordpress.com/tag/design-patterns/'>Design Patterns</a>, <a href='http://zamjad.wordpress.com/tag/dynamicinvoke/'>DynamicInvoke</a>, <a href='http://zamjad.wordpress.com/tag/mediator/'>Mediator</a>, <a href='http://zamjad.wordpress.com/tag/programming/'>Programming</a>, <a href='http://zamjad.wordpress.com/tag/wpf/'>WPF</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zamjad.wordpress.com/1762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zamjad.wordpress.com/1762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zamjad.wordpress.com/1762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zamjad.wordpress.com/1762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zamjad.wordpress.com/1762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zamjad.wordpress.com/1762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zamjad.wordpress.com/1762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zamjad.wordpress.com/1762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zamjad.wordpress.com/1762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zamjad.wordpress.com/1762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zamjad.wordpress.com/1762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zamjad.wordpress.com/1762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zamjad.wordpress.com/1762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zamjad.wordpress.com/1762/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1762&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zamjad.wordpress.com/2012/01/11/using-mediator-to-communicate-between-user-controls-part-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17220d61186226d4c57607dd9dc81806?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zamjad</media:title>
		</media:content>

		<media:content url="http://zamjad.files.wordpress.com/2012/01/mediator_02_output_thumb3.jpg" medium="image">
			<media:title type="html">mediator_02_output</media:title>
		</media:content>
	</item>
		<item>
		<title>Using Mediator to communicate between user controls: Part 4</title>
		<link>http://zamjad.wordpress.com/2012/01/09/using-mediator-to-communicate-between-user-controls-part-4/</link>
		<comments>http://zamjad.wordpress.com/2012/01/09/using-mediator-to-communicate-between-user-controls-part-4/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 01:47:30 +0000</pubDate>
		<dc:creator>Zeeshan Amjad</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Controls]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[UserControl]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[Control]]></category>
		<category><![CDATA[DynamicInvoke]]></category>
		<category><![CDATA[Mediator]]></category>
		<category><![CDATA[User Control]]></category>

		<guid isPermaLink="false">https://zamjad.wordpress.com/?p=1758</guid>
		<description><![CDATA[We made a good progress in last part of the mediator article by removing the dependencies of any interface by registering the call back method and execute it by calling DynamicInvoke method here. But there is still one problem in it that it will call all the register call back method whenever we send a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1758&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We made a good progress in last part of the mediator article by removing the dependencies of any interface by registering the call back method and execute it by calling DynamicInvoke method <a href="http://zamjad.wordpress.com/2012/01/08/using-mediator-to-communicate-between-user-controls-part-3/">here</a>. But there is still one problem in it that it will call all the register call back method whenever we send a message from any class. There is no way to send message to specific client. </p>
<p>Now lets enhance a mediator class a bit and introduced a concept of message type. Now we can define the message type and register the call back method for that particular message. By doing this we have two advantages. First now we can define as may messages as we want, second we can specify the target of for specific message rather than broadcast that message to everywhere. </p>
<p>We created Dictionary for messages and call back methods. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:330b8384-bfeb-4840-9fa8-ad9585c35f68" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;"><span style="color:#0000ff;">private</span> <span style="color:#2b91af;">Dictionary</span>&lt;<span style="color:#0000ff;">string</span>, <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Action</span>&lt;<span style="color:#0000ff;">object</span>&gt;&gt;&gt; actions = <br />     <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Dictionary</span>&lt;<span style="color:#0000ff;">string</span>, <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Action</span>&lt;<span style="color:#0000ff;">object</span>&gt;&gt;&gt;();</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>We modified our register method little bit and now it accept the message type and the call back method. For simplicity we select message of string type, but we can use alternative approaches too. Our Register method simply check if there isn’t any entry for that message in the dictionary then create an empty list object, or if there is already one entry then simply add the new method to existing list. Here is our Register method. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:58318291-126d-4149-aebc-8a8adcc1cc41" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Register(<span style="color:#0000ff;">string</span> message, <span style="color:#2b91af;">Action</span>&lt;<span style="color:#0000ff;">object</span>&gt; action)<br /> {<br />     <span style="color:#0000ff;">if</span> (!actions.ContainsKey(message))<br />     {<br />         actions[message] = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Action</span>&lt;<span style="color:#0000ff;">object</span>&gt;&gt;();<br />     }</p>
<p>     actions[message].Add(action);<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Similarly at the time of sending the messages we first check if there is any call back method register for that particular message and if there is then call all of them one by one. Here is a code of Send message of mediator class. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:28d68f99-b941-46fb-a042-56d8a2ebb3a7" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">string</span> message, <span style="color:#0000ff;">object</span> param)<br /> {<br />     <span style="color:#0000ff;">if</span> (actions.ContainsKey(message))<br />     {<br />         <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Action</span>&lt;<span style="color:#0000ff;">object</span>&gt;&gt; actionslist = actions[message];</p>
<p>         <span style="color:#0000ff;">foreach</span> (<span style="color:#0000ff;">var</span> action <span style="color:#0000ff;">in</span> actionslist)<br />         {<br />             action.DynamicInvoke(param);<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Here is complete code of our modified Mediator class. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:9bfdea35-af76-4a69-8939-98bb271b6c03" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"> <span style="color:#0000ff;">using</span> System;<br /> <span style="color:#0000ff;">using</span> System.Collections.Generic;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">Mediator</span><br />     {<br />         <span style="color:#0000ff;">private</span> <span style="color:#2b91af;">Dictionary</span>&lt;<span style="color:#0000ff;">string</span>, <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Action</span>&lt;<span style="color:#0000ff;">object</span>&gt;&gt;&gt; actions = <br />             <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Dictionary</span>&lt;<span style="color:#0000ff;">string</span>, <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Action</span>&lt;<span style="color:#0000ff;">object</span>&gt;&gt;&gt;();</p>
<p>         <span style="color:#0000ff;">public</span> Mediator()<br />         {<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Register(<span style="color:#0000ff;">string</span> message, <span style="color:#2b91af;">Action</span>&lt;<span style="color:#0000ff;">object</span>&gt; action)<br />         {<br />             <span style="color:#0000ff;">if</span> (!actions.ContainsKey(message))<br />             {<br />                 actions[message] = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Action</span>&lt;<span style="color:#0000ff;">object</span>&gt;&gt;();<br />             }</p>
<p>             actions[message].Add(action);<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">string</span> message, <span style="color:#0000ff;">object</span> param)<br />         {<br />             <span style="color:#0000ff;">if</span> (actions.ContainsKey(message))<br />             {<br />                 <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Action</span>&lt;<span style="color:#0000ff;">object</span>&gt;&gt; actionslist = actions[message];</p>
<p>                 <span style="color:#0000ff;">foreach</span> (<span style="color:#0000ff;">var</span> action <span style="color:#0000ff;">in</span> actionslist)<br />                 {<br />                     action.DynamicInvoke(param);<br />                 }<br />             }<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Now the main difference is we have to register the call back method with the message type. Here is a main view code to register the call back functions. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:73b2eaca-8452-46af-b661-cef805b1a4ad" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;">Mediator = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Mediator</span>();<br /> Mediator.Register(<span style="color:#a31515;">&quot;mymessage1&quot;</span>, studentform.Notify);<br /> Mediator.Register(<span style="color:#a31515;">&quot;mymessage1&quot;</span>, studentlist.Notify);</p>
<p> Mediator.Register(<span style="color:#a31515;">&quot;mymessage2&quot;</span>, studentform.AnotherNotify);</p>
<p> studentform.Mediator = Mediator;<br /> studentlist.Mediator = Mediator;</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Note that we register two different type of messages “mymessage1” and “mymessage2”. There is only one method register for “mymessage2”, but two methods register for “mymessage1”. </p>
<p>Here is a complete C# code of main view class. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:fe583adc-5ab3-42f7-82de-e6ce987d113d" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Collections.ObjectModel;<br /> <span style="color:#0000ff;">using</span> System.Windows;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for MainWindow.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">MainWindow</span> : <span style="color:#2b91af;">Window</span><br />     {<br />         <span style="color:#0000ff;">private</span> <span style="color:#2b91af;">ObservableCollection</span>&lt;<span style="color:#2b91af;">Student</span>&gt; students = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">ObservableCollection</span>&lt;<span style="color:#2b91af;">Student</span>&gt;();</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Mediator</span> Mediator<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }</p>
<p>         <span style="color:#0000ff;">public</span> MainWindow()<br />         {<br />             InitializeComponent();</p>
<p>             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;1&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Bob&quot;</span>, LastName = <span style="color:#a31515;">&quot;Smith&quot;</span>, Degree = <span style="color:#a31515;">&quot;Associate&quot;</span> });<br />             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;2&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Alex&quot;</span>, LastName = <span style="color:#a31515;">&quot;White&quot;</span>, Degree = <span style="color:#a31515;">&quot;Certificate&quot;</span> });<br />             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;3&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Chris&quot;</span>, LastName = <span style="color:#a31515;">&quot;Martin&quot;</span>, Degree = <span style="color:#a31515;">&quot;Master&quot;</span> });<br />             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;4&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Michal&quot;</span>, LastName = <span style="color:#a31515;">&quot;Brown&quot;</span>, Degree = <span style="color:#a31515;">&quot;Bachlor&quot;</span> });</p>
<p>             Mediator = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Mediator</span>();<br />             Mediator.Register(<span style="color:#a31515;">&quot;mymessage1&quot;</span>, studentform.Notify);<br />             Mediator.Register(<span style="color:#a31515;">&quot;mymessage1&quot;</span>, studentlist.Notify);</p>
<p>             Mediator.Register(<span style="color:#a31515;">&quot;mymessage2&quot;</span>, studentform.AnotherNotify);</p>
<p>             studentform.Mediator = Mediator;<br />             studentlist.Mediator = Mediator;</p>
<p>             DataContext = students;<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Just for demonstration purpose we send both “mymessage1” and “mymessage2” messages whenever there is selection change in the CustomizedList user control. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:53c4fac4-fa20-4ce7-b2d3-f9471905bda1" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">private</span> <span style="color:#0000ff;">void</span> list_SelectionChanged(<span style="color:#0000ff;">object</span> sender, <span style="color:#2b91af;">SelectionChangedEventArgs</span> e)<br /> {<br />     SelectedStudent = list.SelectedItem <span style="color:#0000ff;">as</span> <span style="color:#2b91af;">Student</span>;<br />     Send(<span style="color:#a31515;">&quot;mymessage1&quot;</span>, SelectedStudent);<br />     Send(<span style="color:#a31515;">&quot;mymessage2&quot;</span>, SelectedStudent);<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>First Send method call all the methods register for “mymessage1” (studentform.Nofity and studentlist.Nofity) and second Send method call all the methods register for “mymessage2” (studentform.AnotherNofity). </p>
<p>Here is a complete code of our StudentForm user control. </p>
<div style="width:496px;display:block;float:none;margin-left:auto;margin-right:auto;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:183dcfda-bb80-4298-995a-adcd1fca0bed" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Windows.Controls;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for StudentForm.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">StudentForm</span> : <span style="color:#2b91af;">UserControl</span><br />     {<br />         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Mediator</span> Mediator<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }</p>
<p>         <span style="color:#0000ff;">public</span> StudentForm()<br />         {<br />             InitializeComponent();<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Notify(<span style="color:#0000ff;">object</span> message)<br />         {<br />             <span style="color:#2b91af;">Student</span> student = message <span style="color:#0000ff;">as</span> <span style="color:#2b91af;">Student</span>;</p>
<p>             <span style="color:#0000ff;">if</span> (student != <span style="color:#0000ff;">null</span>)<br />             {<br />                 DataContext = student;<br />             }<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> AnotherNotify(<span style="color:#0000ff;">object</span> message)<br />         {</p>
<p>         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>And here is complete C# code of CustomizedList user control. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:101c3f83-e1e7-45de-8bea-8cf4506d5e85" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Windows;<br /> <span style="color:#0000ff;">using</span> System.Windows.Controls;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for CustomizedList.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">CustomizedList</span> : <span style="color:#2b91af;">UserControl</span><br />     {<br />         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">readonly</span> <span style="color:#2b91af;">DependencyProperty</span> SelectedStudentProperty =<br />             <span style="color:#2b91af;">DependencyProperty</span>.Register(<span style="color:#a31515;">&quot;SelectedStudent&quot;</span>, <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">Student</span>), <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">CustomizedList</span>));</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Student</span> SelectedStudent<br />         {<br />             <span style="color:#0000ff;">get</span> { <span style="color:#0000ff;">return</span> (<span style="color:#2b91af;">Student</span>)GetValue(SelectedStudentProperty); }<br />             <span style="color:#0000ff;">set</span> { SetValue(SelectedStudentProperty, <span style="color:#0000ff;">value</span>); }<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Mediator</span> Mediator<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>;  }</p>
<p>         <span style="color:#0000ff;">public</span> CustomizedList()<br />         {<br />             InitializeComponent();<br />         }</p>
<p>         <span style="color:#0000ff;">private</span> <span style="color:#0000ff;">void</span> list_SelectionChanged(<span style="color:#0000ff;">object</span> sender, <span style="color:#2b91af;">SelectionChangedEventArgs</span> e)<br />         {<br />             SelectedStudent = list.SelectedItem <span style="color:#0000ff;">as</span> <span style="color:#2b91af;">Student</span>;<br />             Send(<span style="color:#a31515;">&quot;mymessage1&quot;</span>, SelectedStudent);<br />             Send(<span style="color:#a31515;">&quot;mymessage2&quot;</span>, SelectedStudent);<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">string</span> message, <span style="color:#0000ff;">object</span> param)<br />         {<br />             Mediator.Send(message, param);<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Notify(<span style="color:#0000ff;">object</span> message)<br />         {</p>
<p>         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>The output of this program is same as previous program. </p>
<p><a href="http://zamjad.files.wordpress.com/2012/01/mediator_02_output2.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="mediator_02_output" border="0" alt="mediator_02_output" src="http://zamjad.files.wordpress.com/2012/01/mediator_02_output_thumb2.jpg?w=529&#038;h=354" width="529" height="354" /></a></p>
<br />Filed under: <a href='http://zamjad.wordpress.com/category/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/category/c/'>C#</a>, <a href='http://zamjad.wordpress.com/category/wpf/controls/'>Controls</a>, <a href='http://zamjad.wordpress.com/category/programming/design-patterns/'>Design Patterns</a>, <a href='http://zamjad.wordpress.com/category/programming/'>Programming</a>, <a href='http://zamjad.wordpress.com/category/wpf/controls/usercontrol/'>UserControl</a>, <a href='http://zamjad.wordpress.com/category/wpf/'>WPF</a> Tagged: <a href='http://zamjad.wordpress.com/tag/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/tag/c/'>C#</a>, <a href='http://zamjad.wordpress.com/tag/control/'>Control</a>, <a href='http://zamjad.wordpress.com/tag/controls/'>Controls</a>, <a href='http://zamjad.wordpress.com/tag/design-patterns/'>Design Patterns</a>, <a href='http://zamjad.wordpress.com/tag/dynamicinvoke/'>DynamicInvoke</a>, <a href='http://zamjad.wordpress.com/tag/mediator/'>Mediator</a>, <a href='http://zamjad.wordpress.com/tag/programming/'>Programming</a>, <a href='http://zamjad.wordpress.com/tag/user-control/'>User Control</a>, <a href='http://zamjad.wordpress.com/tag/wpf/'>WPF</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zamjad.wordpress.com/1758/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zamjad.wordpress.com/1758/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zamjad.wordpress.com/1758/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zamjad.wordpress.com/1758/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zamjad.wordpress.com/1758/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zamjad.wordpress.com/1758/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zamjad.wordpress.com/1758/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zamjad.wordpress.com/1758/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zamjad.wordpress.com/1758/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zamjad.wordpress.com/1758/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zamjad.wordpress.com/1758/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zamjad.wordpress.com/1758/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zamjad.wordpress.com/1758/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zamjad.wordpress.com/1758/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1758&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zamjad.wordpress.com/2012/01/09/using-mediator-to-communicate-between-user-controls-part-4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17220d61186226d4c57607dd9dc81806?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zamjad</media:title>
		</media:content>

		<media:content url="http://zamjad.files.wordpress.com/2012/01/mediator_02_output_thumb2.jpg" medium="image">
			<media:title type="html">mediator_02_output</media:title>
		</media:content>
	</item>
		<item>
		<title>Using Mediator to communicate between user controls: Part 3</title>
		<link>http://zamjad.wordpress.com/2012/01/08/using-mediator-to-communicate-between-user-controls-part-3/</link>
		<comments>http://zamjad.wordpress.com/2012/01/08/using-mediator-to-communicate-between-user-controls-part-3/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 20:17:49 +0000</pubDate>
		<dc:creator>Zeeshan Amjad</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Controls]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[UserControl]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[Control]]></category>
		<category><![CDATA[DynamicInvoke]]></category>
		<category><![CDATA[User Control]]></category>

		<guid isPermaLink="false">https://zamjad.wordpress.com/?p=1753</guid>
		<description><![CDATA[In previous two parts we saw two different implementations of mediator design pattern here and here. Although in second part we remove the dependencies of specific user control from the mediator class and make it flexible enough to register as many client as you want using Register method. But we actually introduced one dependency for [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1753&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In previous two parts we saw two different implementations of mediator design pattern <a href="http://zamjad.wordpress.com/2012/01/05/using-mediator-to-communicate-between-user-controls-part-1/">here</a> and <a href="http://zamjad.wordpress.com/2012/01/06/using-mediator-to-communicate-between-user-controls-part-2/">here</a>. Although in second part we remove the dependencies of specific user control from the mediator class and make it flexible enough to register as many client as you want using Register method. But we actually introduced one dependency for all the client. Now all of our client has to implement IMediatorClient interface. </p>
<p>Let’s take one step further and try to remove that dependency too. We change our mediator class little bit and instead of registering the mediator client, now we are going to register the call back method of every client. Our register method accept Action&lt;object&gt; type that is actually a callback method. And in send method we call all the method using DynamicInvoke method of Delegate class to call the callback method. Here is updated version of our mediator class. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:bbeea7b9-8eee-49a4-a4e5-ab7400c74b6a" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"> <span style="color:#0000ff;">using</span> System;<br /> <span style="color:#0000ff;">using</span> System.Collections.Generic;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">Mediator</span><br />     {<br />         <span style="color:#0000ff;">private</span> <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Action</span>&lt;<span style="color:#0000ff;">object</span>&gt;&gt; actions = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">Action</span>&lt;<span style="color:#0000ff;">object</span>&gt;&gt;();</p>
<p>         <span style="color:#0000ff;">public</span> Mediator()<br />         {<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Register( <span style="color:#2b91af;">Action</span>&lt;<span style="color:#0000ff;">object</span>&gt; action)<br />         {<br />             actions.Add(action);<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">object</span> message)<br />         {<br />             <span style="color:#0000ff;">foreach</span> (<span style="color:#0000ff;">var</span> action <span style="color:#0000ff;">in</span> actions)<br />             {<br />                 action.DynamicInvoke(message);<br />             }<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Now we no more need to implement IMediatorClient interfaceSSSDFR55556 for our user controls. In our main window, we are registering the call back methods. Here is a piece of code to use the mediator. </p>
<div style="width:496px;display:block;float:none;margin-left:auto;margin-right:auto;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2cb5e3db-c43f-465f-9851-7523f33ad8f8" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;">Mediator = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Mediator</span>();<br /> Mediator.Register(studentform.Notify);<br /> Mediator.Register(studentlist.Notify);</p>
<p> studentform.Mediator = Mediator;<br /> studentlist.Mediator = Mediator;</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Here is a complete code of our main window. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:17e92f48-ac35-44a0-b90d-967b97fdfd33" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Collections.ObjectModel;<br /> <span style="color:#0000ff;">using</span> System.Windows;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for MainWindow.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">MainWindow</span> : <span style="color:#2b91af;">Window</span><br />     {<br />         <span style="color:#0000ff;">private</span> <span style="color:#2b91af;">ObservableCollection</span>&lt;<span style="color:#2b91af;">Student</span>&gt; students = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">ObservableCollection</span>&lt;<span style="color:#2b91af;">Student</span>&gt;();</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Mediator</span> Mediator<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }</p>
<p>         <span style="color:#0000ff;">public</span> MainWindow()<br />         {<br />             InitializeComponent();</p>
<p>             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;1&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Bob&quot;</span>, LastName = <span style="color:#a31515;">&quot;Smith&quot;</span>, Degree = <span style="color:#a31515;">&quot;Associate&quot;</span> });<br />             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;2&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Alex&quot;</span>, LastName = <span style="color:#a31515;">&quot;White&quot;</span>, Degree = <span style="color:#a31515;">&quot;Certificate&quot;</span> });<br />             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;3&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Chris&quot;</span>, LastName = <span style="color:#a31515;">&quot;Martin&quot;</span>, Degree = <span style="color:#a31515;">&quot;Master&quot;</span> });<br />             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;4&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Michal&quot;</span>, LastName = <span style="color:#a31515;">&quot;Brown&quot;</span>, Degree = <span style="color:#a31515;">&quot;Bachlor&quot;</span> });</p>
<p>             Mediator = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Mediator</span>();<br />             Mediator.Register(studentform.Notify);<br />             Mediator.Register(studentlist.Notify);</p>
<p>             studentform.Mediator = Mediator;<br />             studentlist.Mediator = Mediator;</p>
<p>             DataContext = students;<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>The code for both user controls are exactly same, the only difference is that now we are no more implementing the IMediatorClient interface and we even don’t need that interface in our project. </p>
<p>Here is a code for CustomizedList user control. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:13678931-6580-4c38-9562-25dcdaa2184f" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Windows;<br /> <span style="color:#0000ff;">using</span> System.Windows.Controls;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for CustomizedList.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">CustomizedList</span> : <span style="color:#2b91af;">UserControl</span><br />     {<br />         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">readonly</span> <span style="color:#2b91af;">DependencyProperty</span> SelectedStudentProperty =<br />             <span style="color:#2b91af;">DependencyProperty</span>.Register(<span style="color:#a31515;">&quot;SelectedStudent&quot;</span>, <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">Student</span>), <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">CustomizedList</span>));</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Student</span> SelectedStudent<br />         {<br />             <span style="color:#0000ff;">get</span> { <span style="color:#0000ff;">return</span> (<span style="color:#2b91af;">Student</span>)GetValue(SelectedStudentProperty); }<br />             <span style="color:#0000ff;">set</span> { SetValue(SelectedStudentProperty, <span style="color:#0000ff;">value</span>); }<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Mediator</span> Mediator<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>;  }</p>
<p>         <span style="color:#0000ff;">public</span> CustomizedList()<br />         {<br />             InitializeComponent();<br />         }</p>
<p>         <span style="color:#0000ff;">private</span> <span style="color:#0000ff;">void</span> list_SelectionChanged(<span style="color:#0000ff;">object</span> sender, <span style="color:#2b91af;">SelectionChangedEventArgs</span> e)<br />         {<br />             SelectedStudent = list.SelectedItem <span style="color:#0000ff;">as</span> <span style="color:#2b91af;">Student</span>;<br />             Send(SelectedStudent);<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">object</span> message)<br />         {<br />             Mediator.Send(message);<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Notify(<span style="color:#0000ff;">object</span> message)<br />         {</p>
<p>         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>And here is a code of user control of StudentForm user control. </p>
<div style="width:496px;display:block;float:none;margin-left:auto;margin-right:auto;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:18ac56f8-692e-4221-97c9-b4934ac0a109" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Windows.Controls;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for StudentForm.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">StudentForm</span> : <span style="color:#2b91af;">UserControl</span><br />     {<br />         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Mediator</span> Mediator<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }</p>
<p>         <span style="color:#0000ff;">public</span> StudentForm()<br />         {<br />             InitializeComponent();<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">object</span> message)<br />         {<br />         <br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Notify(<span style="color:#0000ff;">object</span> message)<br />         {<br />             <span style="color:#2b91af;">Student</span> student = message <span style="color:#0000ff;">as</span> <span style="color:#2b91af;">Student</span>;</p>
<p>             <span style="color:#0000ff;">if</span> (student != <span style="color:#0000ff;">null</span>)<br />             {<br />                 DataContext = student;<br />             }<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>The output of this program is exactly same as previous program. </p>
<p><a href="http://zamjad.files.wordpress.com/2012/01/mediator_02_output1.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="mediator_02_output" border="0" alt="mediator_02_output" src="http://zamjad.files.wordpress.com/2012/01/mediator_02_output_thumb1.jpg?w=529&#038;h=354" width="529" height="354" /></a></p>
<br />Filed under: <a href='http://zamjad.wordpress.com/category/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/category/c/'>C#</a>, <a href='http://zamjad.wordpress.com/category/wpf/controls/'>Controls</a>, <a href='http://zamjad.wordpress.com/category/programming/design-patterns/'>Design Patterns</a>, <a href='http://zamjad.wordpress.com/category/programming/'>Programming</a>, <a href='http://zamjad.wordpress.com/category/wpf/controls/usercontrol/'>UserControl</a>, <a href='http://zamjad.wordpress.com/category/wpf/'>WPF</a> Tagged: <a href='http://zamjad.wordpress.com/tag/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/tag/c/'>C#</a>, <a href='http://zamjad.wordpress.com/tag/control/'>Control</a>, <a href='http://zamjad.wordpress.com/tag/controls/'>Controls</a>, <a href='http://zamjad.wordpress.com/tag/design-patterns/'>Design Patterns</a>, <a href='http://zamjad.wordpress.com/tag/dynamicinvoke/'>DynamicInvoke</a>, <a href='http://zamjad.wordpress.com/tag/programming/'>Programming</a>, <a href='http://zamjad.wordpress.com/tag/user-control/'>User Control</a>, <a href='http://zamjad.wordpress.com/tag/wpf/'>WPF</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zamjad.wordpress.com/1753/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zamjad.wordpress.com/1753/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zamjad.wordpress.com/1753/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zamjad.wordpress.com/1753/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zamjad.wordpress.com/1753/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zamjad.wordpress.com/1753/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zamjad.wordpress.com/1753/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zamjad.wordpress.com/1753/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zamjad.wordpress.com/1753/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zamjad.wordpress.com/1753/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zamjad.wordpress.com/1753/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zamjad.wordpress.com/1753/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zamjad.wordpress.com/1753/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zamjad.wordpress.com/1753/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1753&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zamjad.wordpress.com/2012/01/08/using-mediator-to-communicate-between-user-controls-part-3/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17220d61186226d4c57607dd9dc81806?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zamjad</media:title>
		</media:content>

		<media:content url="http://zamjad.files.wordpress.com/2012/01/mediator_02_output_thumb1.jpg" medium="image">
			<media:title type="html">mediator_02_output</media:title>
		</media:content>
	</item>
		<item>
		<title>Using Mediator to communicate between user controls: Part 2</title>
		<link>http://zamjad.wordpress.com/2012/01/06/using-mediator-to-communicate-between-user-controls-part-2/</link>
		<comments>http://zamjad.wordpress.com/2012/01/06/using-mediator-to-communicate-between-user-controls-part-2/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 22:56:50 +0000</pubDate>
		<dc:creator>Zeeshan Amjad</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[XAML]]></category>
		<category><![CDATA[Controls]]></category>
		<category><![CDATA[UserControl]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Control]]></category>
		<category><![CDATA[User Control]]></category>
		<category><![CDATA[Mediator]]></category>

		<guid isPermaLink="false">https://zamjad.wordpress.com/?p=1749</guid>
		<description><![CDATA[We saw our first cut and very naïve example of mediator here. Although it works in that example but there are several limitations in it. The biggest problem is that mediator is not reusable. Mediator contains the very hard references of two user controls so we can’t use it in any other project, even in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1749&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We saw our first cut and very naïve example of mediator <a href="http://zamjad.wordpress.com/2012/01/05/using-mediator-to-communicate-between-user-controls-part-1/">here</a>. Although it works in that example but there are several limitations in it. The biggest problem is that mediator is not reusable. Mediator contains the very hard references of two user controls so we can’t use it in any other project, even in the same project to communicate with two other user control. In that case we might end up using more than one mediator class. Not only this we are still limited to only two user control per mediator. Using the existing mediator we can’t communicate with more than two user controls at a time. </p>
<p>Lets first remove the dependency of any specific user control from the mediator class. We introduced one simple interface in the project. The purpose of this interface is to make a collection of classes implement that interface in the mediator. As a added bonus now we can add as many user control inside the mediator as we want. Here is a code of our interface. </p>
<div style="width:496px;display:block;float:none;margin-left:auto;margin-right:auto;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b6894b9a-8c1c-47a7-b509-63a3bc68c78c" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;"><span style="color:#0000ff;">public</span> <span style="color:#0000ff;">interface</span> <span style="color:#2b91af;">IMediatorClient</span><br /> {<br />     <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">object</span> message);</p>
<p>     <span style="color:#0000ff;">void</span> Notify(<span style="color:#0000ff;">object</span> message);<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Here is a class diagram of it. </p>
<p><a href="http://zamjad.files.wordpress.com/2012/01/imediatorclient.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:block;float:none;margin-left:auto;border-top:0;margin-right:auto;border-right:0;padding-top:0;" title="IMediatorClient" border="0" alt="IMediatorClient" src="http://zamjad.files.wordpress.com/2012/01/imediatorclient_thumb.jpg?w=167&#038;h=147" width="167" height="147" /></a></p>
<p>Now our mediator class is very simple and not specific to any user control. Here is a code of our modified mediator. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:54155b92-4031-4f08-bb18-cf980d10fda3" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">Mediator</span><br /> {<br />     <span style="color:#0000ff;">private</span> <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">IMediatorClient</span>&gt; clients = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">IMediatorClient</span>&gt;();</p>
<p>     <span style="color:#0000ff;">public</span> Mediator()<br />     {<br />     }</p>
<p>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Register(<span style="color:#2b91af;">IMediatorClient</span> client)<br />     {<br />         clients.Add(client);<br />     }</p>
<p>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">object</span> message)<br />     {<br />         <span style="color:#0000ff;">foreach</span> (<span style="color:#0000ff;">var</span> client <span style="color:#0000ff;">in</span> clients)<br />         {<br />             client.Notify(message);<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Note that we are no more accepting the user control in constructor of the mediator. But we introduced a Register method and the whole purpose of the register method is to create a list of all classes that implement IMediatorClient interface. </p>
<p>Send function is very simple. We just iterate through all the register classes and call Notify method of every class. </p>
<p>We have to change the code of main window class little bit. In our main window class, now we are registering the user control one by one. It is important that no matter how many user control do we have, message will be send to only those classes which are register in the mediator. Here is a complete code of our main window. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ceaa69d7-edfb-4f87-b9f5-1741e1a092a8" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Collections.ObjectModel;<br /> <span style="color:#0000ff;">using</span> System.Windows;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for MainWindow.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">MainWindow</span> : <span style="color:#2b91af;">Window</span><br />     {<br />         <span style="color:#0000ff;">private</span> <span style="color:#2b91af;">ObservableCollection</span>&lt;<span style="color:#2b91af;">Student</span>&gt; students = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">ObservableCollection</span>&lt;<span style="color:#2b91af;">Student</span>&gt;();</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Mediator</span> Mediator<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }</p>
<p>         <span style="color:#0000ff;">public</span> MainWindow()<br />         {<br />             InitializeComponent();</p>
<p>             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;1&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Bob&quot;</span>, LastName = <span style="color:#a31515;">&quot;Smith&quot;</span>, Degree = <span style="color:#a31515;">&quot;Associate&quot;</span> });<br />             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;2&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Alex&quot;</span>, LastName = <span style="color:#a31515;">&quot;White&quot;</span>, Degree = <span style="color:#a31515;">&quot;Certificate&quot;</span> });<br />             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;3&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Chris&quot;</span>, LastName = <span style="color:#a31515;">&quot;Martin&quot;</span>, Degree = <span style="color:#a31515;">&quot;Master&quot;</span> });<br />             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;4&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Michal&quot;</span>, LastName = <span style="color:#a31515;">&quot;Brown&quot;</span>, Degree = <span style="color:#a31515;">&quot;Bachlor&quot;</span> });</p>
<p>             Mediator = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Mediator</span>();<br />             Mediator.Register(studentform);<br />             Mediator.Register(studentlist);</p>
<p>             studentform.Mediator = Mediator;<br />             studentlist.Mediator = Mediator;</p>
<p>             DataContext = students;<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Now the last missing part is to implement the IMediatorClient interface to both user control. This step is quite straight forward, because we already have Send and Notify method implemented in these controls. Here is a complete code for CustomizedList user control. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c962f485-19c7-429c-9a2b-a36b65a9c110" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Windows;<br /> <span style="color:#0000ff;">using</span> System.Windows.Controls;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for CustomizedList.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">CustomizedList</span> : <span style="color:#2b91af;">UserControl</span>, <span style="color:#2b91af;">IMediatorClient</span><br />     {<br />         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">readonly</span> <span style="color:#2b91af;">DependencyProperty</span> SelectedStudentProperty =<br />             <span style="color:#2b91af;">DependencyProperty</span>.Register(<span style="color:#a31515;">&quot;SelectedStudent&quot;</span>, <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">Student</span>), <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">CustomizedList</span>));</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Student</span> SelectedStudent<br />         {<br />             <span style="color:#0000ff;">get</span> { <span style="color:#0000ff;">return</span> (<span style="color:#2b91af;">Student</span>)GetValue(SelectedStudentProperty); }<br />             <span style="color:#0000ff;">set</span> { SetValue(SelectedStudentProperty, <span style="color:#0000ff;">value</span>); }<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Mediator</span> Mediator<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>;  }</p>
<p>         <span style="color:#0000ff;">public</span> CustomizedList()<br />         {<br />             InitializeComponent();<br />         }</p>
<p>         <span style="color:#0000ff;">private</span> <span style="color:#0000ff;">void</span> list_SelectionChanged(<span style="color:#0000ff;">object</span> sender, <span style="color:#2b91af;">SelectionChangedEventArgs</span> e)<br />         {<br />             SelectedStudent = list.SelectedItem <span style="color:#0000ff;">as</span> <span style="color:#2b91af;">Student</span>;<br />             Send(SelectedStudent);<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">object</span> message)<br />         {<br />             Mediator.Send(message);<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Notify(<span style="color:#0000ff;">object</span> message)<br />         {</p>
<p>         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>And here is complete code of StudentForm user control. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:9b81c870-7128-45d7-82db-9862fce0110b" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Windows.Controls;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for StudentForm.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">StudentForm</span> : <span style="color:#2b91af;">UserControl</span>, <span style="color:#2b91af;">IMediatorClient</span><br />     {<br />         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Mediator</span> Mediator<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }</p>
<p>         <span style="color:#0000ff;">public</span> StudentForm()<br />         {<br />             InitializeComponent();<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">object</span> message)<br />         {<br />         <br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Notify(<span style="color:#0000ff;">object</span> message)<br />         {<br />             <span style="color:#2b91af;">Student</span> student = message <span style="color:#0000ff;">as</span> <span style="color:#2b91af;">Student</span>;</p>
<p>             <span style="color:#0000ff;">if</span> (student != <span style="color:#0000ff;">null</span>)<br />             {<br />                 DataContext = student;<br />             }<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>This relationship can be shown by this diagram. </p>
<p><a href="http://zamjad.files.wordpress.com/2012/01/mediator_02.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="mediator_02" border="0" alt="mediator_02" src="http://zamjad.files.wordpress.com/2012/01/mediator_02_thumb.jpg?w=719&#038;h=306" width="719" height="306" /></a></p>
<p>The output and functionality of this program is exactly same as previous program. But this program has one advantage that now we can reuse the mediator class in any other project and can use with more than two user controls. Here is a the output of the program. </p>
<p><a href="http://zamjad.files.wordpress.com/2012/01/mediator_02_output.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="mediator_02_output" border="0" alt="mediator_02_output" src="http://zamjad.files.wordpress.com/2012/01/mediator_02_output_thumb.jpg?w=529&#038;h=354" width="529" height="354" /></a></p>
<br />Filed under: <a href='http://zamjad.wordpress.com/category/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/category/c/'>C#</a>, <a href='http://zamjad.wordpress.com/category/wpf/controls/'>Controls</a>, <a href='http://zamjad.wordpress.com/category/programming/design-patterns/'>Design Patterns</a>, <a href='http://zamjad.wordpress.com/category/programming/'>Programming</a>, <a href='http://zamjad.wordpress.com/category/wpf/controls/usercontrol/'>UserControl</a>, <a href='http://zamjad.wordpress.com/category/wpf/'>WPF</a>, <a href='http://zamjad.wordpress.com/category/xaml/'>XAML</a> Tagged: <a href='http://zamjad.wordpress.com/tag/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/tag/c/'>C#</a>, <a href='http://zamjad.wordpress.com/tag/control/'>Control</a>, <a href='http://zamjad.wordpress.com/tag/controls/'>Controls</a>, <a href='http://zamjad.wordpress.com/tag/design-patterns/'>Design Patterns</a>, <a href='http://zamjad.wordpress.com/tag/mediator/'>Mediator</a>, <a href='http://zamjad.wordpress.com/tag/programming/'>Programming</a>, <a href='http://zamjad.wordpress.com/tag/user-control/'>User Control</a>, <a href='http://zamjad.wordpress.com/tag/wpf/'>WPF</a>, <a href='http://zamjad.wordpress.com/tag/xaml/'>XAML</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zamjad.wordpress.com/1749/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zamjad.wordpress.com/1749/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zamjad.wordpress.com/1749/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zamjad.wordpress.com/1749/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zamjad.wordpress.com/1749/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zamjad.wordpress.com/1749/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zamjad.wordpress.com/1749/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zamjad.wordpress.com/1749/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zamjad.wordpress.com/1749/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zamjad.wordpress.com/1749/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zamjad.wordpress.com/1749/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zamjad.wordpress.com/1749/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zamjad.wordpress.com/1749/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zamjad.wordpress.com/1749/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1749&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zamjad.wordpress.com/2012/01/06/using-mediator-to-communicate-between-user-controls-part-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17220d61186226d4c57607dd9dc81806?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zamjad</media:title>
		</media:content>

		<media:content url="http://zamjad.files.wordpress.com/2012/01/imediatorclient_thumb.jpg" medium="image">
			<media:title type="html">IMediatorClient</media:title>
		</media:content>

		<media:content url="http://zamjad.files.wordpress.com/2012/01/mediator_02_thumb.jpg" medium="image">
			<media:title type="html">mediator_02</media:title>
		</media:content>

		<media:content url="http://zamjad.files.wordpress.com/2012/01/mediator_02_output_thumb.jpg" medium="image">
			<media:title type="html">mediator_02_output</media:title>
		</media:content>
	</item>
		<item>
		<title>Using Mediator to communicate between user controls: Part 1</title>
		<link>http://zamjad.wordpress.com/2012/01/05/using-mediator-to-communicate-between-user-controls-part-1/</link>
		<comments>http://zamjad.wordpress.com/2012/01/05/using-mediator-to-communicate-between-user-controls-part-1/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 01:47:53 +0000</pubDate>
		<dc:creator>Zeeshan Amjad</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[XAML]]></category>
		<category><![CDATA[Controls]]></category>
		<category><![CDATA[UserControl]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Control]]></category>
		<category><![CDATA[Mediator]]></category>

		<guid isPermaLink="false">https://zamjad.wordpress.com/?p=1741</guid>
		<description><![CDATA[We saw one example of user control with dependency property here. Now we are going to introduce one more&#160; user control and see how they communicate with each other using mediator design pattern. This is a first and naïve approach of mediator pattern that I am planning to improve in future. Let’s first take a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1741&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We saw one example of user control with dependency property <a href="http://zamjad.wordpress.com/2011/12/30/dependency-property-in-user-control/">here</a>. Now we are going to introduce one more&#160; user control and see how they communicate with each other using mediator design pattern. This is a first and naïve approach of mediator pattern that I am planning to improve in future. </p>
<p>Let’s first take a look at user control. Our first user control is a customized list. This control is very much similar to the control defined in this <a href="http://zamjad.wordpress.com/2011/12/30/dependency-property-in-user-control/">post</a>. The only different is it display the student information in the list box and display the selected student first name at the top. Here is our student class. </p>
<div style="width:496px;display:block;float:none;margin-left:auto;margin-right:auto;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a4cea033-9907-41f0-b98f-78fa6c57398c" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">Student</span><br /> {<br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">string</span> ID<br />     { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }</p>
<p>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">string</span> FirstName<br />     { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }</p>
<p>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">string</span> LastName<br />     { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }</p>
<p>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">string</span> Degree<br />     { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Here is a XAML of our customized list box user control. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ea06c8cc-e3c6-4dd6-a261-c9d87c2ae111" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">UserControl</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Class</span><span style="color:#0000ff;">=&quot;MediatorUserControl.CustomizedList&quot;</span><br />             <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;</span><br />             <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">x</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;</span><br />             <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">mc</span><span style="color:#0000ff;">=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;</span> <br />             <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">d</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;</span> <br />             <span style="color:#ff0000;"> mc</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Ignorable</span><span style="color:#0000ff;">=&quot;d&quot;</span> <br />             <span style="color:#ff0000;"> d</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">DesignHeight</span><span style="color:#0000ff;">=&quot;300&quot;</span><span style="color:#ff0000;"> d</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">DesignWidth</span><span style="color:#0000ff;">=&quot;300&quot;&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">DockPanel</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Border</span><span style="color:#ff0000;"> DockPanel.Dock</span><span style="color:#0000ff;">=&quot;Top&quot;</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span> <br />                <span style="color:#ff0000;"> BorderThickness</span><span style="color:#0000ff;">=&quot;2&quot;</span><span style="color:#ff0000;"> BorderBrush</span><span style="color:#0000ff;">=&quot;Black&quot;</span><span style="color:#ff0000;"> CornerRadius</span><span style="color:#0000ff;">=&quot;5&quot;&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;3&quot;</span><span style="color:#ff0000;"> Foreground</span><span style="color:#0000ff;">=&quot;Blue&quot;</span><br />                       <span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> ElementName</span><span style="color:#0000ff;">=list,</span><span style="color:#ff0000;"> Path</span><span style="color:#0000ff;">=SelectedItem.FirstName}&quot;&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Border</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">ListBox</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> ItemsSource</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding}</span><span style="color:#0000ff;">&quot;</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;list&quot;</span> <br />                 <span style="color:#ff0000;"> HorizontalContentAlignment</span><span style="color:#0000ff;">=&quot;Stretch&quot;</span><span style="color:#ff0000;"> SelectionChanged</span><span style="color:#0000ff;">=&quot;list_SelectionChanged&quot;&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">ListBox.ItemTemplate</span><span style="color:#0000ff;">&gt;</span><br />                 <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">DataTemplate</span><span style="color:#0000ff;">&gt;</span><br />                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">StackPanel</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;3&quot; &gt;</span><br />                         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> ID}</span><span style="color:#0000ff;">&quot;/&gt;</span><br />                         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> FirstName}</span><span style="color:#0000ff;">&quot;/&gt;</span><br />                         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> LastName}</span><span style="color:#0000ff;">&quot;/&gt;</span><br />                         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> Degree}</span><span style="color:#0000ff;">&quot;/&gt;</span><br />                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">StackPanel</span><span style="color:#0000ff;">&gt;</span><br />                 <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">DataTemplate</span><span style="color:#0000ff;">&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">ListBox.ItemTemplate</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">ListBox</span><span style="color:#0000ff;">&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">DockPanel</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">UserControl</span><span style="color:#0000ff;">&gt;</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Note we handle the SelectionChange event here to update the dependency property of currently selected student. Here is C# code of our user control. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b65310d6-a9e5-4cad-bd6a-7e9cd958fce9" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Windows;<br /> <span style="color:#0000ff;">using</span> System.Windows.Controls;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for CustomizedList.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">CustomizedList</span> : <span style="color:#2b91af;">UserControl</span><br />     {<br />         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">readonly</span> <span style="color:#2b91af;">DependencyProperty</span> SelectedStudentProperty =<br />             <span style="color:#2b91af;">DependencyProperty</span>.Register(<span style="color:#a31515;">&quot;SelectedStudent&quot;</span>, <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">Student</span>), <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">CustomizedList</span>));</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Student</span> SelectedStudent<br />         {<br />             <span style="color:#0000ff;">get</span> { <span style="color:#0000ff;">return</span> (<span style="color:#2b91af;">Student</span>)GetValue(SelectedStudentProperty); }<br />             <span style="color:#0000ff;">set</span> { SetValue(SelectedStudentProperty, <span style="color:#0000ff;">value</span>); }<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> CustomizedList()<br />         {<br />             InitializeComponent();<br />         }</p>
<p>         <span style="color:#0000ff;">private</span> <span style="color:#0000ff;">void</span> list_SelectionChanged(<span style="color:#0000ff;">object</span> sender, <span style="color:#2b91af;">SelectionChangedEventArgs</span> e)<br />         {<br />             SelectedStudent = list.SelectedItem <span style="color:#0000ff;">as</span> <span style="color:#2b91af;">Student</span>;<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>In a same way we created a user control to display the record of individual student. Here is XAML code for our Student form user control. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:cfc03059-2720-4429-aaf4-8ac6e53d6542" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">UserControl</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Class</span><span style="color:#0000ff;">=&quot;MediatorUserControl.StudentForm&quot;</span><br />             <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;</span><br />             <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">x</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;</span><br />             <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">mc</span><span style="color:#0000ff;">=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;</span> <br />             <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">d</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;</span> <br />             <span style="color:#ff0000;"> mc</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Ignorable</span><span style="color:#0000ff;">=&quot;d&quot;</span> <br />             <span style="color:#ff0000;"> d</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">DesignHeight</span><span style="color:#0000ff;">=&quot;300&quot;</span><span style="color:#ff0000;"> d</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">DesignWidth</span><span style="color:#0000ff;">=&quot;300&quot;&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Grid</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Grid.ColumnDefinitions</span><span style="color:#0000ff;">&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">ColumnDefinition</span><span style="color:#0000ff;">/&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">ColumnDefinition</span><span style="color:#0000ff;">/&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Grid.ColumnDefinitions</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Grid.RowDefinitions</span><span style="color:#0000ff;">&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">RowDefinition</span><span style="color:#0000ff;">/&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">RowDefinition</span><span style="color:#0000ff;">/&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">RowDefinition</span><span style="color:#0000ff;">/&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">RowDefinition</span><span style="color:#0000ff;">/&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Grid.RowDefinitions</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Grid.Column</span><span style="color:#0000ff;">=&quot;0&quot;</span><span style="color:#ff0000;"> Grid.Row</span><span style="color:#0000ff;">=&quot;0&quot;</span><span style="color:#ff0000;"> VerticalAlignment</span><span style="color:#0000ff;">=&quot;Center&quot;</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;ID&quot;/&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBox</span><span style="color:#ff0000;"> Grid.Column</span><span style="color:#0000ff;">=&quot;1&quot;</span><span style="color:#ff0000;"> Grid.Row</span><span style="color:#0000ff;">=&quot;0&quot;</span><span style="color:#ff0000;"> VerticalAlignment</span><span style="color:#0000ff;">=&quot;Center&quot;</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> ID}</span><span style="color:#0000ff;">&quot;/&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Grid.Column</span><span style="color:#0000ff;">=&quot;0&quot;</span><span style="color:#ff0000;"> Grid.Row</span><span style="color:#0000ff;">=&quot;1&quot;</span><span style="color:#ff0000;"> VerticalAlignment</span><span style="color:#0000ff;">=&quot;Center&quot;</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;FirstName&quot;/&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBox</span><span style="color:#ff0000;"> Grid.Column</span><span style="color:#0000ff;">=&quot;1&quot;</span><span style="color:#ff0000;"> Grid.Row</span><span style="color:#0000ff;">=&quot;1&quot;</span><span style="color:#ff0000;"> VerticalAlignment</span><span style="color:#0000ff;">=&quot;Center&quot;</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> FirstName}</span><span style="color:#0000ff;">&quot;/&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Grid.Column</span><span style="color:#0000ff;">=&quot;0&quot;</span><span style="color:#ff0000;"> Grid.Row</span><span style="color:#0000ff;">=&quot;2&quot;</span><span style="color:#ff0000;"> VerticalAlignment</span><span style="color:#0000ff;">=&quot;Center&quot;</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;LastName&quot;/&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBox</span><span style="color:#ff0000;"> Grid.Column</span><span style="color:#0000ff;">=&quot;1&quot;</span><span style="color:#ff0000;"> Grid.Row</span><span style="color:#0000ff;">=&quot;2&quot;</span><span style="color:#ff0000;"> VerticalAlignment</span><span style="color:#0000ff;">=&quot;Center&quot;</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> LastName}</span><span style="color:#0000ff;">&quot;/&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Grid.Column</span><span style="color:#0000ff;">=&quot;0&quot;</span><span style="color:#ff0000;"> Grid.Row</span><span style="color:#0000ff;">=&quot;3&quot;</span><span style="color:#ff0000;"> VerticalAlignment</span><span style="color:#0000ff;">=&quot;Center&quot;</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;Degree&quot;/&gt;</span><br />     <span style="color:#a31515;">        </span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBox</span><span style="color:#ff0000;"> Grid.Column</span><span style="color:#0000ff;">=&quot;1&quot;</span><span style="color:#ff0000;"> Grid.Row</span><span style="color:#0000ff;">=&quot;3&quot;</span><span style="color:#ff0000;"> VerticalAlignment</span><span style="color:#0000ff;">=&quot;Center&quot;</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> Degree}</span><span style="color:#0000ff;">&quot;/&gt;</span><span style="color:#a31515;"></span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Grid</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">UserControl</span><span style="color:#0000ff;">&gt;</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>There is nothing special in the C# code of this user control. We put both of our control in the main window. Here is a XAML code of our main window.</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2607b9ad-22c9-4a42-8cad-2edcf4cfa568" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Window</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Class</span><span style="color:#0000ff;">=&quot;MediatorUserControl.MainWindow&quot;</span><br />        <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;</span><br />        <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">x</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;</span><br />        <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">local</span><span style="color:#0000ff;">=&quot;clr-namespace:MediatorUserControl&quot;</span><br />        <span style="color:#ff0000;"> Title</span><span style="color:#0000ff;">=&quot;MainWindow&quot;</span><span style="color:#ff0000;"> Height</span><span style="color:#0000ff;">=&quot;350&quot;</span><span style="color:#ff0000;"> Width</span><span style="color:#0000ff;">=&quot;525&quot;&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Grid</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Grid.ColumnDefinitions</span><span style="color:#0000ff;">&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">ColumnDefinition</span><span style="color:#0000ff;">/&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">ColumnDefinition</span><span style="color:#0000ff;">/&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Grid.ColumnDefinitions</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">local</span><span style="color:#0000ff;">:</span><span style="color:#a31515;">CustomizedList</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;studentlist&quot;</span><span style="color:#ff0000;"> Grid.Column</span><span style="color:#0000ff;">=&quot;0&quot;</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;/&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">local</span><span style="color:#0000ff;">:</span><span style="color:#a31515;">StudentForm</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;studentform&quot;</span><span style="color:#ff0000;"> Grid.Column</span><span style="color:#0000ff;">=&quot;1&quot;</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;/&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Grid</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Window</span><span style="color:#0000ff;">&gt;</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>And we simply create an object of ObservableCollection class of Student type and assign it to the DataContext property of the main window. Now if we run the application then it display all the student in the listbox and display the detail of first student in the collection in the student form user control. </p>
<p>Now even if I select any other student in the student list user control that changes in not going to reflect in student form user control, because there is no communication between these two controls. </p>
<p>One solution is to introduce one dependency property in student form user control too and then do the user control to user control binding using ElementName property of the binding class. In this simple example that may be a good solution. But what will the situation if there are lots of&#160; user control and they are trying to communicate with each other? </p>
<p>Mediator design patter is a good solution here. Mediator design pattern introduced a middle layer and every component is suppose to communicate with it. It is just like a control tower of the airport. During the landing or take off all the airplane are suppose to communicate with control tower, not with each other. </p>
<p>Now let’s make a very basic implementation of mediator. In our example we are concern with two user control so for simplicity we uses the references of both user control in our mediator class. The purpose of mediator in this case is very simple. Whenever get the Send message from anywhere, then notify both user controls. </p>
<p>Here is a simple implementation of Mediator class. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:163a71d0-80a2-47c4-976e-b4e429e66e80" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">Mediator</span><br />     {<br />         <span style="color:#0000ff;">private</span> <span style="color:#2b91af;">StudentForm</span> form;<br />         <span style="color:#0000ff;">private</span> <span style="color:#2b91af;">CustomizedList</span> list;</p>
<p>         <span style="color:#0000ff;">public</span> Mediator(<span style="color:#2b91af;">StudentForm</span> form, <span style="color:#2b91af;">CustomizedList</span> list)<br />         {<br />             <span style="color:#0000ff;">this</span>.form = form;<br />             <span style="color:#0000ff;">this</span>.list = list;<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">object</span> message)<br />         {<br />             form.Notify(message);<br />             list.Notify(message);<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Our next step is to introduce the mediator property in both user control. Now our mediator has a reference of both user controls and user control has reference of mediator class. In this way user control communicate with each other user mediator. </p>
<p>Here is a code of our main class to demonstrate this. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:fad985ef-cc8a-483b-a7f2-7d7ed1c35353" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Collections.ObjectModel;<br /> <span style="color:#0000ff;">using</span> System.Windows;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for MainWindow.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">MainWindow</span> : <span style="color:#2b91af;">Window</span><br />     {<br />         <span style="color:#0000ff;">private</span> <span style="color:#2b91af;">ObservableCollection</span>&lt;<span style="color:#2b91af;">Student</span>&gt; students = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">ObservableCollection</span>&lt;<span style="color:#2b91af;">Student</span>&gt;();</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Mediator</span> Mediator<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }</p>
<p>         <span style="color:#0000ff;">public</span> MainWindow()<br />         {<br />             InitializeComponent();</p>
<p>             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;1&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Bob&quot;</span>, LastName = <span style="color:#a31515;">&quot;Smith&quot;</span>, Degree = <span style="color:#a31515;">&quot;Associate&quot;</span> });<br />             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;2&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Alex&quot;</span>, LastName = <span style="color:#a31515;">&quot;White&quot;</span>, Degree = <span style="color:#a31515;">&quot;Certificate&quot;</span> });<br />             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;3&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Chris&quot;</span>, LastName = <span style="color:#a31515;">&quot;Martin&quot;</span>, Degree = <span style="color:#a31515;">&quot;Master&quot;</span> });<br />             students.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { ID = <span style="color:#a31515;">&quot;4&quot;</span>, FirstName = <span style="color:#a31515;">&quot;Michal&quot;</span>, LastName = <span style="color:#a31515;">&quot;Brown&quot;</span>, Degree = <span style="color:#a31515;">&quot;Bachlor&quot;</span> });</p>
<p>             Mediator = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Mediator</span>(studentform, studentlist);<br />             studentform.Mediator = Mediator;<br />             studentlist.Mediator = Mediator;</p>
<p>             DataContext = students;<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>This relationship can be shown by this simple diagram. </p>
<p>&#160;</p>
<p><a href="http://zamjad.files.wordpress.com/2012/01/mediator_01.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:block;float:none;margin-left:auto;border-top:0;margin-right:auto;border-right:0;padding-top:0;" title="Mediator_01" border="0" alt="Mediator_01" src="http://zamjad.files.wordpress.com/2012/01/mediator_01_thumb.jpg?w=184&#038;h=454" width="184" height="454" /></a></p>
<p>&#160;</p>
<p>From the CustomizedList user control we are sending the message to the mediator. Here we send the selected student to the mediator. Here is a code for this. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:afb4d74a-b83b-4b88-95fb-74d34c40fa05" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">private</span> <span style="color:#0000ff;">void</span> list_SelectionChanged(<span style="color:#0000ff;">object</span> sender, <span style="color:#2b91af;">SelectionChangedEventArgs</span> e)<br /> {<br />     SelectedStudent = list.SelectedItem <span style="color:#0000ff;">as</span> <span style="color:#2b91af;">Student</span>;<br />     Send(SelectedStudent);<br /> }</p>
<p> <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">object</span> message)<br /> {<br />     Mediator.Send(message);<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>On the other hand we handle the message in StudentForm user control. Here is a code to handle the message. </p>
<div style="width:496px;display:block;float:none;margin-left:auto;margin-right:auto;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a4bb5a52-3ee0-4ccf-8433-c233cf8ac55c" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;"><span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Notify(<span style="color:#0000ff;">object</span> message)<br /> {<br />     <span style="color:#2b91af;">Student</span> student = message <span style="color:#0000ff;">as</span> <span style="color:#2b91af;">Student</span>;</p>
<p>     <span style="color:#0000ff;">if</span> (student != <span style="color:#0000ff;">null</span>)<br />     {<br />         DataContext = student;<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Now we set the data context of the user control to the selected student. </p>
<p>Here is complete code of customized list user control</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:db958dbc-29c0-41ca-a4a1-4d89753eeccf" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Windows;<br /> <span style="color:#0000ff;">using</span> System.Windows.Controls;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for CustomizedList.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">CustomizedList</span> : <span style="color:#2b91af;">UserControl</span><br />     {<br />         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">readonly</span> <span style="color:#2b91af;">DependencyProperty</span> SelectedStudentProperty =<br />             <span style="color:#2b91af;">DependencyProperty</span>.Register(<span style="color:#a31515;">&quot;SelectedStudent&quot;</span>, <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">Student</span>), <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">CustomizedList</span>));</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Student</span> SelectedStudent<br />         {<br />             <span style="color:#0000ff;">get</span> { <span style="color:#0000ff;">return</span> (<span style="color:#2b91af;">Student</span>)GetValue(SelectedStudentProperty); }<br />             <span style="color:#0000ff;">set</span> { SetValue(SelectedStudentProperty, <span style="color:#0000ff;">value</span>); }<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Mediator</span> Mediator<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>;  }</p>
<p>         <span style="color:#0000ff;">public</span> CustomizedList()<br />         {<br />             InitializeComponent();<br />         }</p>
<p>         <span style="color:#0000ff;">private</span> <span style="color:#0000ff;">void</span> list_SelectionChanged(<span style="color:#0000ff;">object</span> sender, <span style="color:#2b91af;">SelectionChangedEventArgs</span> e)<br />         {<br />             SelectedStudent = list.SelectedItem <span style="color:#0000ff;">as</span> <span style="color:#2b91af;">Student</span>;<br />             Send(SelectedStudent);<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">object</span> message)<br />         {<br />             Mediator.Send(message);<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Notify(<span style="color:#0000ff;">object</span> message)<br />         {</p>
<p>         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Here is complete C# code of the student form user control.</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:568d6e81-226b-4a37-aafd-381c8c452b81" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Windows.Controls;</p>
<p> <span style="color:#0000ff;">namespace</span> MediatorUserControl<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for StudentForm.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">StudentForm</span> : <span style="color:#2b91af;">UserControl</span><br />     {<br />         <span style="color:#0000ff;">public</span> <span style="color:#2b91af;">Mediator</span> Mediator<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }</p>
<p>         <span style="color:#0000ff;">public</span> StudentForm()<br />         {<br />             InitializeComponent();<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Notify(<span style="color:#0000ff;">object</span> message)<br />         {<br />             <span style="color:#2b91af;">Student</span> student = message <span style="color:#0000ff;">as</span> <span style="color:#2b91af;">Student</span>;</p>
<p>             <span style="color:#0000ff;">if</span> (student != <span style="color:#0000ff;">null</span>)<br />             {<br />                 DataContext = student;<br />             }<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Here is the output of the program</p>
<p><a href="http://zamjad.files.wordpress.com/2012/01/mediator_01_output.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:block;float:none;margin-left:auto;border-top:0;margin-right:auto;border-right:0;padding-top:0;" title="Mediator_01_Output" border="0" alt="Mediator_01_Output" src="http://zamjad.files.wordpress.com/2012/01/mediator_01_output_thumb.jpg?w=660&#038;h=442" width="660" height="442" /></a></p>
<br />Filed under: <a href='http://zamjad.wordpress.com/category/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/category/c/'>C#</a>, <a href='http://zamjad.wordpress.com/category/wpf/controls/'>Controls</a>, <a href='http://zamjad.wordpress.com/category/programming/design-patterns/'>Design Patterns</a>, <a href='http://zamjad.wordpress.com/category/programming/'>Programming</a>, <a href='http://zamjad.wordpress.com/category/wpf/controls/usercontrol/'>UserControl</a>, <a href='http://zamjad.wordpress.com/category/wpf/'>WPF</a>, <a href='http://zamjad.wordpress.com/category/xaml/'>XAML</a> Tagged: <a href='http://zamjad.wordpress.com/tag/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/tag/c/'>C#</a>, <a href='http://zamjad.wordpress.com/tag/control/'>Control</a>, <a href='http://zamjad.wordpress.com/tag/controls/'>Controls</a>, <a href='http://zamjad.wordpress.com/tag/design-patterns/'>Design Patterns</a>, <a href='http://zamjad.wordpress.com/tag/mediator/'>Mediator</a>, <a href='http://zamjad.wordpress.com/tag/programming/'>Programming</a>, <a href='http://zamjad.wordpress.com/tag/usercontrol/'>UserControl</a>, <a href='http://zamjad.wordpress.com/tag/wpf/'>WPF</a>, <a href='http://zamjad.wordpress.com/tag/xaml/'>XAML</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zamjad.wordpress.com/1741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zamjad.wordpress.com/1741/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zamjad.wordpress.com/1741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zamjad.wordpress.com/1741/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zamjad.wordpress.com/1741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zamjad.wordpress.com/1741/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zamjad.wordpress.com/1741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zamjad.wordpress.com/1741/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zamjad.wordpress.com/1741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zamjad.wordpress.com/1741/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zamjad.wordpress.com/1741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zamjad.wordpress.com/1741/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zamjad.wordpress.com/1741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zamjad.wordpress.com/1741/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1741&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zamjad.wordpress.com/2012/01/05/using-mediator-to-communicate-between-user-controls-part-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17220d61186226d4c57607dd9dc81806?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zamjad</media:title>
		</media:content>

		<media:content url="http://zamjad.files.wordpress.com/2012/01/mediator_01_thumb.jpg" medium="image">
			<media:title type="html">Mediator_01</media:title>
		</media:content>

		<media:content url="http://zamjad.files.wordpress.com/2012/01/mediator_01_output_thumb.jpg" medium="image">
			<media:title type="html">Mediator_01_Output</media:title>
		</media:content>
	</item>
		<item>
		<title>Dependency property in User Control</title>
		<link>http://zamjad.wordpress.com/2011/12/30/dependency-property-in-user-control/</link>
		<comments>http://zamjad.wordpress.com/2011/12/30/dependency-property-in-user-control/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 19:58:58 +0000</pubDate>
		<dc:creator>Zeeshan Amjad</dc:creator>
				<category><![CDATA[WPF]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[XAML]]></category>
		<category><![CDATA[Dependency Property]]></category>
		<category><![CDATA[Binding]]></category>
		<category><![CDATA[Controls]]></category>
		<category><![CDATA[UserControl]]></category>
		<category><![CDATA[DependencyProperty]]></category>
		<category><![CDATA[Control]]></category>
		<category><![CDATA[User Control]]></category>

		<guid isPermaLink="false">https://zamjad.wordpress.com/?p=1734</guid>
		<description><![CDATA[I came across a situation where I am suppose to use two user controls to display the collection and their detail information using MVVM. Let’s make things simple and first try to use it without MVVM. For simplicity we are going to use only one user control and do not use MVVM. Let’s make a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1734&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I came across a situation where I am suppose to use two user controls to display the collection and their detail information using MVVM. Let’s make things simple and first try to use it without MVVM. For simplicity we are going to use only one user control and do not use MVVM. </p>
<p>Let’s make a user control first. This user control is a combination of list box and one text box at the top of list box to display the selected item in the list box.&#160; Here is XAML for our user control. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:bee64774-eaf5-48a5-bf20-339cc05af673" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">UserControl</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Class</span><span style="color:#0000ff;">=&quot;WpfUserControlList.CustomizedList&quot;</span><br />             <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;</span><br />             <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">x</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;</span><br />             <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">mc</span><span style="color:#0000ff;">=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;</span> <br />             <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">d</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;</span> <br />             <span style="color:#ff0000;"> mc</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Ignorable</span><span style="color:#0000ff;">=&quot;d&quot;</span> <br />             <span style="color:#ff0000;"> d</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">DesignHeight</span><span style="color:#0000ff;">=&quot;300&quot;</span><span style="color:#ff0000;"> d</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">DesignWidth</span><span style="color:#0000ff;">=&quot;300&quot;&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">DockPanel</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> DockPanel.Dock</span><span style="color:#0000ff;">=&quot;Top&quot;</span><span style="color:#ff0000;"> Foreground</span><span style="color:#0000ff;">=&quot;Yellow&quot;</span><span style="color:#ff0000;"> FontSize</span><span style="color:#0000ff;">=&quot;24&quot;</span><br />                   <span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> ElementName</span><span style="color:#0000ff;">=list,</span><span style="color:#ff0000;"> Path</span><span style="color:#0000ff;">=SelectedItem}&quot;&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock.Background</span><span style="color:#0000ff;">&gt;</span><br />                 <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">LinearGradientBrush</span><span style="color:#0000ff;">&gt;</span><br />                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">GradientStop</span><span style="color:#ff0000;"> Offset</span><span style="color:#0000ff;">=&quot;0&quot;</span><span style="color:#ff0000;"> Color</span><span style="color:#0000ff;">=&quot;Brown&quot;/&gt;</span><br />                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">GradientStop</span><span style="color:#ff0000;"> Offset</span><span style="color:#0000ff;">=&quot;0.5&quot;</span><span style="color:#ff0000;"> Color</span><span style="color:#0000ff;">=&quot;LightYellow&quot;/&gt;</span><br />                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">GradientStop</span><span style="color:#ff0000;"> Offset</span><span style="color:#0000ff;">=&quot;1&quot;</span><span style="color:#ff0000;"> Color</span><span style="color:#0000ff;">=&quot;Brown&quot;/&gt;</span><br />                 <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">LinearGradientBrush</span><span style="color:#0000ff;">&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock.Background</span><span style="color:#0000ff;">&gt;</span><br />        <span style="color:#a31515;">        </span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock</span><span style="color:#0000ff;">&gt;</span><span style="color:#a31515;"></span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">ListBox</span><span style="color:#ff0000;"> ItemsSource</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding}</span><span style="color:#0000ff;">&quot;</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;list&quot;</span><span style="color:#ff0000;"> HorizontalContentAlignment</span><span style="color:#0000ff;">=&quot;Stretch&quot;&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">ListBox.ItemTemplate</span><span style="color:#0000ff;">&gt;</span><br />                 <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">DataTemplate</span><span style="color:#0000ff;">&gt;</span><br />                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Border</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;2&quot;</span><span style="color:#ff0000;"> BorderThickness</span><span style="color:#0000ff;">=&quot;2&quot;</span><span style="color:#ff0000;"> CornerRadius</span><span style="color:#0000ff;">=&quot;3&quot;</span><span style="color:#ff0000;"> BorderBrush</span><span style="color:#0000ff;">=&quot;Brown&quot;&gt;</span><br />                         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding}</span><span style="color:#0000ff;">&quot;</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;1&quot;&gt;</span><br />                             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock.Background</span><span style="color:#0000ff;">&gt;</span><br />                                 <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">LinearGradientBrush</span><span style="color:#0000ff;">&gt;</span><br />                                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">GradientStop</span><span style="color:#ff0000;"> Offset</span><span style="color:#0000ff;">=&quot;0&quot;</span><span style="color:#ff0000;"> Color</span><span style="color:#0000ff;">=&quot;AliceBlue&quot;/&gt;</span><br />                                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">GradientStop</span><span style="color:#ff0000;"> Offset</span><span style="color:#0000ff;">=&quot;1&quot;</span><span style="color:#ff0000;"> Color</span><span style="color:#0000ff;">=&quot;Blue&quot;/&gt;</span><br />                                 <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">LinearGradientBrush</span><span style="color:#0000ff;">&gt;</span><br />                             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock.Background</span><span style="color:#0000ff;">&gt;</span><br />                         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock</span><span style="color:#0000ff;">&gt;</span><br />                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Border</span><span style="color:#0000ff;">&gt;</span><br />                 <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">DataTemplate</span><span style="color:#0000ff;">&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">ListBox.ItemTemplate</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">ListBox</span><span style="color:#0000ff;">&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">DockPanel</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">UserControl</span><span style="color:#0000ff;">&gt;</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Now let’s use our user control in our main program. Here is a XAML to use the user control in our main program. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:9567c01b-f302-46ac-b34c-56df0e496ba1" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Grid</span><span style="color:#0000ff;">&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Grid.ColumnDefinitions</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">ColumnDefinition</span><span style="color:#0000ff;">/&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">ColumnDefinition</span><span style="color:#0000ff;">/&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Grid.ColumnDefinitions</span><span style="color:#0000ff;">&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">local</span><span style="color:#0000ff;">:</span><span style="color:#a31515;">CustomizedList</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;uc&quot;</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> Grid.Column</span><span style="color:#0000ff;">=&quot;0&quot;</span><span style="color:#ff0000;"> DataContext</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding}</span><span style="color:#0000ff;">&quot; /&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> Grid.Column</span><span style="color:#0000ff;">=&quot;1&quot;/&gt;</span><br /> <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Grid</span><span style="color:#0000ff;">&gt;</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Now if we want to display the selected item in the list box in the main text box, we can’t do it easily right now. One possible solution, if we are using MVVM, is to create one property and assign the selected item to it. Although that approach works but it is not a good design. The reason is that if we want to use this user control in any other project, then we have to do the same thing again and again. The better approach is to introduce one dependency property in the user control. </p>
<p>Here is a code to introduced a dependency property named SelectedItem in our user control. We set this property in the SelectionChanged event of the list box. Here is complete C# code of the program. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e56bb199-4a09-489a-8539-ba657553426b" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Windows;<br /> <span style="color:#0000ff;">using</span> System.Windows.Controls;</p>
<p> <span style="color:#0000ff;">namespace</span> WpfUserControlList<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for CustomizedList.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">CustomizedList</span> : <span style="color:#2b91af;">UserControl</span><br />     {<br />         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">readonly</span> <span style="color:#2b91af;">DependencyProperty</span> SelectedItemProperty =<br />             <span style="color:#2b91af;">DependencyProperty</span>.Register(<span style="color:#a31515;">&quot;SelectedItem&quot;</span>, <span style="color:#0000ff;">typeof</span>(<span style="color:#0000ff;">string</span>), <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">CustomizedList</span>));</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">string</span> SelectedItem<br />         {<br />             <span style="color:#0000ff;">get</span> { <span style="color:#0000ff;">return</span> (<span style="color:#0000ff;">string</span>)GetValue(SelectedItemProperty); }<br />             <span style="color:#0000ff;">set</span> { SetValue(SelectedItemProperty, <span style="color:#0000ff;">value</span>); }<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> CustomizedList()<br />         {<br />             InitializeComponent();<br />         }</p>
<p>         <span style="color:#0000ff;">private</span> <span style="color:#0000ff;">void</span> list_SelectionChanged(<span style="color:#0000ff;">object</span> sender, <span style="color:#2b91af;">SelectionChangedEventArgs</span> e)<br />         {<br />             SelectedItem = list.SelectedItem <span style="color:#0000ff;">as</span> <span style="color:#0000ff;">string</span>;<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Here is complete XAML code of our user control. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ea010351-7cb4-4a15-9da5-bd04fbe0c843" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">UserControl</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Class</span><span style="color:#0000ff;">=&quot;WpfUserControlList.CustomizedList&quot;</span><br />             <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;</span><br />             <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">x</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;</span><br />             <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">mc</span><span style="color:#0000ff;">=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;</span> <br />             <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">d</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;</span> <br />             <span style="color:#ff0000;"> mc</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Ignorable</span><span style="color:#0000ff;">=&quot;d&quot;</span> <br />             <span style="color:#ff0000;"> d</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">DesignHeight</span><span style="color:#0000ff;">=&quot;300&quot;</span><span style="color:#ff0000;"> d</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">DesignWidth</span><span style="color:#0000ff;">=&quot;300&quot;&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">DockPanel</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> DockPanel.Dock</span><span style="color:#0000ff;">=&quot;Top&quot;</span><span style="color:#ff0000;"> Foreground</span><span style="color:#0000ff;">=&quot;Yellow&quot;</span><span style="color:#ff0000;"> FontSize</span><span style="color:#0000ff;">=&quot;24&quot;</span><br />                   <span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> ElementName</span><span style="color:#0000ff;">=list,</span><span style="color:#ff0000;"> Path</span><span style="color:#0000ff;">=SelectedItem}&quot;&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock.Background</span><span style="color:#0000ff;">&gt;</span><br />                 <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">LinearGradientBrush</span><span style="color:#0000ff;">&gt;</span><br />                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">GradientStop</span><span style="color:#ff0000;"> Offset</span><span style="color:#0000ff;">=&quot;0&quot;</span><span style="color:#ff0000;"> Color</span><span style="color:#0000ff;">=&quot;Brown&quot;/&gt;</span><br />                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">GradientStop</span><span style="color:#ff0000;"> Offset</span><span style="color:#0000ff;">=&quot;0.5&quot;</span><span style="color:#ff0000;"> Color</span><span style="color:#0000ff;">=&quot;LightYellow&quot;/&gt;</span><br />                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">GradientStop</span><span style="color:#ff0000;"> Offset</span><span style="color:#0000ff;">=&quot;1&quot;</span><span style="color:#ff0000;"> Color</span><span style="color:#0000ff;">=&quot;Brown&quot;/&gt;</span><br />                 <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">LinearGradientBrush</span><span style="color:#0000ff;">&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock.Background</span><span style="color:#0000ff;">&gt;</span><br />        <span style="color:#a31515;">        </span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock</span><span style="color:#0000ff;">&gt;</span><span style="color:#a31515;"></span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">ListBox</span><span style="color:#ff0000;"> ItemsSource</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding}</span><span style="color:#0000ff;">&quot;</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;list&quot;</span><span style="color:#ff0000;"> HorizontalContentAlignment</span><span style="color:#0000ff;">=&quot;Stretch&quot;</span><span style="color:#ff0000;"> SelectionChanged</span><span style="color:#0000ff;">=&quot;list_SelectionChanged&quot;&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">ListBox.ItemTemplate</span><span style="color:#0000ff;">&gt;</span><br />                 <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">DataTemplate</span><span style="color:#0000ff;">&gt;</span><br />                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Border</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;2&quot;</span><span style="color:#ff0000;"> BorderThickness</span><span style="color:#0000ff;">=&quot;2&quot;</span><span style="color:#ff0000;"> CornerRadius</span><span style="color:#0000ff;">=&quot;3&quot;</span><span style="color:#ff0000;"> BorderBrush</span><span style="color:#0000ff;">=&quot;Brown&quot;&gt;</span><br />                         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding}</span><span style="color:#0000ff;">&quot;</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;1&quot;&gt;</span><br />                             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock.Background</span><span style="color:#0000ff;">&gt;</span><br />                                 <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">LinearGradientBrush</span><span style="color:#0000ff;">&gt;</span><br />                                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">GradientStop</span><span style="color:#ff0000;"> Offset</span><span style="color:#0000ff;">=&quot;0&quot;</span><span style="color:#ff0000;"> Color</span><span style="color:#0000ff;">=&quot;AliceBlue&quot;/&gt;</span><br />                                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">GradientStop</span><span style="color:#ff0000;"> Offset</span><span style="color:#0000ff;">=&quot;1&quot;</span><span style="color:#ff0000;"> Color</span><span style="color:#0000ff;">=&quot;Blue&quot;/&gt;</span><br />                                 <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">LinearGradientBrush</span><span style="color:#0000ff;">&gt;</span><br />                             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock.Background</span><span style="color:#0000ff;">&gt;</span><br />                         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock</span><span style="color:#0000ff;">&gt;</span><br />                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Border</span><span style="color:#0000ff;">&gt;</span><br />                 <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">DataTemplate</span><span style="color:#0000ff;">&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">ListBox.ItemTemplate</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">ListBox</span><span style="color:#0000ff;">&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">DockPanel</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">UserControl</span><span style="color:#0000ff;">&gt;</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Now it we can easily do binding of the selected item of our user control with text box. Here is our XAML to do the binding. </p>
<div style="width:496px;display:block;float:none;margin-left:auto;margin-right:auto;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:32850c43-1b14-4ed7-b698-26b34afdd863" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;"><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> Grid.Column</span><span style="color:#0000ff;">=&quot;1&quot;</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> ElementName</span><span style="color:#0000ff;">=uc,</span><span style="color:#ff0000;"> Path</span><span style="color:#0000ff;">=SelectedItem}&quot; /&gt;</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Here is complete XAML code of our program. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2d43c40c-f4ae-49b1-9c36-848d8b76dbda" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Window</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Class</span><span style="color:#0000ff;">=&quot;WpfUserControlList.MainWindow&quot;</span><br />        <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;</span><br />        <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">x</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;</span><br />        <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">local</span><span style="color:#0000ff;">=&quot;clr-namespace:WpfUserControlList&quot;</span><br />        <span style="color:#ff0000;"> Title</span><span style="color:#0000ff;">=&quot;MainWindow&quot;</span><span style="color:#ff0000;"> Height</span><span style="color:#0000ff;">=&quot;350&quot;</span><span style="color:#ff0000;"> Width</span><span style="color:#0000ff;">=&quot;525&quot;&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Grid</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Grid.ColumnDefinitions</span><span style="color:#0000ff;">&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">ColumnDefinition</span><span style="color:#0000ff;">/&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">ColumnDefinition</span><span style="color:#0000ff;">/&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Grid.ColumnDefinitions</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">local</span><span style="color:#0000ff;">:</span><span style="color:#a31515;">CustomizedList</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Name</span><span style="color:#0000ff;">=&quot;uc&quot;</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> Grid.Column</span><span style="color:#0000ff;">=&quot;0&quot;</span><span style="color:#ff0000;"> DataContext</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding}</span><span style="color:#0000ff;">&quot; /&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> Grid.Column</span><span style="color:#0000ff;">=&quot;1&quot;</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> ElementName</span><span style="color:#0000ff;">=uc,</span><span style="color:#ff0000;"> Path</span><span style="color:#0000ff;">=SelectedItem}&quot; /&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Grid</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Window</span><span style="color:#0000ff;">&gt;</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>And here is complete C# code of the program. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:664807b7-488f-4df1-8d50-d8e9515dc854" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Collections.ObjectModel;<br /> <span style="color:#0000ff;">using</span> System.Windows;</p>
<p> <span style="color:#0000ff;">namespace</span> WpfUserControlList<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for MainWindow.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">MainWindow</span> : <span style="color:#2b91af;">Window</span><br />     {<br />         <span style="color:#0000ff;">private</span> <span style="color:#2b91af;">ObservableCollection</span>&lt;<span style="color:#0000ff;">string</span>&gt; states = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">ObservableCollection</span>&lt;<span style="color:#0000ff;">string</span>&gt;();</p>
<p>         <span style="color:#0000ff;">public</span> MainWindow()<br />         {<br />             InitializeComponent();</p>
<p>             states.Add(<span style="color:#a31515;">&quot;Maryland&quot;</span>);<br />             states.Add(<span style="color:#a31515;">&quot;California&quot;</span>);<br />             states.Add(<span style="color:#a31515;">&quot;Washington&quot;</span>);<br />             states.Add(<span style="color:#a31515;">&quot;Virginia&quot;</span>);<br />             states.Add(<span style="color:#a31515;">&quot;Florida&quot;</span>);</p>
<p>             DataContext = states;<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>This is the output of the program. </p>
<p><a href="http://zamjad.files.wordpress.com/2011/12/usercontrollist.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:block;float:none;margin-left:auto;border-top:0;margin-right:auto;border-right:0;padding-top:0;" title="UserControlList" border="0" alt="UserControlList" src="http://zamjad.files.wordpress.com/2011/12/usercontrollist_thumb.jpg?w=529&#038;h=354" width="529" height="354" /></a></p>
<br />Filed under: <a href='http://zamjad.wordpress.com/category/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/category/wpf/binding/'>Binding</a>, <a href='http://zamjad.wordpress.com/category/c/'>C#</a>, <a href='http://zamjad.wordpress.com/category/wpf/controls/'>Controls</a>, <a href='http://zamjad.wordpress.com/category/wpf/dependency-property/'>Dependency Property</a>, <a href='http://zamjad.wordpress.com/category/wpf/controls/usercontrol/'>UserControl</a>, <a href='http://zamjad.wordpress.com/category/wpf/'>WPF</a>, <a href='http://zamjad.wordpress.com/category/xaml/'>XAML</a> Tagged: <a href='http://zamjad.wordpress.com/tag/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/tag/binding/'>Binding</a>, <a href='http://zamjad.wordpress.com/tag/c/'>C#</a>, <a href='http://zamjad.wordpress.com/tag/control/'>Control</a>, <a href='http://zamjad.wordpress.com/tag/controls/'>Controls</a>, <a href='http://zamjad.wordpress.com/tag/dependencyproperty/'>DependencyProperty</a>, <a href='http://zamjad.wordpress.com/tag/user-control/'>User Control</a>, <a href='http://zamjad.wordpress.com/tag/wpf/'>WPF</a>, <a href='http://zamjad.wordpress.com/tag/xaml/'>XAML</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zamjad.wordpress.com/1734/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zamjad.wordpress.com/1734/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zamjad.wordpress.com/1734/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zamjad.wordpress.com/1734/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zamjad.wordpress.com/1734/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zamjad.wordpress.com/1734/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zamjad.wordpress.com/1734/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zamjad.wordpress.com/1734/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zamjad.wordpress.com/1734/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zamjad.wordpress.com/1734/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zamjad.wordpress.com/1734/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zamjad.wordpress.com/1734/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zamjad.wordpress.com/1734/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zamjad.wordpress.com/1734/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1734&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zamjad.wordpress.com/2011/12/30/dependency-property-in-user-control/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17220d61186226d4c57607dd9dc81806?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zamjad</media:title>
		</media:content>

		<media:content url="http://zamjad.files.wordpress.com/2011/12/usercontrollist_thumb.jpg" medium="image">
			<media:title type="html">UserControlList</media:title>
		</media:content>
	</item>
		<item>
		<title>Defining and use style using C# in ListBox</title>
		<link>http://zamjad.wordpress.com/2011/12/23/defining-and-use-style-using-c-in-listbox/</link>
		<comments>http://zamjad.wordpress.com/2011/12/23/defining-and-use-style-using-c-in-listbox/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 22:52:32 +0000</pubDate>
		<dc:creator>Zeeshan Amjad</dc:creator>
				<category><![CDATA[WPF]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[XAML]]></category>
		<category><![CDATA[Controls]]></category>
		<category><![CDATA[ListBox]]></category>
		<category><![CDATA[Style]]></category>
		<category><![CDATA[Control]]></category>
		<category><![CDATA[ListBoxItem]]></category>

		<guid isPermaLink="false">https://zamjad.wordpress.com/?p=1729</guid>
		<description><![CDATA[I came across a question that how can we change the background color of items in the list box. This is very straight forward task and can be done easily with style using XAML. Here is a simple XAML code to define the style for ListBoxItem. Code Snippet &#60;Style TargetType=&#34;{x:Type ListBoxItem}&#34;&#62;     &#60;Setter Property=&#34;Background&#34; Value=&#34;AliceBlue&#34;/&#62;     &#60;Setter [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1729&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I came across a question that how can we change the background color of items in the list box. This is very straight forward task and can be done easily with style using XAML. Here is a simple XAML code to define the style for ListBoxItem. </p>
<div style="width:496px;display:block;float:none;margin-left:auto;margin-right:auto;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:9620117a-6239-4e32-80bf-73f2c27998a9" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Style</span><span style="color:#ff0000;"> TargetType</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">x</span><span style="color:#0000ff;">:</span><span style="color:#a31515;">Type</span><span style="color:#ff0000;"> ListBoxItem}</span><span style="color:#0000ff;">&quot;&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Setter</span><span style="color:#ff0000;"> Property</span><span style="color:#0000ff;">=&quot;Background&quot;</span><span style="color:#ff0000;"> Value</span><span style="color:#0000ff;">=&quot;AliceBlue&quot;/&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Setter</span><span style="color:#ff0000;"> Property</span><span style="color:#0000ff;">=&quot;FontSize&quot;</span><span style="color:#ff0000;"> Value</span><span style="color:#0000ff;">=&quot;20&quot;/&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Setter</span><span style="color:#ff0000;"> Property</span><span style="color:#0000ff;">=&quot;Margin&quot;</span><span style="color:#ff0000;"> Value</span><span style="color:#0000ff;">=&quot;2&quot;/&gt;</span><br /> <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Style</span><span style="color:#0000ff;">&gt;</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>But the next question was how can we define and use it using C# code. Here is a simple C# code to define.</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:80fad9b5-ffee-466b-a443-7a65b5a83fd4" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;"><span style="color:#2b91af;">Style</span> myStyle = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Style</span>(<span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">ListBoxItem</span>));</p>
<p> myStyle.Setters.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Setter</span>(<span style="color:#2b91af;">ListBoxItem</span>.BackgroundProperty, <span style="color:#2b91af;">Brushes</span>.AliceBlue));<br /> myStyle.Setters.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Setter</span>(<span style="color:#2b91af;">ListBoxItem</span>.FontSizeProperty, 20.0));<br /> myStyle.Setters.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Setter</span>(<span style="color:#2b91af;">ListBoxItem</span>.MarginProperty, <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Thickness</span>(2.0)));</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>We shouldn’t assign the object of Style class to ListBox style property, because the style is ListBoxItem type (we define target type of style as ListBoxItem). Instead we used to set this to ItemContainerStyle property. </p>
<p>Here is a complete C# code of the program. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:66cff6b5-d950-4d3f-a932-bdf0c60d434c" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System.Collections.ObjectModel;<br /> <span style="color:#0000ff;">using</span> System.Windows;<br /> <span style="color:#0000ff;">using</span> System.Windows.Controls;<br /> <span style="color:#0000ff;">using</span> System.Windows.Media;</p>
<p> <span style="color:#0000ff;">namespace</span> WpfStyle<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for Window1.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">Window1</span> : <span style="color:#2b91af;">Window</span><br />     {<br />         <span style="color:#0000ff;">private</span> <span style="color:#2b91af;">ObservableCollection</span>&lt;<span style="color:#0000ff;">string</span>&gt; states = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">ObservableCollection</span>&lt;<span style="color:#0000ff;">string</span>&gt;();</p>
<p>         <span style="color:#0000ff;">public</span> Window1()<br />         {<br />             InitializeComponent();</p>
<p>             states.Add(<span style="color:#a31515;">&quot;Maryland&quot;</span>);<br />             states.Add(<span style="color:#a31515;">&quot;California&quot;</span>);<br />             states.Add(<span style="color:#a31515;">&quot;Virginia&quot;</span>);<br />             states.Add(<span style="color:#a31515;">&quot;Washington&quot;</span>);</p>
<p>             DataContext = states;</p>
<p>             <span style="color:#2b91af;">Style</span> myStyle = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Style</span>(<span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">ListBoxItem</span>));</p>
<p>             myStyle.Setters.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Setter</span>(<span style="color:#2b91af;">ListBoxItem</span>.BackgroundProperty, <span style="color:#2b91af;">Brushes</span>.AliceBlue));<br />             myStyle.Setters.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Setter</span>(<span style="color:#2b91af;">ListBoxItem</span>.FontSizeProperty, 20.0));<br />             myStyle.Setters.Add(<span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Setter</span>(<span style="color:#2b91af;">ListBoxItem</span>.MarginProperty, <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Thickness</span>(2.0)));</p>
<p>             list.ItemContainerStyle = myStyle;<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>And here is our XAML code. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a9e17d44-e3b2-463d-928e-1a1d51f44447" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Window</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Class</span><span style="color:#0000ff;">=&quot;WpfStyle.Window1&quot;</span><br />    <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;</span><br />    <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">x</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;</span><br />    <span style="color:#ff0000;"> Title</span><span style="color:#0000ff;">=&quot;Style&quot;</span><span style="color:#ff0000;"> Height</span><span style="color:#0000ff;">=&quot;300&quot;</span><span style="color:#ff0000;"> Width</span><span style="color:#0000ff;">=&quot;300&quot;&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Grid</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">ListBox</span><span style="color:#ff0000;"> Name</span><span style="color:#0000ff;">=&quot;list&quot;</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> ItemsSource</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding}</span><span style="color:#0000ff;">&quot;/&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Grid</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Window</span><span style="color:#0000ff;">&gt;</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Here is an output of the program. </p>
<p><a href="http://zamjad.files.wordpress.com/2011/12/listboxitemstyle.gif"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:block;float:none;margin-left:auto;border-top:0;margin-right:auto;border-right:0;padding-top:0;" title="ListBoxItemStyle" border="0" alt="ListBoxItemStyle" src="http://zamjad.files.wordpress.com/2011/12/listboxitemstyle_thumb.gif?w=240&#038;h=240" width="240" height="240" /></a></p>
<p>If we apply different styles with code and XAML at the same time, then the C# code will get precedence and we will see the style defined in C# code not in XAML. </p>
<br />Filed under: <a href='http://zamjad.wordpress.com/category/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/category/c/'>C#</a>, <a href='http://zamjad.wordpress.com/category/wpf/controls/'>Controls</a>, <a href='http://zamjad.wordpress.com/category/wpf/controls/listbox-controls-wpf/'>ListBox</a>, <a href='http://zamjad.wordpress.com/category/wpf/style/'>Style</a>, <a href='http://zamjad.wordpress.com/category/wpf/'>WPF</a>, <a href='http://zamjad.wordpress.com/category/xaml/'>XAML</a> Tagged: <a href='http://zamjad.wordpress.com/tag/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/tag/c/'>C#</a>, <a href='http://zamjad.wordpress.com/tag/control/'>Control</a>, <a href='http://zamjad.wordpress.com/tag/controls/'>Controls</a>, <a href='http://zamjad.wordpress.com/tag/listbox/'>ListBox</a>, <a href='http://zamjad.wordpress.com/tag/listboxitem/'>ListBoxItem</a>, <a href='http://zamjad.wordpress.com/tag/style/'>Style</a>, <a href='http://zamjad.wordpress.com/tag/wpf/'>WPF</a>, <a href='http://zamjad.wordpress.com/tag/xaml/'>XAML</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zamjad.wordpress.com/1729/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zamjad.wordpress.com/1729/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zamjad.wordpress.com/1729/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zamjad.wordpress.com/1729/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zamjad.wordpress.com/1729/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zamjad.wordpress.com/1729/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zamjad.wordpress.com/1729/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zamjad.wordpress.com/1729/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zamjad.wordpress.com/1729/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zamjad.wordpress.com/1729/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zamjad.wordpress.com/1729/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zamjad.wordpress.com/1729/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zamjad.wordpress.com/1729/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zamjad.wordpress.com/1729/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1729&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zamjad.wordpress.com/2011/12/23/defining-and-use-style-using-c-in-listbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17220d61186226d4c57607dd9dc81806?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zamjad</media:title>
		</media:content>

		<media:content url="http://zamjad.files.wordpress.com/2011/12/listboxitemstyle_thumb.gif" medium="image">
			<media:title type="html">ListBoxItemStyle</media:title>
		</media:content>
	</item>
		<item>
		<title>One more Visual Studio designer tip</title>
		<link>http://zamjad.wordpress.com/2011/12/16/one-more-visual-studio-designer-tip/</link>
		<comments>http://zamjad.wordpress.com/2011/12/16/one-more-visual-studio-designer-tip/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 05:10:15 +0000</pubDate>
		<dc:creator>Zeeshan Amjad</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[IMultiValueConverter]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[IValueConverter]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">https://zamjad.wordpress.com/?p=1717</guid>
		<description><![CDATA[We saw one small Visual Studio designer tip here. Now we are going to see one more tip. We studied few example of Value converter. Lets take a look at one example of IMultiValueConverter we discuss here. Here is our code. Code Snippet #region IMultiValueConverter public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1717&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We saw one small Visual Studio designer tip <a href="http://zamjad.wordpress.com/2010/08/21/one-small-visual-studio-wpf-designer-tip/">here</a>. Now we are going to see one more tip. We studied few example of Value converter. Lets take a look at one example of IMultiValueConverter we discuss <a href="http://zamjad.wordpress.com/2011/12/13/value-converter-and-markup-extension/">here</a>. Here is our code. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:415990cb-0345-44c6-bb28-12673c9abf02" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">#region</span> IMultiValueConverter</p>
<p> <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span> Convert(<span style="color:#0000ff;">object</span>[] values, <span style="color:#2b91af;">Type</span> targetType, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br /> {<br />     <span style="color:#0000ff;">string</span> firstName = values[0] <span style="color:#0000ff;">as</span> <span style="color:#0000ff;">string</span>;<br />     <span style="color:#0000ff;">string</span> lastName = values[1] <span style="color:#0000ff;">as</span> <span style="color:#0000ff;">string</span>;</p>
<p>     <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">string</span>.Format(<span style="color:#a31515;">&quot;{0}, {1}&quot;</span>, lastName, firstName);<br /> }</p>
<p> <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span>[] ConvertBack(<span style="color:#0000ff;">object</span> value, <span style="color:#2b91af;">Type</span>[] targetTypes, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br /> {<br />     <span style="color:#0000ff;">throw</span> <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">NotImplementedException</span>();<br /> }</p>
<p> <span style="color:#0000ff;">#endregion</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Here we are using as operator to check and cast the value into string type. We can directly cast it into string too, because we already know that the value is string. Here is our alternate code. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3cfb92b4-6421-4b25-bff3-ab0356912299" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">#region</span> IMultiValueConverter</p>
<p> <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span> Convert(<span style="color:#0000ff;">object</span>[] values, <span style="color:#2b91af;">Type</span> targetType, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br /> {<br />     <span style="color:#0000ff;">string</span> firstName = (<span style="color:#0000ff;">string</span>)values[0];<br />     <span style="color:#0000ff;">string</span> lastName = (<span style="color:#0000ff;">string</span>)values[1];</p>
<p>     <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">string</span>.Format(<span style="color:#a31515;">&quot;{0}, {1}&quot;</span>, lastName, firstName);<br /> }</p>
<p> <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span>[] ConvertBack(<span style="color:#0000ff;">object</span> value, <span style="color:#2b91af;">Type</span>[] targetTypes, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br /> {<br />     <span style="color:#0000ff;">throw</span> <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">NotImplementedException</span>();<br /> }</p>
<p> <span style="color:#0000ff;">#endregion</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>And program works exactly the same. Now take a look at the designer. We will get this error at design time. </p>
<p><a href="http://zamjad.files.wordpress.com/2011/12/designererror.jpg"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="DesignerError" border="0" alt="DesignerError" src="http://zamjad.files.wordpress.com/2011/12/designererror_thumb.jpg?w=771&#038;h=187" width="771" height="187" /></a></p>
<p>The reason is that as operator is not throwing an exception if not able to cast into target type. It simply returns null. Therefore it is better to use the as operator and check for null after that while implementing value converter to get an expected design time result. </p>
<br />Filed under: <a href='http://zamjad.wordpress.com/category/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/category/c/'>C#</a>, <a href='http://zamjad.wordpress.com/category/interface/imultivalueconverter/'>IMultiValueConverter</a>, <a href='http://zamjad.wordpress.com/category/interface/'>Interface</a>, <a href='http://zamjad.wordpress.com/category/interface/ivalueconverter/'>IValueConverter</a>, <a href='http://zamjad.wordpress.com/category/visual-studio/'>Visual Studio</a>, <a href='http://zamjad.wordpress.com/category/wpf/'>WPF</a> Tagged: <a href='http://zamjad.wordpress.com/tag/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/tag/c/'>C#</a>, <a href='http://zamjad.wordpress.com/tag/imultivalueconverter/'>IMultiValueConverter</a>, <a href='http://zamjad.wordpress.com/tag/interface/'>Interface</a>, <a href='http://zamjad.wordpress.com/tag/ivalueconverter/'>IValueConverter</a>, <a href='http://zamjad.wordpress.com/tag/visual-studio/'>Visual Studio</a>, <a href='http://zamjad.wordpress.com/tag/wpf/'>WPF</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zamjad.wordpress.com/1717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zamjad.wordpress.com/1717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zamjad.wordpress.com/1717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zamjad.wordpress.com/1717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zamjad.wordpress.com/1717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zamjad.wordpress.com/1717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zamjad.wordpress.com/1717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zamjad.wordpress.com/1717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zamjad.wordpress.com/1717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zamjad.wordpress.com/1717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zamjad.wordpress.com/1717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zamjad.wordpress.com/1717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zamjad.wordpress.com/1717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zamjad.wordpress.com/1717/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1717&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zamjad.wordpress.com/2011/12/16/one-more-visual-studio-designer-tip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17220d61186226d4c57607dd9dc81806?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zamjad</media:title>
		</media:content>

		<media:content url="http://zamjad.files.wordpress.com/2011/12/designererror_thumb.jpg" medium="image">
			<media:title type="html">DesignerError</media:title>
		</media:content>
	</item>
		<item>
		<title>Value Converter and Markup Extension</title>
		<link>http://zamjad.wordpress.com/2011/12/13/value-converter-and-markup-extension/</link>
		<comments>http://zamjad.wordpress.com/2011/12/13/value-converter-and-markup-extension/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 04:04:45 +0000</pubDate>
		<dc:creator>Zeeshan Amjad</dc:creator>
				<category><![CDATA[WPF]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[XAML]]></category>
		<category><![CDATA[Markup Extension]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[IValueConverter]]></category>
		<category><![CDATA[IMultiValueConverter]]></category>
		<category><![CDATA[MarkupExtension]]></category>
		<category><![CDATA[MultiBinding]]></category>
		<category><![CDATA[ProvideValue]]></category>

		<guid isPermaLink="false">https://zamjad.wordpress.com/?p=1713</guid>
		<description><![CDATA[We saw an example of Multivalue converter markup extension here. Here we created a class inherited by MarkupExtension base class and implement IMultiValueConverter interface. In fact we can go one step ahead and implement both IValueConverter and IMultiValueConverter in our class so it can be used with Binding as well as Multi Binding. Here is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1713&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We saw an example of Multivalue converter markup extension <a href="http://zamjad.wordpress.com/2011/12/12/multi-value-converter-and-markup-extension/">here</a>. Here we created a class inherited by MarkupExtension base class and implement IMultiValueConverter interface. In fact we can go one step ahead and implement both IValueConverter and IMultiValueConverter in our class so it can be used with Binding as well as Multi Binding. Here is our class. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1aaefc31-503f-44bb-a69c-8e6953d409dd" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;">[<span style="color:#2b91af;">ValueConversion</span>(<span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">String</span>), <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">String</span>))]<br /> <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">StudentNameExtension</span> : <span style="color:#2b91af;">MarkupExtension</span>, <br />     <span style="color:#2b91af;">IMultiValueConverter</span>,<br />     <span style="color:#2b91af;">IValueConverter</span><br /> {<br />     <span style="color:#0000ff;">public</span> StudentNameExtension()<br />     {</p>
<p>     }</p>
<p>     <span style="color:#0000ff;">#region</span> MarkupExtension<br />     <br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">override</span> <span style="color:#0000ff;">object</span> ProvideValue(<span style="color:#2b91af;">IServiceProvider</span> serviceProvider)<br />     {<br />         <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">this</span>;<br />     }</p>
<p>     <span style="color:#0000ff;">#endregion</span></p>
<p>     <span style="color:#0000ff;">#region</span> IMultiValueConverter</p>
<p>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span> Convert(<span style="color:#0000ff;">object</span>[] values, <span style="color:#2b91af;">Type</span> targetType, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br />     {<br />         <span style="color:#0000ff;">string</span> firstName = values[0] <span style="color:#0000ff;">as</span> <span style="color:#0000ff;">string</span>;<br />         <span style="color:#0000ff;">string</span> lastName = values[1] <span style="color:#0000ff;">as</span> <span style="color:#0000ff;">string</span>;</p>
<p>         <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">string</span>.Format(<span style="color:#a31515;">&quot;{0}, {1}&quot;</span>, lastName, firstName);<br />     }</p>
<p>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span>[] ConvertBack(<span style="color:#0000ff;">object</span> value, <span style="color:#2b91af;">Type</span>[] targetTypes, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br />     {<br />         <span style="color:#0000ff;">throw</span> <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">NotImplementedException</span>();<br />     }</p>
<p>     <span style="color:#0000ff;">#endregion</span></p>
<p>     <span style="color:#0000ff;">#region</span> IValueConverter<br />     <br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span> Convert(<span style="color:#0000ff;">object</span> value, <span style="color:#2b91af;">Type</span> targetType, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br />     {<br />         <span style="color:#2b91af;">Student</span> student = value <span style="color:#0000ff;">as</span> <span style="color:#2b91af;">Student</span>;</p>
<p>         <span style="color:#0000ff;">if</span> (student != <span style="color:#0000ff;">null</span>)<br />         {<br />             <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">string</span>.Format(<span style="color:#a31515;">&quot;{0}, {1}&quot;</span>, student.LastName, student.FirstName);<br />         }<br />         <span style="color:#0000ff;">else</span><br />         {<br />             <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">string</span>.Empty;<br />         }<br />     }</p>
<p>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span> ConvertBack(<span style="color:#0000ff;">object</span> value, <span style="color:#2b91af;">Type</span> targetType, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br />     {<br />         <span style="color:#0000ff;">throw</span> <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">NotImplementedException</span>();<br />     }</p>
<p>     <span style="color:#0000ff;">#endregion</span><br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>The usage of this class is also very simple. Here is the usage of both converter in binding and multi binding. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8b3e1495-5766-4270-a944-8805ec7bcf81" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock.Text</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">MultiBinding</span><span style="color:#ff0000;"> Converter</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">local</span><span style="color:#0000ff;">:</span><span style="color:#a31515;">StudentName}</span><span style="color:#0000ff;">&quot;&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> Path</span><span style="color:#0000ff;">=&quot;FirstName&quot;/&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> Path</span><span style="color:#0000ff;">=&quot;LastName&quot;/&gt;</span><br />             <span style="color:#a31515;">                </span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">MultiBinding</span><span style="color:#0000ff;">&gt;</span><span style="color:#a31515;"></span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock.Text</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> Converter</span><span style="color:#0000ff;">={</span><span style="color:#a31515;">local</span><span style="color:#0000ff;">:</span><span style="color:#a31515;">StudentName}}</span><span style="color:#0000ff;">&quot; /&gt;</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Here is complete C# code of the program. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b35a532e-7e15-44b9-bbcc-12eda35f09a1" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System;<br /> <span style="color:#0000ff;">using</span> System.Globalization;<br /> <span style="color:#0000ff;">using</span> System.Windows;<br /> <span style="color:#0000ff;">using</span> System.Windows.Data;<br /> <span style="color:#0000ff;">using</span> System.Windows.Markup;</p>
<p> <span style="color:#0000ff;">namespace</span> WpfMultiValue<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for MainWindow.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">MainWindow</span> : <span style="color:#2b91af;">Window</span><br />     {<br />         <span style="color:#0000ff;">public</span> MainWindow()<br />         {<br />             InitializeComponent();</p>
<p>             <span style="color:#2b91af;">Student</span> student = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { FirstName = <span style="color:#a31515;">&quot;Bob&quot;</span>, LastName = <span style="color:#a31515;">&quot;Smith&quot;</span> };</p>
<p>             DataContext = student;<br />         }<br />     }</p>
<p>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">Student</span><br />     {<br />         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">string</span> FirstName<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">string</span> LastName<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }<br />     }<br />     <br />     [<span style="color:#2b91af;">ValueConversion</span>(<span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">String</span>), <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">String</span>))]<br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">StudentNameExtension</span> : <span style="color:#2b91af;">MarkupExtension</span>, <br />         <span style="color:#2b91af;">IMultiValueConverter</span>,<br />         <span style="color:#2b91af;">IValueConverter</span><br />     {<br />         <span style="color:#0000ff;">public</span> StudentNameExtension()<br />         {</p>
<p>         }</p>
<p>         <span style="color:#0000ff;">#region</span> MarkupExtension<br />         <br />         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">override</span> <span style="color:#0000ff;">object</span> ProvideValue(<span style="color:#2b91af;">IServiceProvider</span> serviceProvider)<br />         {<br />             <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">this</span>;<br />         }</p>
<p>         <span style="color:#0000ff;">#endregion</span></p>
<p>         <span style="color:#0000ff;">#region</span> IMultiValueConverter</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span> Convert(<span style="color:#0000ff;">object</span>[] values, <span style="color:#2b91af;">Type</span> targetType, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br />         {<br />             <span style="color:#0000ff;">string</span> firstName = values[0] <span style="color:#0000ff;">as</span> <span style="color:#0000ff;">string</span>;<br />             <span style="color:#0000ff;">string</span> lastName = values[1] <span style="color:#0000ff;">as</span> <span style="color:#0000ff;">string</span>;</p>
<p>             <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">string</span>.Format(<span style="color:#a31515;">&quot;{0}, {1}&quot;</span>, lastName, firstName);<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span>[] ConvertBack(<span style="color:#0000ff;">object</span> value, <span style="color:#2b91af;">Type</span>[] targetTypes, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br />         {<br />             <span style="color:#0000ff;">throw</span> <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">NotImplementedException</span>();<br />         }</p>
<p>         <span style="color:#0000ff;">#endregion</span></p>
<p>         <span style="color:#0000ff;">#region</span> IValueConverter<br />         <br />         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span> Convert(<span style="color:#0000ff;">object</span> value, <span style="color:#2b91af;">Type</span> targetType, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br />         {<br />             <span style="color:#2b91af;">Student</span> student = value <span style="color:#0000ff;">as</span> <span style="color:#2b91af;">Student</span>;</p>
<p>             <span style="color:#0000ff;">if</span> (student != <span style="color:#0000ff;">null</span>)<br />             {<br />                 <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">string</span>.Format(<span style="color:#a31515;">&quot;{0}, {1}&quot;</span>, student.LastName, student.FirstName);<br />             }<br />             <span style="color:#0000ff;">else</span><br />             {<br />                 <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">string</span>.Empty;<br />             }<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span> ConvertBack(<span style="color:#0000ff;">object</span> value, <span style="color:#2b91af;">Type</span> targetType, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br />         {<br />             <span style="color:#0000ff;">throw</span> <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">NotImplementedException</span>();<br />         }</p>
<p>         <span style="color:#0000ff;">#endregion</span><br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>And here is complete XAML code of the program. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:66caecf9-538b-48a1-b4cc-53c06b70bc14" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Window</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Class</span><span style="color:#0000ff;">=&quot;WpfMultiValue.MainWindow&quot;</span><br />        <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;</span><br />        <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">x</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;</span><br />        <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">local</span><span style="color:#0000ff;">=&quot;clr-namespace:WpfMultiValue&quot;</span><br />        <span style="color:#ff0000;"> Title</span><span style="color:#0000ff;">=&quot;MainWindow&quot;</span><span style="color:#ff0000;"> Height</span><span style="color:#0000ff;">=&quot;350&quot;</span><span style="color:#ff0000;"> Width</span><span style="color:#0000ff;">=&quot;525&quot;&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">StackPanel</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock.Text</span><span style="color:#0000ff;">&gt;</span><br />                 <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">MultiBinding</span><span style="color:#ff0000;"> Converter</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">local</span><span style="color:#0000ff;">:</span><span style="color:#a31515;">StudentName}</span><span style="color:#0000ff;">&quot;&gt;</span><br />                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> Path</span><span style="color:#0000ff;">=&quot;FirstName&quot;/&gt;</span><br />                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> Path</span><span style="color:#0000ff;">=&quot;LastName&quot;/&gt;</span><br />                     <span style="color:#a31515;">                </span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">MultiBinding</span><span style="color:#0000ff;">&gt;</span><span style="color:#a31515;"></span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock.Text</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;</span><span style="color:#ff0000;"> Text</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> Converter</span><span style="color:#0000ff;">={</span><span style="color:#a31515;">local</span><span style="color:#0000ff;">:</span><span style="color:#a31515;">StudentName}}</span><span style="color:#0000ff;">&quot; /&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">StackPanel</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Window</span><span style="color:#0000ff;">&gt;</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Here is the output of the program. </p>
<p><a href="http://zamjad.files.wordpress.com/2011/12/bindingmultibinding.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="BindingMultiBinding" border="0" alt="BindingMultiBinding" src="http://zamjad.files.wordpress.com/2011/12/bindingmultibinding_thumb.jpg?w=529&#038;h=354" width="529" height="354" /></a></p>
<br />Filed under: <a href='http://zamjad.wordpress.com/category/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/category/c/'>C#</a>, <a href='http://zamjad.wordpress.com/category/interface/imultivalueconverter/'>IMultiValueConverter</a>, <a href='http://zamjad.wordpress.com/category/interface/'>Interface</a>, <a href='http://zamjad.wordpress.com/category/interface/ivalueconverter/'>IValueConverter</a>, <a href='http://zamjad.wordpress.com/category/wpf/markup-extension/'>Markup Extension</a>, <a href='http://zamjad.wordpress.com/category/wpf/'>WPF</a>, <a href='http://zamjad.wordpress.com/category/xaml/'>XAML</a> Tagged: <a href='http://zamjad.wordpress.com/tag/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/tag/c/'>C#</a>, <a href='http://zamjad.wordpress.com/tag/imultivalueconverter/'>IMultiValueConverter</a>, <a href='http://zamjad.wordpress.com/tag/interface/'>Interface</a>, <a href='http://zamjad.wordpress.com/tag/ivalueconverter/'>IValueConverter</a>, <a href='http://zamjad.wordpress.com/tag/markupextension/'>MarkupExtension</a>, <a href='http://zamjad.wordpress.com/tag/multibinding/'>MultiBinding</a>, <a href='http://zamjad.wordpress.com/tag/providevalue/'>ProvideValue</a>, <a href='http://zamjad.wordpress.com/tag/wpf/'>WPF</a>, <a href='http://zamjad.wordpress.com/tag/xaml/'>XAML</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zamjad.wordpress.com/1713/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zamjad.wordpress.com/1713/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zamjad.wordpress.com/1713/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zamjad.wordpress.com/1713/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zamjad.wordpress.com/1713/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zamjad.wordpress.com/1713/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zamjad.wordpress.com/1713/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zamjad.wordpress.com/1713/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zamjad.wordpress.com/1713/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zamjad.wordpress.com/1713/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zamjad.wordpress.com/1713/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zamjad.wordpress.com/1713/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zamjad.wordpress.com/1713/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zamjad.wordpress.com/1713/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1713&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zamjad.wordpress.com/2011/12/13/value-converter-and-markup-extension/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17220d61186226d4c57607dd9dc81806?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zamjad</media:title>
		</media:content>

		<media:content url="http://zamjad.files.wordpress.com/2011/12/bindingmultibinding_thumb.jpg" medium="image">
			<media:title type="html">BindingMultiBinding</media:title>
		</media:content>
	</item>
		<item>
		<title>Multi value converter and Markup extension</title>
		<link>http://zamjad.wordpress.com/2011/12/12/multi-value-converter-and-markup-extension/</link>
		<comments>http://zamjad.wordpress.com/2011/12/12/multi-value-converter-and-markup-extension/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 04:17:58 +0000</pubDate>
		<dc:creator>Zeeshan Amjad</dc:creator>
				<category><![CDATA[WPF]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[XAML]]></category>
		<category><![CDATA[Markup Extension]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[IMultiValueConverter]]></category>
		<category><![CDATA[MarkupExtension]]></category>

		<guid isPermaLink="false">https://zamjad.wordpress.com/?p=1709</guid>
		<description><![CDATA[I came across a question that I have a class with two properties, such as FirstName and LastName, but I want to display the value of these in one control such as TextBlock, how can I do this. In fact there are more than one way to do this. The simplest solution is to do [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1709&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I came across a question that I have a class with two properties, such as FirstName and LastName, but I want to display the value of these in one control such as TextBlock, how can I do this. In fact there are more than one way to do this. The simplest solution is to do a multi binding and implement IMultiValueConverter nterface. Here is a simple implementation of our interface. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:5c20d464-70fb-4b5a-a83c-3f5b99cbb0c9" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;">[<span style="color:#2b91af;">ValueConversion</span>(<span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">String</span>), <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">String</span>))]<br /> <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">MultiValue</span> : <span style="color:#2b91af;">IMultiValueConverter</span><br /> {<br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span> Convert(<span style="color:#0000ff;">object</span>[] values, <span style="color:#2b91af;">Type</span> targetType, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br />     {<br />         <span style="color:#0000ff;">string</span> firstName = values[0] <span style="color:#0000ff;">as</span> <span style="color:#0000ff;">string</span>;<br />         <span style="color:#0000ff;">string</span> lastName = values[1] <span style="color:#0000ff;">as</span> <span style="color:#0000ff;">string</span>;</p>
<p>         <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">string</span>.Format(<span style="color:#a31515;">&quot;{0}, {1}&quot;</span>, lastName, firstName);<br />     }</p>
<p>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span>[] ConvertBack(<span style="color:#0000ff;">object</span> value, <span style="color:#2b91af;">Type</span>[] targetTypes, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br />     {<br />         <span style="color:#0000ff;">throw</span> <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">NotImplementedException</span>();<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>We create an object of it in window resource. </p>
<div style="width:496px;display:block;float:none;margin-left:auto;margin-right:auto;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:af0033b2-6a68-4335-b27b-7f5587fae877" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">local</span><span style="color:#0000ff;">:</span><span style="color:#a31515;">MultiValue</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Key</span><span style="color:#0000ff;">=&quot;multiValue&quot;/&gt;</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>And here is the usage of it. </p>
<p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3d40caec-97f7-48ef-84f2-e71795888a86" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock.Text</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">MultiBinding</span><span style="color:#ff0000;"> Converter</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">StaticResource</span><span style="color:#ff0000;"> multiValue}</span><span style="color:#0000ff;">&quot;&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> Path</span><span style="color:#0000ff;">=&quot;FirstName&quot;/&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> Path</span><span style="color:#0000ff;">=&quot;LastName&quot;/&gt;</span><br />             <span style="color:#a31515;">                </span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">MultiBinding</span><span style="color:#0000ff;">&gt;</span><span style="color:#a31515;"></span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock.Text</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock</span><span style="color:#0000ff;">&gt;</span></div>
</p></div>
</p></div>
</p>
<p>But like lots of other WPF thing, here we can do it in more than one way. We can create a markup extension which implement the IMultiValueConverter interface. We already saw few examples of markup extension which implement IValueConverter <a href="http://zamjad.wordpress.com/2011/08/01/range-converter-revisited/">here</a> and <a href="http://zamjad.wordpress.com/2011/11/24/string-converter-revisited/">here</a>. </p>
<p>Here is a markup extension to implement IValueConverter. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:22efb13a-26bb-4186-a676-bb77a3328534" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;">[<span style="color:#2b91af;">ValueConversion</span>(<span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">String</span>), <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">String</span>))]<br /> <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">MultiValueExtension</span> : <span style="color:#2b91af;">MarkupExtension</span>, <span style="color:#2b91af;">IMultiValueConverter</span><br /> {<br />     <span style="color:#0000ff;">public</span> MultiValueExtension()<br />     {</p>
<p>     }</p>
<p>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">override</span> <span style="color:#0000ff;">object</span> ProvideValue(<span style="color:#2b91af;">IServiceProvider</span> serviceProvider)<br />     {<br />         <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">this</span>;<br />     }</p>
<p>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span> Convert(<span style="color:#0000ff;">object</span>[] values, <span style="color:#2b91af;">Type</span> targetType, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br />     {<br />         <span style="color:#0000ff;">string</span> firstName = values[0] <span style="color:#0000ff;">as</span> <span style="color:#0000ff;">string</span>;<br />         <span style="color:#0000ff;">string</span> lastName = values[1] <span style="color:#0000ff;">as</span> <span style="color:#0000ff;">string</span>;</p>
<p>         <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">string</span>.Format(<span style="color:#a31515;">&quot;{0}, {1}&quot;</span>, lastName, firstName);<br />     }</p>
<p>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span>[] ConvertBack(<span style="color:#0000ff;">object</span> value, <span style="color:#2b91af;">Type</span>[] targetTypes, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br />     {<br />         <span style="color:#0000ff;">throw</span> <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">NotImplementedException</span>();<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Here is a usage of this markup extension. </p>
<div style="width:496px;display:block;float:none;margin-left:auto;margin-right:auto;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:d37262d8-608a-49b8-b691-39303bb631fd" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock.Text</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">MultiBinding</span><span style="color:#ff0000;"> Converter</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">local</span><span style="color:#0000ff;">:</span><span style="color:#a31515;">MultiValue}</span><span style="color:#0000ff;">&quot;&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> Path</span><span style="color:#0000ff;">=&quot;FirstName&quot;/&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> Path</span><span style="color:#0000ff;">=&quot;LastName&quot;/&gt;</span><br />             <span style="color:#a31515;">                </span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">MultiBinding</span><span style="color:#0000ff;">&gt;</span><span style="color:#a31515;"></span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock.Text</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock</span><span style="color:#0000ff;">&gt;</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p>Here is a complete C# code of our program.</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:7e41df16-5a81-49d6-96d5-bed9740412c8" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">using</span> System;<br /> <span style="color:#0000ff;">using</span> System.Globalization;<br /> <span style="color:#0000ff;">using</span> System.Windows;<br /> <span style="color:#0000ff;">using</span> System.Windows.Data;<br /> <span style="color:#0000ff;">using</span> System.Windows.Markup;</p>
<p> <span style="color:#0000ff;">namespace</span> WpfMultiValue<br /> {<br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;summary&gt;</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> Interaction logic for MainWindow.xaml</span><br />     <span style="color:#808080;">///</span><span style="color:#008000;"> </span><span style="color:#808080;">&lt;/summary&gt;</span><br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">partial</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">MainWindow</span> : <span style="color:#2b91af;">Window</span><br />     {<br />         <span style="color:#0000ff;">public</span> MainWindow()<br />         {<br />             InitializeComponent();</p>
<p>             <span style="color:#2b91af;">Student</span> student = <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">Student</span>() { FirstName = <span style="color:#a31515;">&quot;Bob&quot;</span>, LastName = <span style="color:#a31515;">&quot;Smith&quot;</span> };</p>
<p>             DataContext = student;<br />         }<br />     }</p>
<p>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">Student</span><br />     {<br />         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">string</span> FirstName<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">string</span> LastName<br />         { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }<br />     }<br />     <br />     [<span style="color:#2b91af;">ValueConversion</span>(<span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">String</span>), <span style="color:#0000ff;">typeof</span>(<span style="color:#2b91af;">String</span>))]<br />     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> <span style="color:#2b91af;">MultiValueExtension</span> : <span style="color:#2b91af;">MarkupExtension</span>, <span style="color:#2b91af;">IMultiValueConverter</span><br />     {<br />         <span style="color:#0000ff;">public</span> MultiValueExtension()<br />         {</p>
<p>         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">override</span> <span style="color:#0000ff;">object</span> ProvideValue(<span style="color:#2b91af;">IServiceProvider</span> serviceProvider)<br />         {<br />             <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">this</span>;<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span> Convert(<span style="color:#0000ff;">object</span>[] values, <span style="color:#2b91af;">Type</span> targetType, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br />         {<br />             <span style="color:#0000ff;">string</span> firstName = values[0] <span style="color:#0000ff;">as</span> <span style="color:#0000ff;">string</span>;<br />             <span style="color:#0000ff;">string</span> lastName = values[1] <span style="color:#0000ff;">as</span> <span style="color:#0000ff;">string</span>;</p>
<p>             <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">string</span>.Format(<span style="color:#a31515;">&quot;{0}, {1}&quot;</span>, lastName, firstName);<br />         }</p>
<p>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span>[] ConvertBack(<span style="color:#0000ff;">object</span> value, <span style="color:#2b91af;">Type</span>[] targetTypes, <span style="color:#0000ff;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)<br />         {<br />             <span style="color:#0000ff;">throw</span> <span style="color:#0000ff;">new</span> <span style="color:#2b91af;">NotImplementedException</span>();<br />         }<br />     }<br /> }</div>
</p></div>
</p></div>
<p>&#160;</p>
<p>And here is complete XAML code of the program. </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:acd099dc-2cd3-402f-8659-55e5f8133600" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background-color:#ffffff;overflow:auto;white-space:nowrap;padding:2px 5px;"><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Window</span><span style="color:#ff0000;"> x</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">Class</span><span style="color:#0000ff;">=&quot;WpfMultiValue.MainWindow&quot;</span><br />        <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;</span><br />        <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">x</span><span style="color:#0000ff;">=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;</span><br />        <span style="color:#ff0000;"> xmlns</span><span style="color:#0000ff;">:</span><span style="color:#ff0000;">local</span><span style="color:#0000ff;">=&quot;clr-namespace:WpfMultiValue&quot;</span><br />        <span style="color:#ff0000;"> Title</span><span style="color:#0000ff;">=&quot;MainWindow&quot;</span><span style="color:#ff0000;"> Height</span><span style="color:#0000ff;">=&quot;350&quot;</span><span style="color:#ff0000;"> Width</span><span style="color:#0000ff;">=&quot;525&quot;&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Grid</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:#ff0000;"> Margin</span><span style="color:#0000ff;">=&quot;5&quot;&gt;</span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">TextBlock.Text</span><span style="color:#0000ff;">&gt;</span><br />                 <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">MultiBinding</span><span style="color:#ff0000;"> Converter</span><span style="color:#0000ff;">=&quot;{</span><span style="color:#a31515;">local</span><span style="color:#0000ff;">:</span><span style="color:#a31515;">MultiValue}</span><span style="color:#0000ff;">&quot;&gt;</span><br />                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> Path</span><span style="color:#0000ff;">=&quot;FirstName&quot;/&gt;</span><br />                     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Binding</span><span style="color:#ff0000;"> Path</span><span style="color:#0000ff;">=&quot;LastName&quot;/&gt;</span><br />                     <span style="color:#a31515;">                </span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">MultiBinding</span><span style="color:#0000ff;">&gt;</span><span style="color:#a31515;"></span><br />             <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock.Text</span><span style="color:#0000ff;">&gt;</span><br />         <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">TextBlock</span><span style="color:#0000ff;">&gt;</span><br />     <span style="color:#a31515;"></span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Grid</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Window</span><span style="color:#0000ff;">&gt;</span></div>
</p></div>
</p></div>
<p>&#160;</p>
<p><a href="http://zamjad.files.wordpress.com/2011/12/multivalueconvertermarkupextension.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="MultiValueConverterMarkupExtension" border="0" alt="MultiValueConverterMarkupExtension" src="http://zamjad.files.wordpress.com/2011/12/multivalueconvertermarkupextension_thumb.jpg?w=529&#038;h=354" width="529" height="354" /></a></p>
<br />Filed under: <a href='http://zamjad.wordpress.com/category/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/category/c/'>C#</a>, <a href='http://zamjad.wordpress.com/category/interface/imultivalueconverter/'>IMultiValueConverter</a>, <a href='http://zamjad.wordpress.com/category/interface/'>Interface</a>, <a href='http://zamjad.wordpress.com/category/wpf/markup-extension/'>Markup Extension</a>, <a href='http://zamjad.wordpress.com/category/wpf/'>WPF</a>, <a href='http://zamjad.wordpress.com/category/xaml/'>XAML</a> Tagged: <a href='http://zamjad.wordpress.com/tag/net/'>.Net</a>, <a href='http://zamjad.wordpress.com/tag/c/'>C#</a>, <a href='http://zamjad.wordpress.com/tag/imultivalueconverter/'>IMultiValueConverter</a>, <a href='http://zamjad.wordpress.com/tag/interface/'>Interface</a>, <a href='http://zamjad.wordpress.com/tag/markupextension/'>MarkupExtension</a>, <a href='http://zamjad.wordpress.com/tag/wpf/'>WPF</a>, <a href='http://zamjad.wordpress.com/tag/xaml/'>XAML</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zamjad.wordpress.com/1709/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zamjad.wordpress.com/1709/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zamjad.wordpress.com/1709/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zamjad.wordpress.com/1709/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zamjad.wordpress.com/1709/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zamjad.wordpress.com/1709/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zamjad.wordpress.com/1709/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zamjad.wordpress.com/1709/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zamjad.wordpress.com/1709/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zamjad.wordpress.com/1709/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zamjad.wordpress.com/1709/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zamjad.wordpress.com/1709/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zamjad.wordpress.com/1709/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zamjad.wordpress.com/1709/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zamjad.wordpress.com&amp;blog=8548805&amp;post=1709&amp;subd=zamjad&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zamjad.wordpress.com/2011/12/12/multi-value-converter-and-markup-extension/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17220d61186226d4c57607dd9dc81806?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zamjad</media:title>
		</media:content>

		<media:content url="http://zamjad.files.wordpress.com/2011/12/multivalueconvertermarkupextension_thumb.jpg" medium="image">
			<media:title type="html">MultiValueConverterMarkupExtension</media:title>
		</media:content>
	</item>
	</channel>
</rss>
