<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
   <channel>
      <title>ligAZ blogs</title>
      <description>Stefan Dobrev speaking ...</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=ZKEOPsML3RGD2__96kjTQA</link>
      <atom:link rel="next" href="http://pipes.yahoo.com/pipes/pipe.run?_id=ZKEOPsML3RGD2__96kjTQA&amp;_render=rss&amp;page=2" />
      <pubDate>Fri, 10 Feb 2012 08:11:46 +0000</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ligaz" /><feedburner:info uri="ligaz" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
         <title>Migrating Reflector’s Lists to JustDecompile ones</title>
         <link>http://feedproxy.google.com/~r/ligaz/~3/yb9ukii7l8k/migrating-reflector-s-lists-to-justdecompile-ones.aspx</link>
         <description>&lt;p&gt;If you (like me) &lt;strong&gt;were&lt;/strong&gt; a heavy &lt;a rel="nofollow" target="_blank" href="http://reflector.red-gate.com"&gt;Reflector&lt;/a&gt; user you will probably like the tool that I’m going to share with you today. It is a very simple WPF application that allows you to migrate your existing Reflector's list to their &lt;a rel="nofollow" target="_blank" href="http://www.telerik.com/products/decompiling.aspx"&gt;JustDecompile&lt;/a&gt; equivalents. Usage is pretty straight forward. You just™ point the app to your Reflector’s installation folder and it will take care of the rest.&lt;/p&gt; &lt;div style="padding:0px;margin:0px;display:inline;float:none;" id="scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:140700d3-6df7-407f-a3e9-6f37f30ce6a7" class="wlWriterEditableSmartContent"&gt; &lt;p&gt;You can download the tool &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlogLib/JustMigrate_1F50221E.sflb"&gt;here.&lt;/a&gt;&lt;/p&gt; &lt;/div&gt; &lt;p&gt;
Any feedback: bugs and feature requests is more than welcome.
&lt;/p&gt; &lt;p&gt;
Let's finish with a rhyme:&lt;br /&gt; &lt;em&gt;Let the force&lt;/em&gt;&lt;br /&gt; &lt;em&gt;of a freely decompiled source&lt;/em&gt;&lt;br /&gt; &lt;em&gt;guide you in your course.&lt;/em&gt; &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ligaz/~4/yb9ukii7l8k" height="1" width="1"/&gt;</description>
         <author>Stefan Dobrev</author>
         <guid isPermaLink="false">39e8ef90-74d9-4b24-9280-f2221e5fc288</guid>
         <pubDate>Mon, 16 May 2011 21:37:41 +0000</pubDate>
      <feedburner:origLink>http://blogs.telerik.com/StefanDobrev/Posts/11-05-16/migrating-reflector-s-lists-to-justdecompile-ones.aspx</feedburner:origLink></item>
      <item>
         <title>Why we have built RadDomainDataSource for Silverlight?</title>
         <link>http://feedproxy.google.com/~r/ligaz/~3/xFnUUP9vroc/why-we-have-built-raddomaindatasource-for-silverlight.aspx</link>
         <description>&lt;p&gt;Although &lt;a rel="nofollow" target="_blank" href="http://www.twitter.com/hamorphis"&gt;Rossen&lt;/a&gt; has stated almost all of the things in &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/blogs/posts/10-12-24/introducing_raddomaindatasource_for_silverlight.aspx"&gt;his introductory blog post about RadDomainDataSource&lt;/a&gt; I wanted to create a separate blog entry which answers the most important question that you might be asking: “&lt;em&gt;Why Telerik have developed their own version of a domain data source component?”&lt;/em&gt; Here is the answer:&lt;/p&gt;  &lt;h3&gt;We felt your pain&lt;/h3&gt;  &lt;p&gt;We have received numerous &lt;a rel="nofollow" target="_blank" href="http://www.telerik.com/support/pits.aspx#/public/silverlight/2796"&gt;forum posts and support tickets&lt;/a&gt; stating that you want a codeless approach to data-binding that supports most common data operations without the need for any custom code. During the times when RadDomainDataSource was not available you will have to write hundreds of lines of code in order to support server side filtering. Yes sorting and paging were happening on the server automatically, but who needs them without the power of the built-in Excel like filtering of RadGridView. You wanted a seamless integration between your data and our data oriented components like: RadDataFilter, RadDataPager or RadGridView and this is exactly what we have developed. We are also making sure that &lt;a rel="nofollow" target="_blank" href="http://www.telerik.com/support/pits.aspx#/public/silverlight/1608"&gt;any future data component&lt;/a&gt; that will be developed will lay on the foundation that we have already established and will integrate smoothly as others do.&lt;/p&gt;  &lt;h3&gt;We wanted to add value&lt;/h3&gt;  &lt;p&gt;Microsoft’s DomainDataSource lacks &lt;a rel="nofollow" target="_blank" href="http://dotnet.uservoice.com/forums/57026-wcf-ria-services/suggestions/757566-nested-filter-groups-and-extensible-filter-support"&gt;some key capabilities&lt;/a&gt; and this is a place for someone like Telerik to step up and fill these holes. Here are some of the v1 features that add value to our offering compared to the Microsoft’s one:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Filter Composition – we support nesting of filter descriptors to unlimited depth allowing you to compose complex filter conditions. &lt;/li&gt;    &lt;li&gt;Fine grained query parameter control – We expose a PreparedParameterValue event which provides a way for you to change each parameter or handle a possible exception before the entity query is sent to the server. This opens the door for handling any custom query scenario that you might have. &lt;/li&gt;    &lt;li&gt;Along with the control we are shipping a set of extension methods which allow you to write native LINQ expression against an entity query object. Those are very handy in data virtualization scenarios like &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/vladimirenchev/posts/10-12-09/server_sorting_and_filtering_with_wcf_ria_services_and_telerik_data_virtualization_for_silverlight.aspx"&gt;the one in this blog post&lt;/a&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;We heard you - the community&lt;/h3&gt;  &lt;p&gt;One of the most requested feature on RIA services suggestions forum is &lt;a rel="nofollow" target="_blank" href="http://dotnet.uservoice.com/forums/57026-wcf-ria-services/suggestions/749028-mvvm-friendly-domaindatasource?ref=title"&gt;“MVVM friendly DomainDataSource”&lt;/a&gt;. This question was also asked a great number of times on our forums as well. We as you believe that putting a control in your ViewModel is far away from any best practices and this is the reason why RadDomainDataSource was developed with MVVM in mind. What do we mean by that? We are exposing the heart of the control named – QueryableDomainServiceCollectionView as public class that you can start using in your ViewModels right away. You can learn the details &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/blogs/posts/10-12-31/an_mvvm_approach_to_telerik_domain_services_for_silverlight.aspx"&gt;here&lt;/a&gt;. So our answer to the MVVM purists out there is: We got you covered!&lt;/p&gt;  &lt;h3&gt;We wanted to invest in the future&lt;/h3&gt;  &lt;p&gt;Last but not least we wanted to built a foundation for future data source components that we are going to develop. We are pretty sure that what we have developed can be easily extended to support other data access technologies providing filtering, sorting, grouping, paging and aggregation out-of-the-box. This means that you can expect a pleiad of data source controls coming up during the year.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Having all these objectives on the table we have decided to invest our time in developing RadDomainDataSource for Silverlight. I hope you like the end result as much as we do.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Don’t miss other RadDomainDataSource related blog posts:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/rossenhristov/posts/10-12-24/introducing_raddomaindatasource_for_silverlight.aspx"&gt;Introducing RadDomainDataSource for Silverlight&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/blogs/posts/10-12-27/loading_data_with_raddomaindatasource_for_silverlight.aspx"&gt;Loading data with RadDomainDataSource for Silverlight&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/blogs/posts/10-12-28/creating_crud_application_with_raddomaindatasource_for_silverlight.aspx"&gt;Creating CRUD application with RadDomainDataSource for Silverlight&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/blogs/posts/10-12-31/an_mvvm_approach_to_telerik_domain_services_for_silverlight.aspx"&gt;An MVVM Approach to Telerik Domain Services for Silverlight&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/ligaz/~4/xFnUUP9vroc" height="1" width="1"/&gt;</description>
         <author>Stefan Dobrev</author>
         <guid isPermaLink="false">5d1b0774-a946-44f6-8718-62dd99f30492</guid>
         <pubDate>Mon, 03 Jan 2011 11:37:53 +0000</pubDate>
      <feedburner:origLink>http://blogs.telerik.com/StefanDobrev/Posts/11-01-03/why-we-have-built-raddomaindatasource-for-silverlight.aspx</feedburner:origLink></item>
      <item>
         <title>Bookvar goes open source</title>
         <link>http://feedproxy.google.com/~r/ligaz/~3/dQsFaIVpQ1U/bookvar-goes-open-source.aspx</link>
         <description>&lt;p&gt;It is a great pleasure for me to share an exciting news with you. As of today we are opening the source code of &lt;a rel="nofollow" target="_blank" href="http://bookvar.net"&gt;Bookvar&lt;/a&gt;&amp;nbsp;&lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Mind_mapping"&gt;mind mapping&lt;/a&gt; tool. You can find the source &lt;a rel="nofollow" target="_blank" href="http://bookvar.codeplex.com/"&gt;on Codeplex&lt;/a&gt; right next to other open source initiatives of ours, like &lt;a rel="nofollow" target="_blank" href="http://telerikaspnetmvc.codeplex.com/"&gt;Telerik MVC Extensions&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://telerikcab.codeplex.com/"&gt;CAB Enabling Kit for WinForms&lt;/a&gt;. &lt;/p&gt; &lt;h3&gt;A few caveats about the source code&lt;/h3&gt; &lt;p&gt;There are a few things that you need to know about the source code:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Most of the code was written when we were quite new to WPF and we were pioneering all those concepts. Looking back at that time I realize there are things that we would have definitely done better if we had the knowledge we have today.&lt;/li&gt; &lt;li&gt;MAF is used instead of MEF. MEF was not available back in the time, but we would like to see the add-in model based on MEF. &lt;/li&gt; &lt;li&gt;WF 3.0 is used for the updating process workflow. We would love to see a flowchart implementation with new WF 4.0 capabilities. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Still there are some true gems in the source code like: undo/redo, chat service, services based architecture and others. &lt;/p&gt; &lt;h3&gt;Play time&lt;/h3&gt; &lt;p&gt;Now go straight to the &lt;a rel="nofollow" target="_blank" href="http://bookvar.codeplex.com/"&gt;code&lt;/a&gt; and start exploring it. Share your thoughts on &lt;a rel="nofollow" target="_blank" href="http://www.telerik.com/community/forums/open-source-projects/bookvar.aspx"&gt;our forums&lt;/a&gt; and don’t be afraid to contribute.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;As always we will end this with Bookvar’s mantra: &lt;strong&gt;Feel Free To Mind&lt;/strong&gt; (and contribute).&lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlogLib/Telerik_bookvar_logo_48DC6A9F.sflb"&gt;&lt;img style="display:inline;border-width:0px;border-style:solid;" title="Telerik_bookvar_logo" alt="Telerik_bookvar_logo" src="http://blogs.telerik.com/Libraries/MetaBlogLib/Telerik_bookvar_logo_thumb_77DDE4CF.sflb" width="112" height="104"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ligaz/~4/dQsFaIVpQ1U" height="1" width="1"/&gt;</description>
         <author>Stefan Dobrev</author>
         <guid isPermaLink="false">f5e75fe7-c8a2-4bbe-a4c3-655e68e294c9</guid>
         <pubDate>Tue, 31 Aug 2010 16:34:54 +0000</pubDate>
      <feedburner:origLink>http://blogs.telerik.com/StefanDobrev/Posts/10-08-31/bookvar-goes-open-source.aspx</feedburner:origLink></item>
      <item>
         <title>Implementing logical paging with RadDataPager for WPF and Silverlight</title>
         <link>http://feedproxy.google.com/~r/ligaz/~3/7H19z87dGho/implementing-logical-paging-with-raddatapager-for-wpf-and-silverlight.aspx</link>
         <description>&lt;p&gt;Following the great series about &lt;a rel="nofollow" target="_blank" href="http://www.telerik.com/help/silverlight/radgridview-paging-using-telerik-raddatapager.html"&gt;RadDataPager&lt;/a&gt; started by &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/rossenhristov/posts/10-03-10/q1_2010_new_feature_paging_with_radgridview_for_silverlight_and_wpf.aspx"&gt;Rossen&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/pavelpavlov/posts/10-03-16/restyling_raddatapager_for_wpf_and_silverlight.aspx"&gt;Pavel&lt;/a&gt; today I’m going to show you how to implement logical paging. We are going to implement alphabetical paging similar to &lt;a rel="nofollow" target="_blank" href="http://demos.telerik.com/aspnet-ajax/grid/examples/programming/alphabeticpaging/defaultcs.aspx"&gt;this ASP.NET AJAX Grid Demo&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;As you may already know the key to the heart of the RadDataPager is the &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.componentmodel.ipagedcollectionview%28VS.95%29.aspx"&gt;IPagedCollectionView&lt;/a&gt; interface. You can create your own implementations of this interface and implement any custom logic for paging you want. This is exactly what we are going to do in this article.&lt;/p&gt;  &lt;h2&gt;Introducing PagedCollectionViewBase and LogicallyPagedCollectionView&amp;lt;T&amp;gt;&lt;/h2&gt;  &lt;p&gt;If you have looked at IPagedCollectionView interface you may have found out that it is not a trivial interface to implement. It has 5 methods, 6 properties and 2 events – total number of members to implement 13. To ease any further implementation of the paging interface we are going to create a base class that will have most of the members implemented. Meet PagedCollectionViewBase class.&lt;/p&gt;  &lt;h3&gt;PagedCollectionViewBase class&lt;/h3&gt;  &lt;p&gt;This is an abstract base class, which implements IEnumerable, INotifyPropertyChanged, INotifyCollectionChanged and of course IPagedCollectionView. It boils down the implementation of the paging to overriding of two members – a property and a method: ItemCount and GetEnumerator(). It also has almost all of its members virtual so you can tweak the default implementation if you like. For the details of the implementation you can look at the attached source code. &lt;/p&gt;  &lt;p&gt;Using this base class you can create any kind of derivatives that implement the paging using their own mechanism. One could envision an event based one, which has a custom event raised when the paging needs to happen and providing the current paged items in the events arguments. Another way of implementing the paging is via a filtering predicate.&lt;/p&gt;  &lt;h3&gt;LogicallyPagedCollectionView&amp;lt;T&amp;gt; class&lt;/h3&gt;  &lt;p&gt;This class derives from PagedCollectionViewBase and introduces the concept of paging via a &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Predicate_%28mathematical_logic%29"&gt;predicate&lt;/a&gt;. You construct this view passing your collection in the constructor. Then you have to set its PageCount property to the desired number of pages and also you have to set the PagingPredicate property. Let’s look at the predicate property. It is defined like this:&lt;/p&gt;  &lt;div style="font-family:consolas;background:#e0e0e0;color:black;font-size:10pt;"&gt;   &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Expression&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T, &lt;span style="color:blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt; PagingPredicate { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;If you look closely you will see that its type is a &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/bb397687.aspx"&gt;LINQ Lambda Expression&lt;/a&gt;. This allow us to push the paging operation on the server if the view is initialized with an IQueryable implementation. Here is the code that does the paging itself:&lt;/p&gt;  &lt;div style="font-family:consolas;background:#e0e0e0;color:black;font-size:10pt;"&gt;   &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IQueryable&lt;/span&gt;&amp;lt;T&amp;gt; PagedView&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;{&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;get&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; query = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.sourceQueryable;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (&lt;span style="color:blue;"&gt;this&lt;/span&gt;.PagingPredicate != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query = query.Where(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.PagingPredicate);&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; query;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h2&gt;Implementing alphabetical paging with LogicallyPagedCollectionView&amp;lt;T&amp;gt;&lt;/h2&gt;  &lt;p&gt;Having LogicallyPagedCollectionView&amp;lt;T&amp;gt; in place implementing alphabetical paging will take no more than a few lines of code. Here is the code-behind for our page:&lt;/p&gt;  &lt;div style="font-family:consolas;background:#e0e0e0;color:black;font-size:10pt;"&gt;   &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; MainPage()&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;{&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;this&lt;/span&gt;.InitializeComponent();&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; pagedCollectionView = &lt;span style="color:blue;"&gt;new&lt;/span&gt; LogicallyPagedCollectionView&amp;lt;Item&amp;gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt; SampleDataSource().Collection);&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; pagedCollectionView.PageCount = 26;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; pagedCollectionView.PagingPredicate =&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (i) =&amp;gt; i.Property1.ToLower().StartsWith(PageIndexToCharConverter.Convert(pagedCollectionView.PageIndex).ToString());&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;this&lt;/span&gt;.DataContext = pagedCollectionView;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;You can see that we are initializing the view with some sample data that Blend generated for us. We are setting the page count to 26 – the number of letters in the English alphabet. Then we are setting the paging predicate which will filter out those items which name doesn’t not start with the given page index converted to a char. Finally we are assigning the view as data context so we can bind to it in the XAML. Before looking at the XAML lets first take a look at the PageIndexToCharConverter class. Here it goes:&lt;/p&gt;  &lt;div style="font-family:consolas;background:#e0e0e0;color:black;font-size:10pt;"&gt;   &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;PageIndexToCharConverter&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;IValueConverter&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;{&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt; Convert(&lt;span style="color:blue;"&gt;object&lt;/span&gt; value, &lt;span style="color:#2b91af;"&gt;Type&lt;/span&gt; targetType, &lt;span style="color:blue;"&gt;object&lt;/span&gt; parameter, &lt;span style="color:#2b91af;"&gt;CultureInfo&lt;/span&gt; culture)&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;int&lt;/span&gt; pageNumber = System.&lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToInt32(value);&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; Convert(pageNumber - 1);&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt; ConvertBack(&lt;span style="color:blue;"&gt;object&lt;/span&gt; value, &lt;span style="color:#2b91af;"&gt;Type&lt;/span&gt; targetType, &lt;span style="color:blue;"&gt;object&lt;/span&gt; parameter, &lt;span style="color:#2b91af;"&gt;CultureInfo&lt;/span&gt; culture)&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;NotImplementedException&lt;/span&gt;();&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;char&lt;/span&gt; Convert(&lt;span style="color:blue;"&gt;int&lt;/span&gt; pageIndex)&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; (&lt;span style="color:blue;"&gt;char&lt;/span&gt;)(pageIndex + &lt;span style="color:#a31515;"&gt;'a'&lt;/span&gt;);&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;It is a simple value converter class which converts given page index to the appropriate letter in the alphabet. The trick here is that we are going to use the same class to convert the pager buttons’ content to alphabet so we have to be careful when to use the page number or the page index.&lt;/p&gt;  &lt;p&gt;Now lets take a look at the XAML for our sample:&lt;/p&gt;  &lt;div style="font-family:consolas;background:#e0e0e0;color:black;font-size:10pt;"&gt;   &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:red;"&gt; x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;LayoutRoot&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition&lt;/span&gt;&lt;span style="color:red;"&gt; Height&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Auto&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RadGridView&lt;/span&gt;&lt;span style="color:red;"&gt; ItemsSource&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; AutoGenerateColumns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; ShowGroupPanel&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;False&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RadGridView.Columns&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;GridViewDataColumn&lt;/span&gt;&lt;span style="color:red;"&gt; Header&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ID&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; DataMemberBinding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Property2&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;GridViewDataColumn&lt;/span&gt;&lt;span style="color:red;"&gt; Header&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Name&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; DataMemberBinding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Property1&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;GridViewDataColumn&lt;/span&gt;&lt;span style="color:red;"&gt; Header&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Company Name&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; DataMemberBinding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Property3&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;GridViewDataColumn&lt;/span&gt;&lt;span style="color:red;"&gt; Header&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Email&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; DataMemberBinding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Property4&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;GridViewDataColumn&lt;/span&gt;&lt;span style="color:red;"&gt; Header&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Phone&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; DataMemberBinding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Property5&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RadGridView.Columns&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RadGridView&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RadDataPager&lt;/span&gt;&lt;span style="color:red;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:red;"&gt;Source&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:red;"&gt;NumericButtonCount&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; PageCount&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:red;"&gt;DisplayMode&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Numeric&amp;quot;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:red;"&gt;NumericButtonStyle&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; PagerToggleButtonStyle&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;RadGridView and RadDataPager are both bound to the paged collection view. Pager’s NumericButtonCount is also bound to the PageCount property of the view. The last piece of the puzzle is the custom style for the pager’s buttons:&lt;/p&gt;  &lt;div style="font-family:consolas;background:#e0e0e0;color:black;font-size:10pt;"&gt;   &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;local&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;PageIndexToCharConverter&lt;/span&gt;&lt;span style="color:red;"&gt; x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;PageIndexToCharConverter&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Style&lt;/span&gt;&lt;span style="color:red;"&gt; x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;PagerToggleButtonStyle&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; TargetType&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ToggleButton&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter&lt;/span&gt;&lt;span style="color:red;"&gt; Property&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ContentTemplate&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter.Value&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:red;"&gt; Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Converter&lt;/span&gt;&lt;span style="color:blue;"&gt;={&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; PageIndexToCharConverter&lt;/span&gt;&lt;span style="color:blue;"&gt;}}&amp;quot;&amp;#160;&amp;#160;&amp;#160; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter.Value&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter&lt;/span&gt;&lt;span style="color:red;"&gt; Property&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;MinWidth&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; Value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;25&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter&lt;/span&gt;&lt;span style="color:red;"&gt; Property&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Margin&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; Value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;1,0&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Style&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;You can see that how the custom value converter is used to format the content of the buttons.&lt;/p&gt;  &lt;p&gt;As always you can play with the application right here in the blog post:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div id="silverlightControlHost"&gt;                &lt;a rel="nofollow" target="_blank" href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;amp;v=3.0.40624.0" style="text-decoration:none;"&gt; 	  &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none;"&gt;   &lt;/a&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:bc50252c-3d49-4258-8886-71e1685b16da" class="wlWriterEditableSmartContent"&gt;&lt;p&gt;You can find the source code &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlogLib/LogicalPaging_588B1998.sflb"&gt;here.&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;(In the WPF version there is another page that illustrates how the paging takes place on the SQL Server. You will need &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/ms227484.aspx"&gt;Northwind&lt;/a&gt; database installed in your local SQLEXPRESS instance)&lt;/p&gt;  &lt;p&gt;Have a great and successful rad paging (or is it just paging? :)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ligaz/~4/7H19z87dGho" height="1" width="1"/&gt;</description>
         <author>Stefan Dobrev</author>
         <guid isPermaLink="false">07210d4a-bf65-4a90-99b5-a29a59b8148b</guid>
         <pubDate>Sun, 11 Apr 2010 15:40:20 +0000</pubDate>
      <feedburner:origLink>http://blogs.telerik.com/StefanDobrev/Posts/10-04-11/implementing-logical-paging-with-raddatapager-for-wpf-and-silverlight.aspx</feedburner:origLink></item>
      <item>
         <title>MicroModels for Silverlight</title>
         <link>http://feedproxy.google.com/~r/ligaz/~3/mgx7YGANAk4/micromodels-for-silverlight.aspx</link>
         <description>&lt;p&gt;Last week I was impressed by &lt;a rel="nofollow" target="_blank" href="http://www.paulstovell.com"&gt;Paul Stovell&lt;/a&gt;’s marvelous project – &lt;a rel="nofollow" target="_blank" href="http://www.paulstovell.com/micromodels-introduction"&gt;MicroModels&lt;/a&gt;. In a nutshell a micro model is a view model over your objects, which allow you to define dynamic properties, collection and commands. You can read more about it in Paul’s introductory blog post &lt;a rel="nofollow" target="_blank" href="http://www.paulstovell.com/micromodels-introduction"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Despite its great features, “MicroModels” has one big limitation - it does not run in Silverlight. And this is where my journey began. My mission was to port the code to Silverlight with little to no modifications.&lt;/p&gt; &lt;h3&gt;Porting the code to Silverlight&lt;/h3&gt; &lt;p&gt;The task was not an easy one, but after a lot of head scratching and hair pulling I was able to complete it. It involved replacing the TypeDescriptor’s logic with dynamic type generation, &lt;a rel="nofollow" target="_blank" href="http://blogs.msdn.com/mattwar/archive/2007/08/01/linq-building-an-iqueryable-provider-part-iii.aspx"&gt;partially evaluating local closures&lt;/a&gt; in compiler generated expression trees and other tricks typically developers don’t do in a normal working day. Despite all these hurdles, the good news is that the code is working fine in Silverlight and everything is supported.&lt;/p&gt; &lt;h3&gt;Using MicroModels in Silverlight&lt;/h3&gt; &lt;p&gt;The way the framework is used in Silverlight is almost the same as it is in WPF. You define your MicroModel with exactly the same way using your already familiar methods:&lt;/p&gt; &lt;div style="background:#e0e0e0 none repeat scroll 0% 0%;font-family:consolas;color:black;font-size:10pt;"&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;EditCustomerModel&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;MicroModel&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;{&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; EditCustomerModel(&lt;span style="color:#2b91af;"&gt;Customer&lt;/span&gt; customer, &lt;span style="color:#2b91af;"&gt;CustomerRepository&lt;/span&gt; customerRepository)&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Property(() =&amp;gt; customer.FirstName);&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Property(() =&amp;gt; customer.LastName).Named(&lt;span style="color:#a31515;"&gt;"Surname"&lt;/span&gt;);&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Property(&lt;span style="color:#a31515;"&gt;"FullName"&lt;/span&gt;, () =&amp;gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;"{0} {1}"&lt;/span&gt;, customer.FirstName, customer.LastName));&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Command(&lt;span style="color:#a31515;"&gt;"Save"&lt;/span&gt;, () =&amp;gt; customerRepository.Save(customer));&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;}&lt;/p&gt; &lt;/div&gt; &lt;p&gt;The only thing that you have to change is in the XAML. &lt;strong&gt;You will have to data bind your root DataContext to a new property of the MicroModel, instead of the model itself. The property is called Object.&lt;/strong&gt; Here is the respective XAML for the EditCustomerModel:&lt;/p&gt; &lt;div style="background:#e0e0e0 none repeat scroll 0% 0%;font-family:consolas;color:black;font-size:10pt;"&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:red;"&gt; &lt;strong&gt;DataContext&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Object&lt;/span&gt;&lt;span style="color:blue;"&gt;}"&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition&lt;/span&gt;&lt;span style="color:red;"&gt; Height&lt;/span&gt;&lt;span style="color:blue;"&gt;="Auto" /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Button&lt;/span&gt;&lt;span style="color:red;"&gt; Content&lt;/span&gt;&lt;span style="color:blue;"&gt;="Save"&lt;/span&gt;&lt;span style="color:red;"&gt; prism&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Click.Command&lt;/span&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Path&lt;/span&gt;&lt;span style="color:blue;"&gt;=Save}"/&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Border&lt;/span&gt;&lt;span style="color:red;"&gt; Background&lt;/span&gt;&lt;span style="color:blue;"&gt;="#f0f0f0"&lt;/span&gt;&lt;span style="color:red;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color:blue;"&gt;="1"&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:red;"&gt; Orientation&lt;/span&gt;&lt;span style="color:blue;"&gt;="Horizontal"&lt;/span&gt;&lt;span style="color:red;"&gt; Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;="1"&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:red;"&gt; Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;="1"&lt;/span&gt;&lt;span style="color:red;"&gt; Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="130"&amp;gt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;FirstName&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBox&lt;/span&gt;&lt;span style="color:red;"&gt; Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;="1"&lt;/span&gt;&lt;span style="color:red;"&gt; Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="50"&lt;/span&gt;&lt;span style="color:red;"&gt; Text&lt;/span&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Path&lt;/span&gt;&lt;span style="color:blue;"&gt;=FirstName,&lt;/span&gt;&lt;span style="color:red;"&gt; Mode&lt;/span&gt;&lt;span style="color:blue;"&gt;=TwoWay}" /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:red;"&gt; Orientation&lt;/span&gt;&lt;span style="color:blue;"&gt;="Horizontal"&lt;/span&gt;&lt;span style="color:red;"&gt; Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;="1"&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:red;"&gt; Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;="1"&lt;/span&gt;&lt;span style="color:red;"&gt; Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="130"&amp;gt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Surname&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBox&lt;/span&gt;&lt;span style="color:red;"&gt; Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;="1"&lt;/span&gt;&lt;span style="color:red;"&gt; Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="200"&lt;/span&gt;&lt;span style="color:red;"&gt; Text&lt;/span&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Path&lt;/span&gt;&lt;span style="color:blue;"&gt;=Surname,&lt;/span&gt;&lt;span style="color:red;"&gt; Mode&lt;/span&gt;&lt;span style="color:blue;"&gt;=TwoWay}" /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:red;"&gt; Orientation&lt;/span&gt;&lt;span style="color:blue;"&gt;="Horizontal"&lt;/span&gt;&lt;span style="color:red;"&gt; Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;="1"&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:red;"&gt; Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;="1"&lt;/span&gt;&lt;span style="color:red;"&gt; Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="130"&amp;gt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Full Name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:red;"&gt; Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;="1"&lt;/span&gt;&lt;span style="color:red;"&gt; Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="200"&lt;/span&gt;&lt;span style="color:red;"&gt; Height&lt;/span&gt;&lt;span style="color:blue;"&gt;="50"&lt;/span&gt;&lt;span style="color:red;"&gt; Text&lt;/span&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Path&lt;/span&gt;&lt;span style="color:blue;"&gt;=FullName}" /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Border&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;p&gt;The same rule with binding to the Object applies to the Collection properties. Here is another XAML snippet, which illustrates the use of an ItemsControl bound to a collection property of the micro model:&lt;/p&gt; &lt;div style="background:#e0e0e0 none repeat scroll 0% 0%;font-family:consolas;color:black;font-size:10pt;"&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ItemsControl&lt;/span&gt;&lt;span style="color:red;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color:blue;"&gt;="1"&lt;/span&gt;&lt;span style="color:red;"&gt; ItemsSource&lt;/span&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Path&lt;/span&gt;&lt;span style="color:blue;"&gt;=LineItems}"&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ItemsControl.ItemTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:red;"&gt; &lt;strong&gt;DataContext&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Object&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;}"&lt;/strong&gt; &amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color:red;"&gt; Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="300" /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color:red;"&gt; Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="80" /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color:red;"&gt; Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="80" /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color:red;"&gt; Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="80" /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBox&lt;/span&gt;&lt;span style="color:red;"&gt; Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;="1"&lt;/span&gt;&lt;span style="color:red;"&gt; Grid.Column&lt;/span&gt;&lt;span style="color:blue;"&gt;="0"&lt;/span&gt;&lt;span style="color:red;"&gt; Text&lt;/span&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Path&lt;/span&gt;&lt;span style="color:blue;"&gt;=ProductName,&lt;/span&gt;&lt;span style="color:red;"&gt; Mode&lt;/span&gt;&lt;span style="color:blue;"&gt;=TwoWay}" /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:red;"&gt; Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;="3"&lt;/span&gt;&lt;span style="color:red;"&gt; Grid.Column&lt;/span&gt;&lt;span style="color:blue;"&gt;="1"&lt;/span&gt;&lt;span style="color:red;"&gt; Text&lt;/span&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Path&lt;/span&gt;&lt;span style="color:blue;"&gt;=UnitPrice}" /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBox&lt;/span&gt;&lt;span style="color:red;"&gt; Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;="1"&lt;/span&gt;&lt;span style="color:red;"&gt; Grid.Column&lt;/span&gt;&lt;span style="color:blue;"&gt;="2"&lt;/span&gt;&lt;span style="color:red;"&gt; Text&lt;/span&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Path&lt;/span&gt;&lt;span style="color:blue;"&gt;=Quantity,&lt;/span&gt;&lt;span style="color:red;"&gt; Mode&lt;/span&gt;&lt;span style="color:blue;"&gt;=TwoWay}" /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:red;"&gt; Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;="3"&lt;/span&gt;&lt;span style="color:red;"&gt; Grid.Column&lt;/span&gt;&lt;span style="color:blue;"&gt;="3"&lt;/span&gt;&lt;span style="color:red;"&gt; Text&lt;/span&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Path&lt;/span&gt;&lt;span style="color:blue;"&gt;=LineTotal}" /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ItemsControl.ItemTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;padding:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ItemsControl&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;h3&gt;Samples&lt;/h3&gt; &lt;p&gt;I have ported the sample project in the Paul’s source code so you can play with them as well. I have tried to reuse as much code as possible and almost everything except the XAML files is shared between WPF and Silverlight. Actually you can play with the example right here:&lt;/p&gt; &lt;div id="silverlightControlHost"&gt;     &lt;a rel="nofollow" target="_blank" href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;amp;v=3.0.40624.0" style="text-decoration:none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none;"&gt; &lt;/a&gt; &lt;/div&gt; &lt;h3&gt;Downloads&lt;/h3&gt; &lt;div class="wlWriterEditableSmartContent" id="scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:db667acf-e73e-4ead-91f8-d20b4acc2581" style="margin:0px;padding:0px;display:inline;float:none;"&gt; &lt;p&gt;You can download the binaries &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlogLib/Binaries_2ADA9639.sflb"&gt;here.&lt;/a&gt;&lt;/p&gt; &lt;/div&gt;
You can download the source code from &lt;a rel="nofollow" target="_blank" href="http://github.com/ligaz/MicroModels/zipball/master"&gt;here&lt;/a&gt;.   &lt;br /&gt;
You can browse the source code in my github repository &lt;a rel="nofollow" target="_blank" href="http://github.com/ligaz/MicroModels"&gt;here&lt;/a&gt;.   &lt;br /&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Have fun micro-modeling in Silverlight.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ligaz/~4/mgx7YGANAk4" height="1" width="1"/&gt;</description>
         <author>Stefan Dobrev</author>
         <guid isPermaLink="false">57689791-6718-4809-81e8-048352c636aa</guid>
         <pubDate>Thu, 21 Jan 2010 02:40:41 +0000</pubDate>
      <feedburner:origLink>http://blogs.telerik.com/StefanDobrev/Posts/10-01-20/micromodels-for-silverlight.aspx</feedburner:origLink></item>
      <item>
         <title>Highlighting Inline Search for RadGridView for Silverlight</title>
         <link>http://feedproxy.google.com/~r/ligaz/~3/fYkRZ6_z4Fk/highlighting-inline-search-for-radgridview-for-silverlight.aspx</link>
         <description>&lt;p&gt;A common request on our forums is how to enable the &lt;a rel="nofollow" target="_blank" href="http://demos.telerik.com/silverlight/?GridView/Search"&gt;Search As You Type online example&lt;/a&gt; to search in DateTime or Integer properties. Also recently another request was brought to our attention: How to highlight the matching search text in the grid cells. In this blog post I’m going to show you how to achieve these goals.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Let’s start our journey, by looking at the MainPage.xaml of the attached sample application:&lt;/p&gt;  &lt;div style="font-family:consolas;background:#e6e6e6;color:black;font-size:10pt;"&gt;   &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160;&amp;#160; 1&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color:red;"&gt; x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;DateTimeFiltering.MainPage&amp;quot;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160;&amp;#160; 2&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160;&amp;#160; 3&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160;&amp;#160; 4&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.GridView&amp;quot;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160;&amp;#160; 5&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;themes&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls&amp;quot;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160;&amp;#160; 6&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;i&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity&amp;quot;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160;&amp;#160; 7&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;local&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;clr-namespace:DateTimeFiltering&amp;quot;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160;&amp;#160; 8&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;jeff&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;clr-namespace:JeffWilcox.Samples;assembly=HighlightingTextBlock&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160;&amp;#160; 9&lt;/span&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 10&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 11&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;local&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SearchViewModel&lt;/span&gt;&lt;span style="color:red;"&gt; x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ViewModel&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 12&lt;/span&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 13&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SolidColorBrush&lt;/span&gt;&lt;span style="color:red;"&gt; Color&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Red&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;HighlightBrush&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 14&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Style&lt;/span&gt;&lt;span style="color:red;"&gt; TargetType&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;jeff:HighlightingTextBlock&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;HighlightTextBlockStyle&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 15&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter&lt;/span&gt;&lt;span style="color:red;"&gt; Property&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;HighlightBrush&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; Value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; HighlightBrush&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 16&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter&lt;/span&gt;&lt;span style="color:red;"&gt; Property&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;HighlightFontWeight&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; Value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Bold&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 17&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Style&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 18&lt;/span&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 19&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:red;"&gt; x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;HighlightCellTemplate&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 20&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;jeff&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;HighlightingTextBlock&lt;/span&gt; &lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 21&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:red;"&gt;Style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; HighlightTextBlockStyle&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;&lt;/span&gt; &lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 22&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:red;"&gt;HighlightText&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; SearchText&lt;/span&gt;&lt;span style="color:blue;"&gt;,&lt;/span&gt;&lt;span style="color:red;"&gt; Source&lt;/span&gt;&lt;span style="color:blue;"&gt;={&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; ViewModel&lt;/span&gt;&lt;span style="color:blue;"&gt;}}&amp;quot; &amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 23&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;i&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Interaction.Behaviors&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 24&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;local&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CellValueBindingBehavior&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 25&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;i&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Interaction.Behaviors&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 26&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;jeff&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;HighlightingTextBlock&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 27&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 28&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 29&lt;/span&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 30&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:red;"&gt; DataContext&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Source&lt;/span&gt;&lt;span style="color:blue;"&gt;={&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; ViewModel&lt;/span&gt;&lt;span style="color:blue;"&gt;}}&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 31&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 32&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition&lt;/span&gt;&lt;span style="color:red;"&gt; Height&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Auto&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 33&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 34&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 35&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 36&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color:red;"&gt; Width&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Auto&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 37&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 38&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 39&lt;/span&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 40&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:red;"&gt; Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Find:&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;5,5,7,5&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Center&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 41&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBox&lt;/span&gt;&lt;span style="color:red;"&gt; Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; SearchText&lt;/span&gt;&lt;span style="color:blue;"&gt;,&lt;/span&gt;&lt;span style="color:red;"&gt; Mode&lt;/span&gt;&lt;span style="color:blue;"&gt;=TwoWay,&lt;/span&gt;&lt;span style="color:red;"&gt; UpdateSourceTrigger&lt;/span&gt;&lt;span style="color:blue;"&gt;=Explicit}&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; Grid.Column&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;3&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 42&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;i&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Interaction.Behaviors&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 43&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;local&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;PropertyChangedUpdateTriggerBehavior&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 44&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;i&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Interaction.Behaviors&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 45&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBox&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 46&lt;/span&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 47&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RadGridView&lt;/span&gt;&lt;span style="color:red;"&gt; Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;playersGrid&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; AutoGenerateColumns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; ItemsSource&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Items&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 48&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:red;"&gt;Grid.Row&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; Grid.ColumnSpan&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;2&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 49&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RadGridView.Columns&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 50&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;GridViewDataColumn&lt;/span&gt;&lt;span style="color:red;"&gt; DataMemberBinding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Name&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; CellTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; HighlightCellTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 51&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;GridViewDataColumn&lt;/span&gt;&lt;span style="color:red;"&gt; DataMemberBinding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Established&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; CellTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; HighlightCellTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 52&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;GridViewDataColumn&lt;/span&gt;&lt;span style="color:red;"&gt; DataMemberBinding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; StadiumCapacity&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt; CellTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; HighlightCellTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 53&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RadGridView.Columns&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 54&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;telerik&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RadGridView&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 55&lt;/span&gt;&amp;#160;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 56&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;The interesting pieces of code are as follows: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Line 11 - SearchViewModel &lt;/li&gt;    &lt;li&gt;Line 20 – HighlightingTextBlock &lt;/li&gt;    &lt;li&gt;Line 24 – CellValueBindingBehavior &lt;/li&gt;    &lt;li&gt;Line 43 – PropertyChangedUpdateTriggerBehavior &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Let’s look at each one of these.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SearchViewModel&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This class servers as a view model for the MainPage. Its main purpose is to abstract away the logic for the inline filtering. For this purpose it exposes two properties: SearchText and Items. SearchText is the property that is bound to the TextBox used for searching. The second property Items is the actual collection that the RadGridView is bound to. The trick here is that this property returns a &lt;a rel="nofollow" target="_blank" href="http://www.telerik.com/help/silverlight/telerik.windows.data-telerik.windows.data.queryablecollectionview.html"&gt;QueryableCollectionView&lt;/a&gt; over the original collection. This allow us to control the filtering in the view model using the &lt;a rel="nofollow" target="_blank" href="http://www.telerik.com/help/silverlight/telerik.windows.data-telerik.windows.data.queryablecollectionview-filterdescriptors.html"&gt;FilterDescriptors&lt;/a&gt; property of the collection view. And this is where the magic happens. In the heart of the SearchViewModel lies the PredicateFilterDescriptor – a custom &lt;a rel="nofollow" target="_blank" href="http://www.telerik.com/help/silverlight/telerik.windows.data-telerik.windows.data.ifilterdescriptor.html"&gt;IFilterDescriptor&lt;/a&gt; which implements the heavy lifting for the search. Here is the relevant code:&lt;/p&gt;  &lt;div style="font-family:consolas;background:#e6e6e6;color:black;font-size:10pt;"&gt;   &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 51&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; UpdateSearchPredicate()&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 52&lt;/span&gt; {&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 53&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; text = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.SearchText;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 54&lt;/span&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 55&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Expression&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Club&lt;/span&gt;, &lt;span style="color:blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt; predicate =&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 56&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; c =&amp;gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(text)&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 57&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ? &lt;span style="color:blue;"&gt;true&lt;/span&gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 58&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : c.Name.ToString().ToLower().Contains(text) ||&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 59&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; c.Established.ToLongDateString().ToLower().Contains(text) ||&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 60&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; c.StadiumCapacity.ToString().ToLower().Contains(text);&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 61&lt;/span&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 62&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;this&lt;/span&gt;.filter.Predicate = predicate;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;#160;&amp;#160; 63&lt;/span&gt; }&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;You can see how we are creating an expression which will call ToString() on each property of the Club object and then verify if this string contains our SearchText. If this expression returns true the item will be visible in the RadGridView, otherwise it will be filtered out. Explaining you how PredicateFilterDescriptor is implemented is a subject of a blog post on its own, so I’m not going to go deep in the rabbit hole.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;HighlightingTextBlock&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;For the purpose of the sample we need a way to define a &lt;a rel="nofollow" target="_blank" href="http://www.telerik.com/help/silverlight/gridview-columns-bound-unbound-columns.html"&gt;custom cell template&lt;/a&gt;. It should somehow have a text block which will highlight the searched text. But how to achieve this? Fortunately &lt;a rel="nofollow" target="_blank" href="http://www.jeff.wilcox.name/"&gt;Jeff Wilcox&lt;/a&gt; comes to rescue with his &lt;a rel="nofollow" target="_blank" href="http://www.jeff.wilcox.name/2009/08/sl3-highlighting-text-block/"&gt;HighlightingTextBlock&lt;/a&gt;. This custom control allow you to display a text and highlight portions of it using the HightlightText property. Thanks Jeff, this is exactly what we need. On line 22 you can see how the HightlightText is bound to the SearchText property of the SearchViewModel.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;CellValueBindingBehavior&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is a custom attached behavior. Its purpose is to bind the text property of the HighlightingTextBlock to the value of its parent cell. We need this because RadGridView is smart and when you have a custom cell template the DataContext of the cell is the data item itself, not the value of its property. Here is the interesting code:&lt;/p&gt;  &lt;div style="font-family:consolas;background:#e6e6e6;color:black;font-size:10pt;"&gt;   &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CellValueBindingBehavior&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;LoadBehavior&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;FrameworkElement&lt;/span&gt;&amp;gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;{&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;protected&lt;/span&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; OnAssociatedObjectLoaded()&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;base&lt;/span&gt;.OnAssociatedObjectLoaded();&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; cell = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.AssociatedObject.ParentOfType&amp;lt;&lt;span style="color:#2b91af;"&gt;GridViewCell&lt;/span&gt;&amp;gt;();&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (cell != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;this&lt;/span&gt;.AssociatedObject.SetBinding(&lt;span style="color:#2b91af;"&gt;HighlightingTextBlock&lt;/span&gt;.TextProperty, &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Binding&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt;) { Source = cell, Mode = &lt;span style="color:#2b91af;"&gt;BindingMode&lt;/span&gt;.TwoWay });&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;protected&lt;/span&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; OnDetaching()&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;this&lt;/span&gt;.AssociatedObject.ClearValue(&lt;span style="color:#2b91af;"&gt;HighlightingTextBlock&lt;/span&gt;.TextProperty);&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;base&lt;/span&gt;.OnDetaching();&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;Note: This behavior is not needed in WPF because you can use RelativeSource=FindAncestor. Currently Silverlight did not have this comfortable feature.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;PropertyChangedUpdateTriggerBehavior&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Again we need this because of the limitation in the SIlverlight platform. This behavior enables the TextBox to update the item bound to its Text property on every key stroke. This mimics the WPF’s UpdateSourceTrigger=PropertyChanged setting of the binding. You can see how we have achieved this in Silverlight:&lt;/p&gt;  &lt;div style="font-family:consolas;background:#e6e6e6;color:black;font-size:10pt;"&gt;   &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;PropertyChangedUpdateTriggerBehavior&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;Behavior&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;TextBox&lt;/span&gt;&amp;gt;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;{&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;protected&lt;/span&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; OnAttached()&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;this&lt;/span&gt;.AssociatedObject.TextChanged += OnTextBoxTextChanged;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;void&lt;/span&gt; OnTextBoxTextChanged(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;TextChangedEventArgs&lt;/span&gt; e)&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; bindingExpression = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.AssociatedObject.ReadLocalValue(&lt;span style="color:#2b91af;"&gt;TextBox&lt;/span&gt;.TextProperty) &lt;span style="color:blue;"&gt;as&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;BindingExpression&lt;/span&gt;;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (bindingExpression != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; bindingExpression.UpdateSource();&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;protected&lt;/span&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; OnDetaching()&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;this&lt;/span&gt;.AssociatedObject.TextChanged -= OnTextBoxTextChanged;&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This was the last interesting piece of code for today. Hope you will find it useful.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;You can play with the example bellow:&lt;/p&gt;  &lt;div id="silverlightControlHost"&gt;                &lt;a rel="nofollow" target="_blank" href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;amp;v=3.0.40624.0" style="text-decoration:none;"&gt; 	  &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none;"&gt;   &lt;/a&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:38c2d99a-eb3f-400c-b568-93d44c74949d" class="wlWriterEditableSmartContent"&gt;&lt;p&gt;You can download the source &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlogLib/InlineHighlightingSearch_3628FD26.sflb"&gt;here.&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Have fun.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ligaz/~4/fYkRZ6_z4Fk" height="1" width="1"/&gt;</description>
         <author>Stefan Dobrev</author>
         <guid isPermaLink="false">09195a7e-6066-46a5-a9f9-053f0942033f</guid>
         <pubDate>Mon, 18 Jan 2010 14:56:03 +0000</pubDate>
      <feedburner:origLink>http://blogs.telerik.com/StefanDobrev/Posts/10-01-18/highlighting-inline-search-for-radgridview-for-silverlight.aspx</feedburner:origLink></item>
      <item>
         <title>Sorting, Filtering, Grouping and Aggregating on all CPU cores using RadGridView for WPF and PLINQ</title>
         <link>http://feedproxy.google.com/~r/ligaz/~3/5tZgjkHjXlo/sorting-filtering-grouping-and-aggregating-on-all-cpu-cores-using-radgridview-for-wpf-and-plinq.aspx</link>
         <description>&lt;p&gt;As some of you may already know the Q2 release of &lt;a rel="nofollow" target="_blank" href="http://www.telerik.com/products/wpf/gridview.aspx"&gt;RadGridView for WPF&lt;/a&gt; ships with a brand new “data engine” entirely based on LINQ. This means that all data operations including sorting, filtering, grouping, aggregating and paging will be pushed down to the &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.linq.iqueryprovider.aspx"&gt;IQueryProvider&lt;/a&gt; when RadGridView is bound to an &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx"&gt;IQueryable&lt;/a&gt;. For example if you are using LinqToSql, LinqToEntities or &lt;a rel="nofollow" target="_blank" href="http://www.telerik.com/products/orm.aspx"&gt;OpenAccess ORM&lt;/a&gt; all gird operations are executed on the SQL server using the magic of LINQ providers.&lt;/p&gt; &lt;p&gt;Staying on the cutting edge I decide to try out &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/dd460688(VS.100).aspx"&gt;PLINQ&lt;/a&gt; (Parallel LINQ) and enable RadGridView to execute its data operations on all available CPU cores. PLINQ enables LINQ queries to be execute simultaneously on all cores using the new task parallel library that will be available in .NET 4. PLINQ is straight forward to use when you are constructing your queries in code, but this is not the case when you want to enable IQueryable over IParallelEnumerable. Unfortunately PLINQ did not provide built-in query provider, so I ended up implementing ParallelQuery class similar to &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.linq.enumerablequery(VS.100).aspx"&gt;EnumerableQuery&lt;/a&gt; for LINQ to Objects. This class internally rewrites the generated Expression Tree and proxies all calls to the &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.linq.parallelenumerable(VS.100).aspx"&gt;ParallelEnumerable&lt;/a&gt; extension methods.&lt;/p&gt; &lt;p&gt;On the following screenshots you can see the CPU utilization before and after the PLINQ is used.&lt;/p&gt; &lt;p&gt;Before: &lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-SortingFilteringGroupingandAggregatingon_12113-LINQ_2.sflb"&gt;&lt;img height="480" width="320" src="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-SortingFilteringGroupingandAggregatingon_12113-LINQ_thumb.sflb" alt="LINQ" title="LINQ" style="border-style:solid;border-width:0px;display:inline;margin-left:0px;margin-right:0px;"/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;After:&lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-SortingFilteringGroupingandAggregatingon_12113-PLINQ_2.sflb"&gt;&lt;img height="478" width="318" src="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-SortingFilteringGroupingandAggregatingon_12113-PLINQ_thumb.sflb" alt="PLINQ" title="PLINQ" style="border-style:solid;border-width:0px;display:inline;margin-left:0px;margin-right:0px;"/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;As you can see when PLINQ is taking place both cores are fully utilized. You can imagine what will happen when you have 4 or 8 cores. And all of this for free with a simple one line change you have to do before binding the RadGridView.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;[Update: If you are wondering why the CPU is utilized at its maximum and the occupied RAM is almost 3GB you should know that these screenshots are taken when the RadGridView is bound to collection with 15,000,000 items. Yes you heard me right this is 15 million.]&lt;/strong&gt;&lt;/p&gt; &lt;div class="wlWriterEditableSmartContent" id="scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:f7cf68c0-4367-428c-a3fb-c949e8012a76" style="margin:0px;padding:0px;display:inline;float:none;"&gt; &lt;p&gt;You can download the sample source &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-SortingFilteringGroupingandAggregatingon_12113-ParallelGridView.sflb"&gt;here&lt;/a&gt;&lt;/p&gt; &lt;/div&gt; &lt;p&gt;P.S. Did I mention that this “data engine” will going to used in our &lt;a rel="nofollow" target="_blank" href="http://weblogs.asp.net/rashid/archive/2009/09/16/telerik-asp-net-mvc-grid-preview-take-1.aspx"&gt;ASP.NET MVC Grid&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ligaz/~4/5tZgjkHjXlo" height="1" width="1"/&gt;</description>
         <author>Stefan Dobrev</author>
         <guid isPermaLink="false">d36d9fbb-6731-4a79-9a5a-05b1f7fef8c5</guid>
         <pubDate>Wed, 23 Sep 2009 18:09:22 +0000</pubDate>
      <feedburner:origLink>http://blogs.telerik.com/StefanDobrev/Posts/09-09-23/sorting-filtering-grouping-and-aggregating-on-all-cpu-cores-using-radgridview-for-wpf-and-plinq.aspx</feedburner:origLink></item>
      <item>
         <title>Transpose or just rows as columns</title>
         <link>http://feedproxy.google.com/~r/ligaz/~3/U42s9deUTT8/transpose-or-just-rows-as-columns.aspx</link>
         <description>&lt;p&gt;A common scenario when displaying tabular data is to flip the axis so your rows becomes columns and vice versa. This can be easily achieved when you know the shape of your data. For example imagine we have a &lt;strong&gt;Customer&lt;/strong&gt; class with 3 properties:&amp;#160; &lt;strong&gt;Name&lt;/strong&gt;, &lt;strong&gt;Age&lt;/strong&gt; and &lt;strong&gt;JobCode&lt;/strong&gt;. Let’s say that we have 5 customers in our data repository. If we want to select just the names we can do something like this:&lt;/p&gt;  &lt;div style="font-family:consolas;background:#e6e6e6;color:black;font-size:10pt;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Customer&lt;/span&gt;&amp;gt; customers = &lt;span style="color:#2b91af;"&gt;Customer&lt;/span&gt;.GetAll();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; names =&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Customer1 = customers[0].Name,&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Customer2 = customers[1].Name,&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Customer3 = customers[2].Name,&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Customer4 = customers[3].Name,&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Customer5 = customers[4].Name&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;Imagine that another Customer is added and suddenly this code have to changed. Obviously this won’t scale even in a short period of time. So what is the solution?&lt;/p&gt;  &lt;h3&gt;Introducing Transpose&amp;lt;T&amp;gt; extension method&lt;/h3&gt;  &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Transpose"&gt;Transpose&lt;/a&gt; is an operation used in linear algebra to transpose (of course) a matrix. In our case Transpose is an extension method with the following signature:&lt;/p&gt;  &lt;div style="font-family:consolas;background:#e6e6e6;color:black;font-size:10pt;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt; Transpose&amp;lt;T&amp;gt;(&lt;span style="color:blue;"&gt;this&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;T&amp;gt; source)&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;But what did Transpose do under the covers? Here are the recipe ingredients:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;1 tablespoon of &lt;a rel="nofollow" target="_blank" href="http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx"&gt;DynamicClass&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;2 tablespoons of Reflection. &lt;/li&gt;    &lt;li&gt;1 cup of Expression Trees. &lt;/li&gt;    &lt;li&gt;1 slice of LINQ. &lt;/li&gt;    &lt;li&gt;2 slices of functional programming. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here is the code itself:&lt;/p&gt;  &lt;div style="font-family:consolas;background:#e6e6e6;color:black;font-size:10pt;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;EnumerableExtension&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;{&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;readonly&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MethodInfo&lt;/span&gt; GetValueMethod =&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (&lt;span style="color:blue;"&gt;from&lt;/span&gt; m &lt;span style="color:blue;"&gt;in&lt;/span&gt; &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;PropertyInfo&lt;/span&gt;).GetMethods()&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;where&lt;/span&gt; m.Name == &lt;span style="color:#a31515;"&gt;&amp;quot;GetValue&amp;quot;&lt;/span&gt; &amp;amp;&amp;amp; !m.IsAbstract&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;select&lt;/span&gt; m).First();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;readonly&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ConstantExpression&lt;/span&gt; NullObjectArrayExpression =&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Expression&lt;/span&gt;.Constant(&lt;span style="color:blue;"&gt;null&lt;/span&gt;, &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:blue;"&gt;object&lt;/span&gt;[]));&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt; Transpose&amp;lt;T&amp;gt;(&lt;span style="color:blue;"&gt;this&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;T&amp;gt; source)&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (source == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;source&amp;quot;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; TransposeCore(source);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Delegate&lt;/span&gt; CreateSelectorFunc&amp;lt;T&amp;gt;(&lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;T&amp;gt; source)&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; T[] list = source.ToArray();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;DynamicProperty&lt;/span&gt;[] dynamicProperties =&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; list.Select(i =&amp;gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DynamicProperty&lt;/span&gt;(i.ToString(), &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:blue;"&gt;object&lt;/span&gt;))).ToArray();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Type&lt;/span&gt; transposedType = &lt;span style="color:#2b91af;"&gt;ClassFactory&lt;/span&gt;.Instance.GetDynamicClass(dynamicProperties);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;ParameterExpression&lt;/span&gt; propParam = &lt;span style="color:#2b91af;"&gt;Expression&lt;/span&gt;.Parameter(&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;PropertyInfo&lt;/span&gt;), &lt;span style="color:#a31515;"&gt;&amp;quot;prop&amp;quot;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; bindings = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MemberBinding&lt;/span&gt;[list.Length];&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;for&lt;/span&gt; (&lt;span style="color:blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; list.Length; i++)&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;MethodCallExpression&lt;/span&gt; getter =&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Expression&lt;/span&gt;.Call(&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; propParam,&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GetValueMethod,&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Expression&lt;/span&gt;.Constant(list[i]),&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NullObjectArrayExpression&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; );&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; bindings[i] = &lt;span style="color:#2b91af;"&gt;Expression&lt;/span&gt;.Bind(transposedType.GetProperty(dynamicProperties[i].Name), getter);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;LambdaExpression&lt;/span&gt; selector =&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Expression&lt;/span&gt;.Lambda(&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Expression&lt;/span&gt;.MemberInit(&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Expression&lt;/span&gt;.New(transposedType),&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; bindings),&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; propParam);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; selector.Compile();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt; TransposeCore&amp;lt;T&amp;gt;(&lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;T&amp;gt; source)&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;PropertyInfo&lt;/span&gt;&amp;gt; properties = &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(T).GetProperties().ToList();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Delegate&lt;/span&gt; selector = CreateSelectorFunc(source);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;PropertyInfo&lt;/span&gt; property &lt;span style="color:blue;"&gt;in&lt;/span&gt; properties)&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;yield&lt;/span&gt; &lt;span style="color:blue;"&gt;return&lt;/span&gt; selector.DynamicInvoke(property);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;Note that &lt;a rel="nofollow" target="_blank" href="http://blogs.msdn.com/ericlippert/archive/2008/09/08/high-maintenance.aspx"&gt;some&lt;/a&gt; iterator best guidelines are also in place. And the final result is:&lt;/p&gt;  &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-Transposeorjustrowsascolumns_C513-TransposedGridView_2.sflb"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="TransposedGridView" border="0" alt="TransposedGridView" src="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-Transposeorjustrowsascolumns_C513-TransposedGridView_thumb.sflb" width="596" height="387"/&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:5699af67-0801-4b87-9f3d-e65f210f86f4" class="wlWriterEditableSmartContent"&gt;&lt;p&gt;You can download the code from &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-Transposeorjustrowsascolumns_C513-Transpose-RowsAsColumns.sflb"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;/div&gt; .   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Have fun.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ligaz/~4/U42s9deUTT8" height="1" width="1"/&gt;</description>
         <author>Stefan Dobrev</author>
         <guid isPermaLink="false">5eafdaab-f7a0-4519-a542-a185a98c5875</guid>
         <pubDate>Mon, 16 Feb 2009 14:17:54 +0000</pubDate>
      <feedburner:origLink>http://blogs.telerik.com/StefanDobrev/Posts/09-02-16/transpose-or-just-rows-as-columns.aspx</feedburner:origLink></item>
      <item>
         <title>IntelliSense for Expression Blend</title>
         <link>http://feedproxy.google.com/~r/ligaz/~3/Huy7MB8CX5c/intellisense-for-expression-blend.aspx</link>
         <description>&lt;p&gt;&lt;font color="#ff0000"&gt;[Update]: You can find the addin for Expression Blend 2.0 SP1 &lt;/font&gt;&lt;a rel="nofollow" target="_blank" href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=BlendSense&amp;amp;ReleaseId=2129"&gt;&lt;font color="#ff0000"&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt;.&lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;The problem&lt;/h3&gt;  &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.microsoft.com/expression/products/Overview.aspx?key=blend"&gt;Expression Blend&lt;/a&gt; has been out in the wild for quite some time. However one of the most annoying thing was the lack of &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Autocompletion"&gt;autocompletion&lt;/a&gt; (aka &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/IntelliSense"&gt;IntelliSense&lt;/a&gt;). Most of devs/designers out there were constantly switching from Blend to VS and backwards to do their stuff. The great free tool &lt;a rel="nofollow" target="_blank" href="http://kaxaml.com/"&gt;Kaxaml&lt;/a&gt; is at great help as well.&lt;/p&gt;  &lt;h3&gt;The solution&lt;/h3&gt;  &lt;p&gt;Using the &lt;strong&gt;Blend 2.5&lt;/strong&gt; add-ins architecture I have created an add-in that adds IntelliSense in Blend. I have reused the code from &lt;a rel="nofollow" target="_blank" href="http://codeplex.com/Kaxaml"&gt;Kaxaml&lt;/a&gt; and adapted it work within Blend. Take a look:&lt;/p&gt;  &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-IntelliSenseforExpressionBlend_8BD4-BlendSense_2.sflb"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" alt="BlendSense" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-IntelliSenseforExpressionBlend_8BD4-BlendSense_thumb.sflb" width="555" height="388"/&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Download&lt;/h3&gt;  &lt;p&gt;You can download the add-in from &lt;a rel="nofollow" target="_blank" href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=BlendSense&amp;amp;ReleaseId=1358"&gt;here&lt;/a&gt;. What you need to do is:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Extract the contents of installation archive in your Blend 2.5 installation folder (typically &lt;strong&gt;%ProgramFiles%&amp;#92;Microsoft Expression&amp;#92;Blend 2.5 June 2008 Preview&lt;/strong&gt;) &lt;/li&gt;    &lt;li&gt;Run Blend from the Blend.bat file that was extracted into Blend's installation folder. (The only way to run an add-in in Blend is to use a command line argument: -addin:path_to_the_addin - in our case -&lt;strong&gt;addin:Addins&amp;#92;Expression.Blend.IntelliSense.dll. &lt;/strong&gt;You can also create a shortcut to Blend and pass this argument.) &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Limitations&lt;/h3&gt;  &lt;p&gt;There are some limitation of the current implementation:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You should have &lt;strong&gt;Blend 2.5 June Preview (Version 2.1.1535)&lt;/strong&gt; - available for free download &lt;a rel="nofollow" target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=32A3E916-E681-4955-BC9F-CFBA49273C7C&amp;amp;displaylang=en"&gt;here&lt;/a&gt;. For version compatible with &lt;strong&gt;Blend 2.0&lt;/strong&gt; check &lt;a rel="nofollow" target="_blank" href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=BlendSense&amp;amp;ReleaseId=2129"&gt;here&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;No support for custom namespace types and custom attached properties. &lt;/li&gt;    &lt;li&gt;Currently the Silverlight support is not accurate, because it is using the WPF XML schema for IntelliSense information. &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/ligaz/~4/Huy7MB8CX5c" height="1" width="1"/&gt;</description>
         <author>sdobrev</author>
         <guid isPermaLink="false">6b9a7492-f627-4240-8487-676fe6b4dbcb</guid>
         <pubDate>Mon, 04 Aug 2008 06:55:43 +0000</pubDate>
      <feedburner:origLink>http://blogs.telerik.com/StefanDobrev/Posts/08-08-04/intellisense-for-expression-blend.aspx</feedburner:origLink></item>
      <item>
         <title>[ReSharper] Directory name donates namespace Yes or No ?</title>
         <link>http://feedproxy.google.com/~r/ligaz/~3/_ZyHGU9ly1M/resharper-directory-name-donates-namespace-yes-or-no.aspx</link>
         <description>&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-DirectorynamedonatesnamespaceYesorNo_F480-image_14.sflb"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="59" alt="image" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-DirectorynamedonatesnamespaceYesorNo_F480-image_thumb_6.sflb" width="74" align="left" border="0"/&gt;&lt;/a&gt;If you like us are passionate user of &lt;a rel="nofollow" target="_blank" href="http://www.jetbrains.com/resharper/features/index.html"&gt;ReSharper&lt;/a&gt; you know that ReSharper &amp;quot;&lt;em&gt;did not like&lt;/em&gt;&amp;quot; when a class' namespace did not correspond to the directory structure the file belongs to. To illustrate this lets look at a simple example. &lt;/p&gt;  &lt;p&gt;Imagine that we have a project named &lt;strong&gt;MyProject&lt;/strong&gt;. By default its namespace is &lt;strong&gt;MyProject&lt;/strong&gt;. Lets have a folder named &lt;strong&gt;MyControls&lt;/strong&gt; in the project as well. Now lets add a class file in that folder, naming it &lt;strong&gt;&amp;quot;MyControl.cs&amp;quot;&lt;/strong&gt;. The default namespace that will be generated for the class will be &lt;strong&gt;MyProject.MyControls.&lt;/strong&gt; It is constructed using the default namespace and joining it with the folder name. But if we change the namespace to be only &lt;strong&gt;MyProject&lt;/strong&gt;, ReSharper will warn us with:&lt;/p&gt;  &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-DirectorynamedonatesnamespaceYesorNo_F480-ReSharper-File-Namespace_2.sflb"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="147" alt="ReSharper-File-Namespace" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-DirectorynamedonatesnamespaceYesorNo_F480-ReSharper-File-Namespace_thumb.sflb" width="549" border="0"/&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;However, sometimes we may not want this behavior. We may just want to have a folder, which name will not participate in the default class' namespace. How to achieve this? Just in two easy steps:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1. &lt;strong&gt;Right click&lt;/strong&gt; on the folder and choose &lt;strong&gt;properties&lt;/strong&gt;. &lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;2. Change the &lt;strong&gt;Namespace Provider&lt;/strong&gt; combo box value from True to False. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-DirectorynamedonatesnamespaceYesorNo_F480-image_10.sflb"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="343" alt="image" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-DirectorynamedonatesnamespaceYesorNo_F480-image_thumb_4.sflb" width="593" border="0"/&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now ReSharper will be happy and everything will be fine. Peace.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ligaz/~4/_ZyHGU9ly1M" height="1" width="1"/&gt;</description>
         <author>sdobrev</author>
         <guid isPermaLink="false">cb0841bd-91d2-4349-8f90-446942651bae</guid>
         <pubDate>Fri, 04 Jul 2008 16:05:49 +0000</pubDate>
      <feedburner:origLink>http://blogs.telerik.com/StefanDobrev/Posts/08-07-04/resharper-directory-name-donates-namespace-yes-or-no.aspx</feedburner:origLink></item>
      <item>
         <title>Tip of the Day: Clear your ClickOnce application store</title>
         <link>http://feedproxy.google.com/~r/ligaz/~3/0_MTSF--SIM/tip-of-the-day-clear-your-clickonce-application-store.aspx</link>
         <description>&lt;p&gt;ClickOnce is a great technology that blurs the line between web and client(windows) applications. You can use it to easily deploy windows forms and WPF (through XBAP) app's. However there is common problem with it. The application store (the place where all ClickOnce applications get stored) has the ability to corrupt it self ending in an appropriate version mix of your application. You can end up in situation where "it works on my machine", but in reality the application did not work correctly. To avoid such situation it is a good practice to clear your application store before testing the deployment locally on your machine. You can do that using a magic (I mean it for real) command. Open Visual Studio command prompt and type:&lt;/p&gt;
&lt;p style="background:rgb(0, 35, 0) none repeat scroll 0% 0%;"&gt;&lt;span style="color:rgb(0, 255, 0);"&gt;&amp;nbsp; mage -cc&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;And a magic happens ;)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ligaz/~4/0_MTSF--SIM" height="1" width="1"/&gt;</description>
         <author>sdobrev</author>
         <guid isPermaLink="false">ae24f2f5-fa0e-4601-a25d-7a52d6d559dc</guid>
         <pubDate>Tue, 24 Jun 2008 12:27:36 +0000</pubDate>
      <feedburner:origLink>http://blogs.telerik.com/StefanDobrev/Posts/08-06-24/tip-of-the-day-clear-your-clickonce-application-store.aspx</feedburner:origLink></item>
      <item>
         <title>WPF Series: IFrameworkElement - the missing interface</title>
         <link>http://feedproxy.google.com/~r/ligaz/~3/8U8ushv3cps/wpf-series-iframeworkelement---the-missing-interface.aspx</link>
         <description>&lt;p&gt;If you are familiar with WPF you are aware that the the grand daddy of all controls is &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.aspx"&gt;FrameworkElement&lt;/a&gt;. It is defined in the PresentationFramework.dll assembly and derives from &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.aspx"&gt;UIElement&lt;/a&gt; (defined in PresentationCore.dll). Its purpose is to serve as a base element for all framework related stuff: styles, inheritance context, etc. However there is &lt;em&gt;another&lt;/em&gt; framework element - &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkcontentelement.style.aspx"&gt;FrameworkContentElement&lt;/a&gt;. The main distinct between them is that the later did not defines its own rendering behavior (its inheritors should do so). This is way properties like: (Actual)Width or (Actual)Height are not present at FrameworkContentElement. If you examine the classes that derive from FrameworkContentElement you will find out that they are mainly text and document related ones.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-WPFSeriesIFrameworkElementthemissinginte_107EC-image_2.sflb"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="405" alt="image" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-WPFSeriesIFrameworkElementthemissinginte_107EC-image_thumb.sflb" width="306" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;So, what's the deal?&lt;/h3&gt;  &lt;p&gt;Looking through the MSDN documentation you will find out that: &amp;quot;FrameworkContentElement deliberately parallels many of the same APIs as &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.aspx"&gt;FrameworkElement&lt;/a&gt;.&amp;quot; However they did not implement a common interface. For example if you want to access the DataContext property (present at both classes) you should check explicitly for each type like this:&lt;/p&gt;  &lt;div style="font-size:10pt;background:white;padding-bottom:0px;color:black;line-height:1em;font-family:consolas;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; dataContect = &lt;span style="color:#a31515;"&gt;&amp;quot;DataContext&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; frameworkElement = sender &lt;span style="color:blue;"&gt;as&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;FrameworkElement&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; ( frameworkElement != &lt;span style="color:blue;"&gt;null&lt;/span&gt; )&lt;/p&gt;    &lt;p style="margin:0px;"&gt;{&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; frameworkElement.DataContext = dataContect;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;else&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;{&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; frameworkContentElement = sender &lt;span style="color:blue;"&gt;as&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;FrameworkContentElement&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; ( frameworkContentElement != &lt;span style="color:blue;"&gt;null&lt;/span&gt; )&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; frameworkContentElement.DataContext = dataContect;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;This is not good and pretty as it should be. Let's fix it. Introducing the IFrameworkElement - the missing interface. &lt;/p&gt;  &lt;h3&gt;IFrameworkElement &lt;/h3&gt;  &lt;p&gt;IFrameworkElement interface contains all matching members from FrameworkElement and FrameworkContentElement. It also implements &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.windows.iframeworkinputelement.aspx"&gt;IFrameworkInputElement&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.windows.iframeworkinputelement.aspx"&gt;ISupportInitialize&lt;/a&gt;, which both classes implement as well. The way to work with it is to call an extension method (&lt;strong&gt;AsFrameworkElement()&lt;/strong&gt;) defined for a &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.windows.dependencyobject.aspx"&gt;DependencyObject&lt;/a&gt; that will return the type as IFrameworkElement if the target is FrameworkElement or FrameworkContentElement, otherwise it will return null.&amp;#160; Here is now you can operate with it:&lt;/p&gt;  &lt;div style="font-size:10pt;background:white;padding-bottom:0px;color:black;line-height:1em;font-family:consolas;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;// sender is DependencyObject&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; dataContext = &lt;span style="color:#a31515;"&gt;&amp;quot;DataContext&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IFrameworkElement&lt;/span&gt; frameworkElement = sender.AsFrameworkElement();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (frameworkElement != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;    &lt;p style="margin:0px;"&gt;{&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; frameworkElement.DataContext = dataContect;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;h3&gt;Why DependencyObject as target?&lt;/h3&gt;  &lt;p&gt;If you wonder why the method is defined on DependencyObject - simply because this is the common ancestor of both classes.&lt;/p&gt;  &lt;h3&gt;How is it implemented?&lt;/h3&gt;  &lt;p&gt;Internally there are two wrappers that wrap FrameworkElement and FrameworkContentElement and implement IFrameworkElement. All the calls to the interface are send to the wrapped element. The actual code is very simple, but about 624 lines long for each element. (It will be a much simpler one line implementation in a dynamic language - C# 4.0 is coming :) ).&lt;/p&gt;  &lt;p&gt;You can find a sample solution &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/photos/storage/sdobrev/Posts/20080610/FrameworkElementSample.zip"&gt;here&lt;/a&gt;. The code can be found on &lt;a rel="nofollow" target="_blank" href="http://www.codeplex.com/extensions"&gt;CodePlex&lt;/a&gt; too. &lt;/p&gt;  &lt;p&gt;Have fun.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ligaz/~4/8U8ushv3cps" height="1" width="1"/&gt;</description>
         <author>sdobrev</author>
         <guid isPermaLink="false">78d0aeaa-057a-409f-92bc-1b346856bc25</guid>
         <pubDate>Tue, 10 Jun 2008 14:51:51 +0000</pubDate>
      <feedburner:origLink>http://blogs.telerik.com/StefanDobrev/Posts/08-06-10/wpf-series-iframeworkelement---the-missing-interface.aspx</feedburner:origLink></item>
      <item>
         <title>WPF Series: Creating Generic Adorner</title>
         <link>http://feedproxy.google.com/~r/ligaz/~3/6lp_k9PiyAs/wpf-series-creating-generic-adorner.aspx</link>
         <description>&lt;p&gt;As I have mentioned at the end of the &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/StefanDobrev/Posts/08-04-16/WPF_Series_Adorners_Commands_and_Logical_Tree.aspx"&gt;previous post&lt;/a&gt; today I will show you how to create a generic adorner, which will allow you to decorate a single element&amp;#160; multiple times at different positions. At the end we will be able to create something that looks like this:&lt;/p&gt;
&lt;center&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Photos/Storage/sdobrev/Posts/20080522/TopicWithAdorners.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="110" alt="TopicWithAdorners" src="http://blogs.telerik.com/Photos/Storage/sdobrev/Posts/20080522/TopicWithAdorners.png" width="209" border="0"/&gt;&lt;/a&gt; &lt;/center&gt;

&lt;p&gt;To achieve this we will need a way to say that we want to position the adorner at the different corners of the element as well as to specify whether we want to be inside or outside (vertically or horizontally) of the element. Let's create some enumeration types that will serve for this purpose. Introducing &lt;em&gt;AdornerPosition&lt;/em&gt; and &lt;em&gt;AdornerPlacement&lt;/em&gt; enums.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AdornerPosition&lt;/strong&gt;&lt;/p&gt;

&lt;div style="font-size:10pt;background:white;padding-bottom:0px;color:black;line-height:1em;font-family:consolas;"&gt;
  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;enum&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;AdornerPosition&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;{&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; Unspecified = 0,&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; TopLeft = 1,&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; TopCenter = 2,&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; TopRight = 3,&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; MiddleLeft = 4,&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; MiddleCenter = 5,&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; MiddleRight = 6,&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; BottomLeft = 7,&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; BottomCenter = 8,&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; BottomRight = 9&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;AdornerPlacement&lt;/strong&gt;&lt;/p&gt;

&lt;div style="font-size:10pt;background:white;padding-bottom:0px;color:black;line-height:1em;font-family:consolas;"&gt;
  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;enum&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;AdornerPlacement&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;{&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; Unspecified = 0,&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; In = 1,&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; OutHorizontally = 2,&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; OutVertically = 3&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Each of the enums' values speak for it self, but for clarity here is a diagram that illustrates them:&lt;/p&gt;
&lt;center&gt;&amp;#160; &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Photos/Storage/sdobrev/Posts/20080522/AdornerPlacementAndPosition.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="306" alt="AdornerPlacementAndPosition" src="http://blogs.telerik.com/Photos/Storage/sdobrev/Posts/20080522/AdornerPlacementAndPosition.png" width="439" border="0"/&gt;&lt;/a&gt;&lt;/center&gt;

&lt;p&gt;The final piece is to implement the &lt;em&gt;ArrangeOverride()&lt;/em&gt; method of the &lt;em&gt;Adorner&lt;/em&gt; class. It looks like this:&lt;/p&gt;

&lt;div style="font-size:10pt;background:white;padding-bottom:0px;color:black;line-height:1em;font-family:consolas;"&gt;
  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&lt;span style="color:blue;"&gt;protected&lt;/span&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Size&lt;/span&gt; ArrangeOverride( &lt;span style="color:#2b91af;"&gt;Size&lt;/span&gt; finalSize )&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;{&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; ( adorningElement != &lt;span style="color:blue;"&gt;null&lt;/span&gt; )&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Point&lt;/span&gt; adorningPoint = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Point&lt;/span&gt;();&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;int&lt;/span&gt; pos = (&lt;span style="color:blue;"&gt;int&lt;/span&gt;) position - 1;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Rect&lt;/span&gt; adorneredElementRect = &lt;span style="color:#2b91af;"&gt;VisualTreeHelper&lt;/span&gt;.GetContentBounds( AdornedElement );&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Rect&lt;/span&gt; adorningElementRect = &lt;span style="color:#2b91af;"&gt;VisualTreeHelper&lt;/span&gt;.GetContentBounds( adorningElement );&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; adorningPoint.X = ( ( ( pos % 3 ) / 2d ) * adorneredElementRect.Width )&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - ( ( ( pos % 3 ) / 2d ) * adorningElementRect.Width );&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; adorningPoint.Y = ( ( ( pos / 3 ) / 2d ) * adorneredElementRect.Height )&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - ( ( ( pos / 3 ) / 2d ) * adorningElementRect.Height );&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; ( placement == &lt;span style="color:#2b91af;"&gt;AdornerPlacement&lt;/span&gt;.OutHorizontally )&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;switch&lt;/span&gt; ( pos % 3 )&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;default&lt;/span&gt; :&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;case&lt;/span&gt; 1 :&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;//center column do nothing&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;case&lt;/span&gt; 0 :&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; adorningPoint.X -= adorningElementRect.Width;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;case&lt;/span&gt; 2 :&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; adorningPoint.X += adorningElementRect.Width;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt; ( placement == &lt;span style="color:#2b91af;"&gt;AdornerPlacement&lt;/span&gt;.OutVertically )&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;switch&lt;/span&gt; ( pos / 3 )&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;default&lt;/span&gt; :&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;case&lt;/span&gt; 1 :&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;//center row do nothing&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;case&lt;/span&gt; 0 :&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; adorningPoint.Y -= adorningElementRect.Height;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;case&lt;/span&gt; 2 :&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; adorningPoint.Y += adorningElementRect.Height;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; adorningElement.Arrange( &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Rect&lt;/span&gt;( adorningPoint, adorningElement.DesiredSize ) );&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; finalSize;&lt;/p&gt;

  &lt;p style="margin:0px;padding-bottom:0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;That's it. You can now adorn your elements passing different positions and placements. Sample project can be downloaded from &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Photos/Storage/sdobrev/Posts/20080522/GenericAdorner.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Have fun adorning your elements.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ligaz/~4/6lp_k9PiyAs" height="1" width="1"/&gt;</description>
         <author>Stefan Dobrev</author>
         <guid isPermaLink="false">2f3ea819-5eb8-4a11-b992-a85d8877f7c5</guid>
         <pubDate>Thu, 22 May 2008 15:35:56 +0000</pubDate>
      <feedburner:origLink>http://blogs.telerik.com/StefanDobrev/Posts/08-05-22/wpf-series-creating-generic-adorner.aspx</feedburner:origLink></item>
      <item>
         <title>WPF Series: Adorners, Commands and Logical Tree</title>
         <link>http://feedproxy.google.com/~r/ligaz/~3/1RLdXGyigBo/wpf-series-adorners-commands-and-logical-tree.aspx</link>
         <description>&lt;p&gt;Today I'm going to tell you a WPF story. But before I start to dig deeper let me first introduce you the main characters in this post. Here they are:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Adorner - &lt;a rel="nofollow" target="_blank" href="http://msdn2.microsoft.com/en-us/library/ms743737.aspx"&gt;adorners&lt;/a&gt; are simple &lt;em&gt;UIElement&lt;/em&gt; decorators. Suppose that you have a &lt;em&gt;RichTextBox&lt;/em&gt; and you want to place a comment box over it, so that users can comment on the text in the box. This can be archived with adorners. Actually the WPF framework uses adorners internally for exactly the same purpose when you edit and annotate &lt;em&gt;FlowDocument&lt;/em&gt; in a &lt;em&gt;DocumentViewer&lt;/em&gt;. This is the reason why adorners are in &lt;strong&gt;System.Windows.Documents &lt;/strong&gt;namespace. &lt;/li&gt;
    &lt;li&gt;Command - &lt;a rel="nofollow" target="_blank" href="http://blogs.vertigo.com/personal/alanl/Blog/Lists/Posts/Post.aspx?ID=17"&gt;commands&lt;/a&gt; are UI flavored implementation of the &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Command_pattern"&gt;command pattern&lt;/a&gt; in WPF. You can read about them &lt;a rel="nofollow" target="_blank" href="http://www.informit.com/articles/article.aspx?p=688529&amp;amp;seqNum=4"&gt;here&lt;/a&gt;. &lt;/li&gt;
    &lt;li&gt;Logical Tree - &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Photos/Storage/sdobrev/Posts/20080416/Button.png"&gt;&lt;img width="244" height="113" border="0" align="right" src="http://blogs.telerik.com/Photos/Storage/sdobrev/Posts/20080416/Button.png" alt="Button" style="border-width:0px;"/&gt;&lt;/a&gt;There are two control trees in WPF. One is the visual one, the other is the logical one. Imagine a Button for example. The button as logical entity act as a single control, you can click on it etc. However the visual representation of the button contains different &lt;em&gt;UIElement&lt;/em&gt;s - borders, &lt;em&gt;TextBlock&lt;/em&gt;, etc. This means that WPF should maintain two separate control trees, one for the behavior elements - logical tree and one for the visual representation - visual tree. More info &lt;a rel="nofollow" target="_blank" href="http://www.informit.com/articles/article.aspx?p=688529&amp;amp;seqNum=1"&gt;here&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are a bunch of WPF &lt;a rel="nofollow" target="_blank" href="http://www.codeproject.com/KB/WPF/ImageCropper.aspx"&gt;adorners&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://dvuyka.spaces.live.com/Blog/cns!305B02907E9BE19A!124.entry"&gt;samples&lt;/a&gt; out there (including the &lt;a rel="nofollow" target="_blank" href="http://msdn2.microsoft.com/en-us/library/ms771627(VS.85).aspx"&gt;SDK&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://msdn2.microsoft.com/en-us/library/ms771714.aspx"&gt;ones&lt;/a&gt; as &lt;a rel="nofollow" target="_blank" href="http://msdn2.microsoft.com/en-us/library/ms771344.aspx"&gt;well&lt;/a&gt;). But as usual when you try to create something more complex the standard samples break down. For example let say that we want to achieve something like the mini toolbar in Word 2007:&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Photos/Storage/sdobrev/Posts/20080416/WordMiniToolbar.png"&gt;&lt;img width="244" height="91" border="0" src="http://blogs.telerik.com/Photos/Storage/sdobrev/Posts/20080416/WordMiniToolbar.png" alt="WordMiniToolbar" style="border-width:0px;"/&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Let's start our quest with a &lt;em&gt;TextBox&lt;/em&gt; that look like this:&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Photos/Storage/sdobrev/Posts/20080416/FunkyTextBox.png"&gt;&lt;img width="235" height="98" border="0" src="http://blogs.telerik.com/Photos/Storage/sdobrev/Posts/20080416/FunkyTextBox.png" alt="FunkyTextBox" style="border-width:0px;"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and you want to put a simple button next to it that will let say will open a hyperlink that is somehow related to the &lt;em&gt;TextBox&lt;/em&gt;. You could easily achieve this with adorners and end up with something which look like this:&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Photos/Storage/sdobrev/Posts/20080416/FunkyTextBoxWithLink.png"&gt;&lt;img width="240" height="119" border="0" src="http://blogs.telerik.com/Photos/Storage/sdobrev/Posts/20080416/FunkyTextBoxWithLink.png" alt="FunkyTextBoxWithLink" style="border-width:0px;"/&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;How to do this? You could create something like &lt;em&gt;TextBoxAdorner&lt;/em&gt; that will derive from &lt;em&gt;Adorner&lt;/em&gt; and will look like this:&lt;/p&gt;
&lt;div style="background:white none repeat scroll 0% 50%;font-size:10pt;color:black;font-family:consolas;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:rgb(43, 145, 175);"&gt;TextBoxAdorner&lt;/span&gt; : &lt;span style="color:rgb(43, 145, 175);"&gt;Adorner&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;{&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;readonly&lt;/span&gt; &lt;span style="color:rgb(43, 145, 175);"&gt;UIElement&lt;/span&gt; adorningElement;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; TextBoxAdorner(&lt;span style="color:rgb(43, 145, 175);"&gt;TextBox&lt;/span&gt; textBox, &lt;span style="color:rgb(43, 145, 175);"&gt;UIElement&lt;/span&gt; adorningElement ) : &lt;span style="color:blue;"&gt;base&lt;/span&gt;( textBox )&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;this&lt;/span&gt;.adorningElement = adorningElement;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (adorningElement != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddVisualChild(adorningElement);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;protected&lt;/span&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; VisualChildrenCount&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;get&lt;/span&gt; { &lt;span style="color:blue;"&gt;return&lt;/span&gt; adorningElement == &lt;span style="color:blue;"&gt;null&lt;/span&gt; ? 0 : 1; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;protected&lt;/span&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span style="color:rgb(43, 145, 175);"&gt;Size&lt;/span&gt; ArrangeOverride(&lt;span style="color:rgb(43, 145, 175);"&gt;Size&lt;/span&gt; finalSize)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (adorningElement != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:rgb(43, 145, 175);"&gt;Point&lt;/span&gt; adorningPoint = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:rgb(43, 145, 175);"&gt;Point&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//position at the end of the text box&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; adorningPoint.X = ((&lt;span style="color:rgb(43, 145, 175);"&gt;TextBox&lt;/span&gt;)AdornedElement).ActualWidth;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//position above the text box&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; adorningPoint.Y -= adorningElement.DesiredSize.Height;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; adorningElement.Arrange( &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:rgb(43, 145, 175);"&gt;Rect&lt;/span&gt;( adorningPoint, adorningElement.DesiredSize ) );&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; finalSize;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;protected&lt;/span&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span style="color:rgb(43, 145, 175);"&gt;Visual&lt;/span&gt; GetVisualChild(&lt;span style="color:blue;"&gt;int&lt;/span&gt; index)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (index == 0 &amp;amp;&amp;amp; adorningElement != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; adorningElement;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;base&lt;/span&gt;.GetVisualChild(index);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Note that we call &lt;em&gt;AddVisualChild() &lt;/em&gt;method so that the element that is passed to the constructor will be visible. It is also necessary &lt;em&gt;VisualChildrenCount&lt;/em&gt; to return count of 1 and &lt;em&gt;GetVisualChild()&lt;/em&gt; to return the &lt;em&gt;UIElement &lt;/em&gt;that is added to the visual tree - in our case this is the &lt;em&gt;adorningElement&lt;/em&gt;. &lt;/p&gt;
&lt;p&gt;So far so good. Now imagine that the button that is added as adorner did not have a click handler, but have a command set. Let's name the command - "NavigateToLink". The command handler is added to &lt;em&gt;TextBox&lt;/em&gt;'s input bindings, because the &lt;em&gt;TextBox&lt;/em&gt; itself "knows" how to execute "NavigateToLink" command. (The sample is with &lt;em&gt;TextBox&lt;/em&gt;, but you could imagine have your own custom control that have that logic in it). But what happens when we do this:&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Photos/Storage/sdobrev/Posts/20080416/FunkyTextBoxWithLinkDisabled.png"&gt;&lt;img width="240" height="119" border="0" src="http://blogs.telerik.com/Photos/Storage/sdobrev/Posts/20080416/FunkyTextBoxWithLinkDisabled.png" alt="FunkyTextBoxWithLinkDsiabled" style="border-width:0px;"/&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;As you can see the button is disabled, because the command infrastructure in WPF did not manage to find a handler for our "NavigateToLink" command. This causes the &lt;em&gt;Button &lt;/em&gt;to become disabled. Now what? &lt;/p&gt;
&lt;p&gt;If you refer to the command readings in the links that were in the beginning of the post you will find our that the command mechanism in WPF uses the logical tree of controls to find handlers for particular commands. This bring us to point where we added the &lt;em&gt;Button &lt;/em&gt;to visual tree. In our case we will have to add it as a logical child of the &lt;em&gt;TextBox &lt;/em&gt;as well. This will automatically add it the logical tree of controls and the command handler will be correctly resolved and the &lt;em&gt;Button&lt;/em&gt; enabled. Here is the new constructor of &lt;em&gt;TextBoxAdorner&lt;/em&gt; class:&lt;/p&gt;
&lt;div style="background:white none repeat scroll 0% 50%;font-size:10pt;color:black;font-family:consolas;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; TextBoxAdorner(&lt;span style="color:rgb(43, 145, 175);"&gt;TextBox&lt;/span&gt; textBox, &lt;span style="color:rgb(43, 145, 175);"&gt;UIElement&lt;/span&gt; adorningElement ) : &lt;span style="color:blue;"&gt;base&lt;/span&gt;( textBox )&lt;/p&gt;
&lt;p style="margin:0px;"&gt;{&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;this&lt;/span&gt;.adorningElement = adorningElement;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (adorningElement != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddVisualChild(adorningElement);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; textBox.AddLogicalChild( adorningElement );&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Here comes the other problem. For encapsulation reasons the &lt;em&gt;AddLogicalChild()&lt;/em&gt; method of &lt;em&gt;FrameworkElement&lt;/em&gt; is marked as &lt;strong&gt;protected internal&lt;/strong&gt; and can not be called as we call it in the snippet above. One way to workaround this is to derive from &lt;em&gt;TextBox&lt;/em&gt; and make the method internal for your assembly. The other way is to use reflection and call the method. You can even create an extension method that will be available for all &lt;em&gt;FrameworkElement&lt;/em&gt;s. To make it even more extreme you can use expression trees to cache the method call and optimize the reflection. Here is the code:&lt;/p&gt;
&lt;div style="background:white none repeat scroll 0% 50%;font-size:10pt;color:black;font-family:consolas;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:rgb(43, 145, 175);"&gt;FrameworkElementExtensions&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;{&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;readonly&lt;/span&gt; &lt;span style="color:rgb(43, 145, 175);"&gt;Action&lt;/span&gt;&amp;lt;&lt;span style="color:rgb(43, 145, 175);"&gt;FrameworkElement&lt;/span&gt;, &lt;span style="color:blue;"&gt;object&lt;/span&gt;&amp;gt; AddLogicalChildMethod = CreateAddLogicalChildMethod();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:rgb(43, 145, 175);"&gt;Action&lt;/span&gt;&amp;lt;&lt;span style="color:rgb(43, 145, 175);"&gt;FrameworkElement&lt;/span&gt;, &lt;span style="color:blue;"&gt;object&lt;/span&gt;&amp;gt; CreateAddLogicalChildMethod()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:rgb(43, 145, 175);"&gt;ParameterExpression&lt;/span&gt; instance = &lt;span style="color:rgb(43, 145, 175);"&gt;Expression&lt;/span&gt;.Parameter( &lt;span style="color:blue;"&gt;typeof&lt;/span&gt; ( &lt;span style="color:rgb(43, 145, 175);"&gt;FrameworkElement&lt;/span&gt; ), &lt;span style="color:rgb(163, 21, 21);"&gt;"element"&lt;/span&gt; );&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:rgb(43, 145, 175);"&gt;ParameterExpression&lt;/span&gt; parameter = &lt;span style="color:rgb(43, 145, 175);"&gt;Expression&lt;/span&gt;.Parameter( &lt;span style="color:blue;"&gt;typeof&lt;/span&gt; ( &lt;span style="color:blue;"&gt;object&lt;/span&gt; ), &lt;span style="color:rgb(163, 21, 21);"&gt;"child"&lt;/span&gt; );&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:rgb(43, 145, 175);"&gt;MethodInfo&lt;/span&gt; methodInfo = &lt;span style="color:blue;"&gt;typeof&lt;/span&gt; ( &lt;span style="color:rgb(43, 145, 175);"&gt;FrameworkElement&lt;/span&gt; ).GetMethod(&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:rgb(163, 21, 21);"&gt;"AddLogicalChild"&lt;/span&gt;, &lt;span style="color:rgb(43, 145, 175);"&gt;BindingFlags&lt;/span&gt;.NonPublic | &lt;span style="color:rgb(43, 145, 175);"&gt;BindingFlags&lt;/span&gt;.Instance );&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:rgb(43, 145, 175);"&gt;MethodCallExpression&lt;/span&gt; method = &lt;span style="color:rgb(43, 145, 175);"&gt;Expression&lt;/span&gt;.Call( instance, methodInfo, parameter );&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:rgb(43, 145, 175);"&gt;Expression&lt;/span&gt;&amp;lt;&lt;span style="color:rgb(43, 145, 175);"&gt;Action&lt;/span&gt;&amp;lt;&lt;span style="color:rgb(43, 145, 175);"&gt;FrameworkElement&lt;/span&gt;, &lt;span style="color:blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt; lambda =&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:rgb(43, 145, 175);"&gt;Expression&lt;/span&gt;.Lambda&amp;lt;&lt;span style="color:rgb(43, 145, 175);"&gt;Action&lt;/span&gt;&amp;lt;&lt;span style="color:rgb(43, 145, 175);"&gt;FrameworkElement&lt;/span&gt;, &lt;span style="color:blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt;( method, instance, parameter );&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; lambda.Compile();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;internal&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; AddLogicalChild( &lt;span style="color:blue;"&gt;this&lt;/span&gt; &lt;span style="color:rgb(43, 145, 175);"&gt;FrameworkElement&lt;/span&gt; element, &lt;span style="color:blue;"&gt;object&lt;/span&gt; child )&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddLogicalChildMethod( element, child );&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;You can find a sample solution &lt;a rel="nofollow" target="_blank" href="http://blogs.telerik.com/Photos/Storage/sdobrev/Posts/20080416/AdornerCommands.zip"&gt;here&lt;/a&gt;. Go play with it. &lt;/p&gt;
&lt;p&gt;That its all for now folks. Next time I will show you how to create a generic adorner that can be used to decorate elements multiple times at different positions.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ligaz/~4/1RLdXGyigBo" height="1" width="1"/&gt;</description>
         <author>Stefan Dobrev</author>
         <guid isPermaLink="false">fb2f510f-a14a-4345-bc4c-997434fb4d07</guid>
         <pubDate>Wed, 16 Apr 2008 11:04:40 +0000</pubDate>
      <feedburner:origLink>http://blogs.telerik.com/StefanDobrev/Posts/08-04-16/wpf-series-adorners-commands-and-logical-tree.aspx</feedburner:origLink></item>
   </channel>
</rss><!-- fe13.pipes.sp1.yahoo.com compressed/chunked Fri Feb 10 08:11:45 UTC 2012 -->

