<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://xceed.com/CS/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Xceed Community</title><link>http://xceed.com/CS/blogs/default.aspx</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Debug Build: 61120.2)</generator><item><title>Xceed at Mix10!</title><link>http://xceed.com/CS/blogs/xamlhero/archive/2010/03/02/xceed-at-mix10.aspx</link><pubDate>Tue, 02 Mar 2010 18:24:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:25982</guid><dc:creator>Matt</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;Feels like not too long ago I was writing about Xceed going to &lt;A href="http://xceed.com/CS/blogs/xamlhero/archive/2009/03/13/mix09.aspx"&gt;Mix09&lt;/A&gt; and here we are a year later, ready to go to Mix10! We are all very excited about the announcements that will be made in regards to Windows Phone 7 Series development and are looking forward to some announcements about Silverlight's future as well. And who knows, maybe even WPF? Come on Microsoft, give WPF some love! :). &lt;/P&gt;
&lt;P&gt;That said, if you catch Cat, Odi, Charles, or myself at the event and have questions about our products, don't be shy and come talk to us! We'll be staying at the Mandalay Bay hotel and will try to be part of social events there. You can check us out as usual on twitter (&lt;A href="http://twitter.com/mattd1980"&gt;@MattD1980&lt;/A&gt; &lt;A href="http://twitter.com/Cattatatow"&gt;@Cattatatow&lt;/A&gt; &lt;A href="http://www.twitter.com/kosmatos"&gt;@Kosmatos&lt;/A&gt;) to see where we're hanging out.&lt;/P&gt;
&lt;P&gt;I hope the keynotes and sessions this year will be as inspiring as last year. Mix09 by far surpassed my expectations and it would seem that even more is brewing in Microsoft's lair. I still have to fill my schedule with the sessions I will be attending. So much to learn, so little time!&lt;/P&gt;
&lt;P&gt;See you there and don't hesitate to contact us if you want to meet up!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG src="http://xceed.com/CS/blogs/xamlhero/BlogPostCatMatMix2010_6.png"&gt;&lt;BR&gt;&lt;/P&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=25982" width="1" height="1"&gt;</description></item><item><title>Xceed DataGrid for Silverlight Tech Preview!</title><link>http://xceed.com/CS/blogs/dontpanic/archive/2010/02/24/xceed-datagrid-for-silverlight-tech-preview.aspx</link><pubDate>Wed, 24 Feb 2010 14:29:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:25912</guid><dc:creator>Jenny</dc:creator><slash:comments>3</slash:comments><description>&lt;P&gt;The Silverlight development team has been hard at work creating our Silverlight datagrid, and I thought that I would let you in on our progress and give you a glimpse as to what you can expect when it's released. Last year at PDC 2009, we demoed what was an early-stage version of the grid. Since then, it has come a long way and is nearing feature completion. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG style="WIDTH:460px;HEIGHT:360px;" title="Xceed DataGrid for Silverilght - Grouped" alt="Xceed DataGrid for Silverilght - Grouped" src="http://xceed.com/CS/blogs/dontpanic/SilverlightDataGrid1.jpg" width=460 height=360&gt;&lt;/P&gt;
&lt;P&gt;Xceed DataGrid for Silverlight takes user experience to a whole other level. Perfectly smooth horizontal and vertical scrolling, fully animated column reordering and resizing, customizable animations for group expansion and collapse, as well as transition animations for when rows are added or removed, provides an unprecedented level of UI slickness and responsiveness.&lt;/P&gt;
&lt;OBJECT width=640 height=385&gt;&lt;PARAM NAME="movie" VALUE="http://www.youtube.com/v/2Du15JhbN0s&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;rel=0&amp;amp;hd=1"&gt;&lt;PARAM NAME="allowFullScreen" VALUE="true"&gt;&lt;PARAM NAME="allowscriptaccess" VALUE="always"&gt;
&lt;embed src="http://www.youtube.com/v/2Du15JhbN0s&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/OBJECT&gt;
&lt;P&gt;&lt;BR&gt;Asynchronous data virtualization. THE must-have in a Silverlight data grid, it’s the cornerstone on which Xceed DataGrid for Silverlight is built. We’ve packed a lot into our implementation of this, such as major advancements in how virtualized data is handled, automatic discovery, active pre-fetching and caching of data, quick navigation, and instant grouping. You can add to that built-in support for &lt;A href="http://msdn.microsoft.com/en-us/data/bb931106.aspx" target=_blank&gt;WCF Data Services&lt;/A&gt; and &lt;A href="http://silverlight.net/getstarted/riaservices/" target=_blank&gt;WCF RIA Services&lt;/A&gt;, as well as "event-driven" and "full-list" data sources (i.e., pass-through data virtualization) and many more to come, which means that where you get your data from no longer matters. Just connect to the source, and we handle the rest. Simple. Trust me: you haven't seen anything like this in any other grid before.&lt;/P&gt;
&lt;P&gt;Sometimes, appearances are everything. Don't like the yellow/orange/i-am-sorry-Catherine-i-do-not-know-the-exact-color border in the PDC-demo theme? Change it! Xceed DataGrid for Silverlight is 100% "blendable" and its elements can be customized to match the look and feel of any application. Or if you prefer, you can use one of the built-in themes that were designed for the grid with user experience in mind.&lt;/P&gt;
&lt;P&gt;Now, I know the first question our current WPF clients will have is this: "I have a project that currently uses &lt;A href="http://xceed.com/Grid_WPF_Intro.html" target=_blank&gt;Xceed DataGrid for WPF&lt;/A&gt;. Can I just switch it out for the Silverlight version?" The answer to that is no, you can't. Why? Well there are a couple of reasons. First, Silverlight is not WPF; there are things you can do in WPF that you can't do in Silverlight. Doing a direct API port would have been 1) nearly impossible and 2) would not have allowed us to take full advantage of the Silverlight platform. Second, since the initial release of Xceed DataGrid for WPF, we have developed new, innovative ways of handling data, but it would be impossible to implement them in that product without doing major breaking changes. With our upcoming Silverlight datagrid, we have been able to implement these new techniques without worrying about backwards compatibility. At any rate, although it is not a direct API port, the API will feel very familiar and you should feel right at home using the Silverlight datagrid. We intend to also provide a WPF-compiled version of the Silverlight grid, so if you want to build for both platforms, you will have the option to do so with the Silverlight datagrid.&lt;/P&gt;
&lt;P&gt;Want a quick point-by-point list of the features/goodies that we are aiming for? Here you go:&lt;/P&gt;
&lt;P&gt;UI&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Ultra smooth and responsive tabular layout&lt;/LI&gt;
&lt;LI&gt;Multi-level grouping&lt;/LI&gt;
&lt;LI&gt;Sorting&lt;/LI&gt;
&lt;LI&gt;Filtering&lt;/LI&gt;
&lt;LI&gt;Sticky group containers&lt;/LI&gt;
&lt;LI&gt;Animated vertical and horizontal scrolling&lt;/LI&gt;
&lt;LI&gt;Fixed and scrollable headers and footers&lt;/LI&gt;
&lt;LI&gt;Easy group navigation (think something similar to the &lt;A href="http://www.youtube.com/watch?v=lIJ23Au6j3Y" target=_blank&gt;group-navigation control&lt;/A&gt; in Xceed DataGrid for WPF)&lt;/LI&gt;
&lt;LI&gt;Animated column reordering and resizing&lt;/LI&gt;
&lt;LI&gt;Row and cell selection&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Data Virtualization&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Asynchronous data loading for continuously responsive UI&lt;/LI&gt;
&lt;LI&gt;Minimal (if at all) code required&lt;/LI&gt;
&lt;LI&gt;No discovery needed on remote data source&lt;/LI&gt;
&lt;LI&gt;Pre-fetching and caching of data &lt;/LI&gt;
&lt;LI&gt;Instant expanding and collapsing of groups&lt;/LI&gt;
&lt;LI&gt;Quick navigation through data source&lt;/LI&gt;
&lt;LI&gt;Support for almost any type of data source including WCF Data Services and WCF RIA Services&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Editing&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Default editors for all the common data types&lt;/LI&gt;
&lt;LI&gt;Ability to create custom cell editor controls&lt;/LI&gt;
&lt;LI&gt;Validation (e.g., IDataErrorInfo, INotifyDataErrorInfo)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;While you wait for the official launch of Xceed DataGrid for Silverlight, I will (hopefully) be blogging about specific features and how easily they can be used in any Silverlight application. I will also take you on indepth tours of some of the design concepts behind our latest baby &lt;img src="http://xceed.com/CS/emoticons/emotion-1.gif" alt="Smile" /&gt; &lt;/P&gt;
&lt;P&gt;In order to get feedback from the community, we will be opening a private beta in March to make sure that we have the best possible product when it is officially released. If you are interested, send me an email to &lt;A href="mailto:datagridbeta@xceed.com"&gt;datagridbeta@xceed.com&lt;/A&gt; letting me know the type of project in which Xceed DataGrid for Silverlight would be used (e.g., new project, moving existing WPF project to Silverlight, replacing an existing grid) and the timeframe&amp;nbsp; needed to make a decision, and I will sign you up for the beta.&lt;/P&gt;
&lt;P&gt;Questions, comments, feature requests? Now's the time!&amp;nbsp; &lt;/P&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=25912" width="1" height="1"&gt;</description></item><item><title>Xceed Professional Themes for WPF - 2 New Themes!</title><link>http://xceed.com/CS/blogs/xamlhero/archive/2010/02/19/xceed-pro-themes-for-wpf-2-new-themes.aspx</link><pubDate>Fri, 19 Feb 2010 20:39:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:25875</guid><dc:creator>Matt</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;The upcoming release of &lt;A href="http://xceed.com/ProThemes_WPF_Intro.html" target=_blank&gt;Xceed Professional Themes for WPF&lt;/A&gt; will be our biggest update to the product since it was released last year. The latest incarnation of &lt;A href="http://xceed.com/Grid_WPF_Intro.html" target=_blank&gt;Xceed DataGrid for WPF&lt;/A&gt; brought a Windows 7 inspired theme as well as the Live Explorer theme to the table. Both these themes will now be available in the next version of Xceed Professional Themes for WPF.&lt;/P&gt;
&lt;P&gt;So let's talk about the Live Explorer theme. When we first created our Xceed DataGrid for WPF Live Explorer we wanted to have a branded theme that would demonstrate how much of our product you could "re-style". At the time we didn't offer it as an available theme since we thought it would be too specific to our application. Boy, did we guess wrong on that one! Many of you responded very well to the theme and some of you were furious at us for not making it available. We heard you! Here's what it's going to look like :&lt;/P&gt;
&lt;P&gt;
&lt;OBJECT width=425 height=344&gt;&lt;PARAM NAME="movie" VALUE="http://www.youtube.com/v/lRT8pko6mVs&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;PARAM NAME="allowFullScreen" VALUE="true"&gt;&lt;PARAM NAME="allowscriptaccess" VALUE="always"&gt;
&lt;embed src="http://www.youtube.com/v/lRT8pko6mVs&amp;hl=en_US&amp;fs=1&amp;" mce_src="http://www.youtube.com/v/lRT8pko6mVs&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/OBJECT&gt;&lt;/P&gt;
&lt;P&gt;The Live Explorer theme was crafted so you can easily add it to your window and instantly get the look we are using in our own Live Explorer. It is perfect for applications that require a "darker" environment with a hint of color to keep it visually pleasing. Keep in mind that the video displays a work-in-progress version of the theme but very little should change visually when it is released. We also decided to expose an additional style for the toolbar to make it orange instead of gray.&lt;/P&gt;
&lt;P&gt;The second theme we added is a Windows 7 inspired theme. Windows 7 creates a very colorful and exciting environment and we wanted to capture this and bring it to our products. We tried to bring a more extravagant experience with this theme and hopefully it will allow you to build a fun application around it.&lt;/P&gt;
&lt;P&gt;
&lt;OBJECT width=425 height=344&gt;&lt;PARAM NAME="movie" VALUE="http://www.youtube.com/v/CYQqgyG_V34&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;PARAM NAME="allowFullScreen" VALUE="true"&gt;&lt;PARAM NAME="allowscriptaccess" VALUE="always"&gt;
&lt;embed src="http://www.youtube.com/v/CYQqgyG_V34&amp;hl=en_US&amp;fs=1&amp;" mce_src="http://www.youtube.com/v/CYQqgyG_V34&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/OBJECT&gt;&lt;/P&gt;
&lt;P&gt;Both these themes are available in Xceed DataGrid for WPF and the upcoming version of Xceed Professional Themes for WPF. Another version of Xceed Professional Themes for WPF will provide styles for Microsoft's datagrid and calendar controls should come out shortly after. &lt;/P&gt;
&lt;P&gt;If you have any questions about the product, feel free to contact us!&lt;BR&gt;&lt;/P&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=25875" width="1" height="1"&gt;</description></item><item><title>Ode to the Hidden and Forgotten</title><link>http://xceed.com/CS/blogs/dontpanic/archive/2010/01/22/ode-to-the-hidden-and-forgotten.aspx</link><pubDate>Fri, 22 Jan 2010 17:41:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:25521</guid><dc:creator>Jenny</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Ever since I started working in Silverlight, I found some strange ommissions, whether voluntary or not, in the Silverlight API. At times, this was very frustrating since I was expecting something as common as BindingList to be there. So, to end this week on a more "creative" note, I present you with an ode. Enjoy!&amp;nbsp;&lt;/p&gt;&lt;center&gt;&lt;p&gt;&lt;b&gt;Ode to the Hidden and Forgotten&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;My head aches as I search for something new,&lt;br&gt;Something to replace all the things they do.&lt;br&gt;Yet Silverlight keeps thwarting all my plans,&lt;br&gt;By hiding classes that I want to use.&lt;/p&gt;&lt;p&gt;No longer can I batch initialize.&lt;br&gt;Oh, where is ISupportInitialize?&lt;br&gt;Why has IBindingList been abandoned?&lt;br&gt;I don't want ObservableCollection!&lt;/p&gt;&lt;p&gt;Why do you stop me from selecting styles?&lt;br&gt;Is StyleSelector never to return?&lt;br&gt;Triggers! Oh, dear Triggers! Where have you gone?&lt;br&gt;Without you, I will have to manage states.&lt;/p&gt;&lt;p&gt;And to all the others that are hidden,&lt;br&gt;And to those that were simply forgotten:&lt;br&gt;We will remember you and all you do,&lt;br&gt;When we must search for something new to use.&lt;br&gt;&lt;/p&gt;&lt;/center&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=25521" width="1" height="1"&gt;</description></item><item><title>Sneak Peek at Version 3.6!</title><link>http://xceed.com/CS/blogs/dontpanic/archive/2010/01/18/sneak-peek-at-version-3-6.aspx</link><pubDate>Mon, 18 Jan 2010 18:44:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:25450</guid><dc:creator>Jenny</dc:creator><slash:comments>8</slash:comments><description>&lt;P&gt;So I didn't get much feedback from my post asking for help in regards to what to write, so I will go with the only suggestion I received and let you in on the upcoming features planned for the next major version of Xceed DataGrid for WPF. &lt;/P&gt;
&lt;P&gt;So let's start with a feature that clients have been asking for since the virtualizing collection view was released: multiple selection! Yes ladies and gentlemen you will finally be able to select more than one row when using a virtualized source! Actually, the whole selection process is being revamped, so expect to see some (long awaited) changes including.... wait for it.... CELL SELECTION!&lt;/P&gt;
&lt;P&gt;Performance! As if the grid was not already fast enough, get ready to see some performance enhancements in the standard table view! &lt;/P&gt;
&lt;P&gt;Finally, after many many requests, the Live Explorer theme, which can be seen in the the&amp;nbsp;&lt;A href="http://download3.xceedsoft.com/demo/gridwpf/Xceed.Wpf.DataGrid.Samples.LiveExplorer.xbap" target=_blank&gt;Xceed DataGrid for WPF Live Explorer&lt;/A&gt;, is now included with&amp;nbsp;Xceed DataGrid for WPF! Want more? How about a beautiful new Windows 7 theme? (I feel like I am on an infomercial!). &lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:555px;HEIGHT:399px;" title="Windows 7 Theme" alt="Windows 7 Theme" src="http://xceed.com/CS/blogs/dontpanic/Windows7TouchThemeBlog.jpg" width=555 height=399&gt;&lt;/P&gt;
&lt;P&gt;Another fantastic new addition is the print preview, which will allow users to take a look at their snazzy documents before sending them to the printer.&lt;/P&gt;
&lt;P&gt;QTP? Did someone say QTP? You heard right! The upcoming edition of Xceed DataGrid for WPF will provide full QTP support!&lt;/P&gt;
&lt;P&gt;Last, but definitely not least since I am most likely forgetting some, is the new group-navigation control, which replaces the previous group-navigation button, and provides quick and easy navigation between groups.&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;
&lt;OBJECT width=425 height=344&gt;&lt;PARAM NAME="movie" VALUE="http://www.youtube.com/v/lIJ23Au6j3Y&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;PARAM NAME="allowFullScreen" VALUE="true"&gt;&lt;PARAM NAME="allowscriptaccess" VALUE="always"&gt;
&lt;embed type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344" src="http://www.youtube.com/v/lIJ23Au6j3Y&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;/OBJECT&gt;&lt;/P&gt;
&lt;P&gt;So which&amp;nbsp;features are part of the &lt;A href="http://xceed.com/Grid_WPF_Standard_Intro.html" target=_blank&gt;Standard Edition&lt;/A&gt; and which ones are part of the &lt;A href="http://xceed.com/Grid_WPF_Intro.html" target=_blank&gt;Professional Edition&lt;/A&gt;?&amp;nbsp;Glad you asked!&amp;nbsp;Here's the breakdown:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Professional Edition Features&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Windows 7 and Xceed Live Explorer themes&lt;/LI&gt;
&lt;LI&gt;Print Preview&lt;/LI&gt;
&lt;LI&gt;Multiple selection when using data virtualization&lt;/LI&gt;
&lt;LI&gt;Group-navigation control&lt;/LI&gt;
&lt;LI&gt;QTP support&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Standard Edition Features&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Improved performance in table view&lt;/LI&gt;
&lt;LI&gt;Cell selection&lt;/LI&gt;
&lt;LI&gt;Customizable cursors in most views&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Of course, you can always check out our &lt;A href="http://xceed.com/pages/images/general/wpf-grid-compare.png" target=_blank&gt;feature comparaison chart&lt;/A&gt; for the full list &lt;img src="http://xceed.com/CS/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=25450" width="1" height="1"&gt;</description></item><item><title>My Search for My Perfect Twitter Client</title><link>http://xceed.com/CS/blogs/dontpanic/archive/2010/01/12/my-search-for-my-perfect-twitter-client.aspx</link><pubDate>Tue, 12 Jan 2010 16:00:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:25398</guid><dc:creator>Jenny</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;Hello, my name is Jenny (&lt;A href="http://twitter.com/_random_" target=_blank&gt;@_random_&lt;/A&gt;)&amp;nbsp;and I am a Twitter addict. Okay, not really and nothing even close to &lt;A href="http://twitter.com/kosmatos" target=_blank&gt;@kosmatos&lt;/A&gt;, but close enough that I check Twitter many times a day at work and on my iPhone to see what is going on. I don't follow many people and not many people follow me, but I like the interactions I have with those people and sometimes good conversations and suggestions come up. Sometimes I just write random stuff because I am bored. But I guess that if there is a point to Twitter, that is it.&lt;/P&gt;
&lt;P&gt;So, ever since I have come back from the &lt;A href="http://microsoftpdc.com/" target=_blank&gt;PDC&lt;/A&gt;, I have been using the &lt;A href="http://seesmic.com/" target=_blank&gt;Seesmic&lt;/A&gt; desktop client for Twitter, and although not perfect, it seemed to "do the job" although something was annoying me about it and yesterday I figured out what it was: the scrolling! When I scroll, I don't want to have to spend a few seconds finding the last tweet I was reading. It's annoying and it breaks the "flow". And so began my search for the perfect Twitter client this morning. &lt;/P&gt;
&lt;P&gt;Now, if you are expecting an indepth review of Twitter clients, you are reading the wrong blog post. I didn't go looking for THE best Twitter client. I went looking for the best one for ME. So what was I looking for? I had no idea, but I figured I would know it when I saw it. So the first client I installed after uninstalling Seesmic was &lt;A href="http://www.tweetdeck.com/" target=_blank&gt;Tweetdeck&lt;/A&gt;, which many people at &lt;A href="http://xceed.com/CS/controlpanel/blogs/xceed.com" target=_blank&gt;Xceed&lt;/A&gt; seem to enjoy using so I figured that it was probably a safe bet. A couple of minutes later, I was up and running with Tweetdeck and a couple of minutes later it was unistalled. Yes, it scrolled better than Seesmic but I found it hard to differentiate between my tweets, those that are replies to my tweets, and all the other noise. I really hate the new "Blend" themes (if that's what they are called). Use color people!! Black, white, and multiple shades of gray are not the best colors to use when you need to differentiate things. If you insist on using them, at least give me the option to change or customize them to something that I will like. Yes, I know this is a matter of opinion, but I told you I was looking for the perfect Twitter client for ME, not for YOU (I'm talking to you @&lt;A href="http://twitter.com/superdupercat" target=_blank&gt;superdupercat&lt;/A&gt;!&amp;nbsp;)!&lt;/P&gt;
&lt;P&gt;While on Tweetdeck, &lt;A href="http://twitter.com/ftdube" target=_blank&gt;@ftdube&lt;/A&gt; sent me a tweet telling me to try &lt;A href="http://www.digsby.com/" target=_blank&gt;Digsby&lt;/A&gt;, so I did. As soon as Tweedeck was uninstalled, I downloaded and installed Digsby. I would like to say that I actually tried it; however, when I attempted to add my MSN account in addition to my Twitter account (hey, it's also an IM client) it said my password was "too long". Excuse me? My password is too long? Ummm. No. I didn't even try it as a Twitter client. If it can't handle 24+ character passwords, it has no business being client for anything. &lt;/P&gt;
&lt;P&gt;After my failed Digsby attempt, I took a look at the Twitter web interface to see what clients people were sending from. I saw many Tweetdecks and some Seesmic, but other than that it seemed to be all iPhone apps. "iPhone apps!! Maybe &lt;A href="http://iconfactory.com/software/twitterrific" target=_blank&gt;Twitterrific&lt;/A&gt; is available for Windows" I thought to myself. So off to the Twitterrific website I go only to be disappointed that there is no Windows version available. I love Twitterrific on my iPhone. It just works and it's easy to find/see what I am looking for. But alas, I was to be disappointed one more time.&lt;/P&gt;
&lt;P&gt;At this point I am getting frustrated and thinking about going back to Seesmic since the only thing that actually bugged me was the scrolling. After quick consideration I decided to go back to the Twitter web site to see if they had a list of clients that they recommended. Lo and behold, right beside the listing for Twitterific was &lt;A href="http://www.twhirl.org/" target=_blank&gt;Twhirl&lt;/A&gt;. I had seen some tweets that originated from Twhirl before so I decided to try it out. Why? Honestly, because it looked pretty in the screenshot. No black/white/gray theme. 45 minutes later, I am still using it.&lt;/P&gt;
&lt;P&gt;So what was I looking for? I think in the end it came out to "easy". I want it to be easy. I want to easily see what I tweeted, who replied, and whatnot without having to really think about it. The fact that it can stay on top of other windows (with or without opacity) and also that fact that it has a built-in spell checker just made it that much better for ME.&lt;/P&gt;
&lt;P&gt;So that's it. My search for my "Perfect Twitter Client" has come to an end. For now &lt;img src="http://xceed.com/CS/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/P&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=25398" width="1" height="1"&gt;</description></item><item><title>Xceed Consulting Wins on WPF gig</title><link>http://xceed.com/CS/blogs/componentinsider/archive/2009/12/11/xceed-consulting-wins-on-wpf-gig.aspx</link><pubDate>Fri, 11 Dec 2009 15:12:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:25162</guid><dc:creator>Odi [Xceed]</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Calibri','sans-serif';FONT-SIZE:11pt;mso-fareast-font-family:Calibri;mso-bidi-font-family:'Times New Roman';mso-ascii-theme-font:minor-latin;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;A few months back, Lee Sherry, Senior BI Manager at Microsoft Business Intelligence, contacted our sales director, Charles, about having an app created for the company. Charles understood right away what her needs were and proposed the project to Pierre-Luc (“PL” for short!), Lead Developer for Xceed DataGrid for WPF. Everyone involved with the project knew that the star of the app, our WPF datagrid, would make it easy to deliver the goods in short time!&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Calibri','sans-serif';FONT-SIZE:11pt;mso-fareast-font-family:Calibri;mso-bidi-font-family:'Times New Roman';mso-ascii-theme-font:minor-latin;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;What Lee wanted was a rich, cutting-edge XAML Browser Application that would let the company’s managers navigate easily through numerous selected reports, filtering, sorting, and grouping their data. But the application had to remain responsive at all times, and Lee wanted an all-purpose solution, one that avoided hard-coded, pre-defined views, which would have limited the flexibility of the application. She also emphasized that it had to work with their existing data structure.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Calibri','sans-serif';FONT-SIZE:11pt;mso-fareast-font-family:Calibri;mso-bidi-font-family:'Times New Roman';mso-ascii-theme-font:minor-latin;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;Xceed’s developers met this challenge head on and devised a solution that was a stream-lined XBAP that interfaced with a SQL data source, which ran in Partial Trust. By doing things this way, the less technically savvy users of the software didn’t need to install certificates on their machines. However, this architecture meant using a Windows Communication Foundation (WCF) Web service, which acted as an intermediary between the XBAP and the SQL server. A data paging system was also implemented to fetch the data through the Web service. Of course, our designer team played a big part in the process, creating a gorgeous and compelling user experience!&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Microsoft Business Intelligence app developed with Xceed" alt="Microsoft Business Intelligence app developed with Xceed" src="http://xceed.com/CS/photos/odi/images/25161/500x341.aspx"&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Calibri','sans-serif';FONT-SIZE:11pt;mso-fareast-font-family:Calibri;mso-bidi-font-family:'Times New Roman';mso-ascii-theme-font:minor-latin;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;The application was developed entirely by Xceed, and met Lee’s expectations fully, helping Microsoft reach its objectives and saving the company time and money. After receiving the app, Lee e-mailed the following to Charles: “The Xceed WPF grids allowed us to deliver some fantastic interactive tools to our executives and increase the impact of our information. We are extremely satisfied with the professional support by the entire Xceed team. The Xceed technology is visually striking and works beautifully with our Silverlight and WPF infrastructure.”&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=25162" width="1" height="1"&gt;</description><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/WPF/default.aspx">WPF</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/DataGrid/default.aspx">DataGrid</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/Consulting/default.aspx">Consulting</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category></item><item><title>Getting Ready for PDC 2009!</title><link>http://xceed.com/CS/blogs/dontpanic/archive/2009/10/28/getting-ready-for-pdc-2009.aspx</link><pubDate>Wed, 28 Oct 2009 13:31:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:24690</guid><dc:creator>Jenny</dc:creator><slash:comments>1</slash:comments><description>&lt;DIV&gt;For the second year in a row Xceed will be exhibiting and attending at &lt;A class="" href="http://microsoftpdc.com/" target=_blank&gt;PDC 2009&lt;/A&gt;! In addition to the amazing new features in the upcoming version of &lt;A class="" href="http://xceed.com/Grid_WPF_Intro.html" target=_blank&gt;Xceed DataGrid for WPF&lt;/A&gt;, we will be demoing the latest development build of our future Silverlight grid.&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;This year we will be handing out snazy&amp;nbsp;Xceed t-shirts and if you get spotted wearing&amp;nbsp;one, you will be entered into 1 of the 3 draws to win a 16GB&amp;nbsp;&lt;A class="" href="http://www.bestbuy.com/site/olspage.jsp?id=pcat17071&amp;amp;type=page&amp;amp;st=Zune_20090816&amp;amp;sc=Global&amp;amp;cp=1&amp;amp;nrp=15&amp;amp;sp=&amp;amp;qp=&amp;amp;list=n&amp;amp;iht=y&amp;amp;usc=All+Categories&amp;amp;ks=960&amp;amp;p="&gt;Zune HD&lt;/A&gt; video and&amp;nbsp;MP3&amp;nbsp;player!&lt;/DIV&gt;
&lt;P&gt;&lt;IMG src="http://xceed.com/CS/blogs/dontpanic/shirt.png"&gt;&lt;/P&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;So if you want to come see what we've been working on, ask questions, make suggests for future releases, or simply chat with some of our team members make sure you stop by our booth! Also make sure you stop by &lt;A class="" href="http://pdc09.partywithpalermo.com/" target=_blank&gt;Party with Palermo&lt;/A&gt;! We will be fresh off the plane but ready to party! &lt;img src="http://xceed.com/CS/emoticons/emotion-5.gif" alt="Wink" /&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;See you in LA!&lt;/DIV&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=24690" width="1" height="1"&gt;</description></item><item><title>Writer's Block</title><link>http://xceed.com/CS/blogs/dontpanic/archive/2009/09/24/writer-s-block.aspx</link><pubDate>Thu, 24 Sep 2009 14:49:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:24153</guid><dc:creator>Jenny</dc:creator><slash:comments>1</slash:comments><description>&lt;div&gt;When we started writing blogs at Xceed, I think we all thought that we would always have interesting content to post about and that we could never run out of ideas. How wrong we were! For me, what I find the hardest is finding topics that will interest our current and future clients and that interest me as well! So here I am , more than a month since my last blog post and I have no ideas what to write about.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Now, this is where you come in! Tell me what you would like me to write about! Do you want to know more about a specific feature? About upcoming features? About developement at Xceed? A short story about kittens and unicorns? Something about me? About one of the developers?&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Help!! &lt;img src="http://xceed.com/CS/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/div&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=24153" width="1" height="1"&gt;</description></item><item><title>Sneak Peek at Version 3.5!</title><link>http://xceed.com/CS/blogs/dontpanic/archive/2009/08/12/sneak-preview-of-version-3-5.aspx</link><pubDate>Wed, 12 Aug 2009 14:21:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:23304</guid><dc:creator>Jenny</dc:creator><slash:comments>4</slash:comments><description>&lt;p&gt;Yes! Even with version 3.2 just out the door, the developers at Xceed have been hard at work on version 3.3, now officially version 3.5. So, what new features are being introduced in the latest version? I'm glad you asked! Among other features, the long awaited "smooth-scrolling table view" finally makes its debut in version 3.5. Known as the Tableflow view, this new view provides smooth, animated scrolling and column reordering as well as "sticky" group, grid, and detail headers and footers, which remain at the top and bottom of the grid until the next group or detail needs to be displayed. The "group-navigation" button, which is displayed in the group headers, can be clicked to have the first item in the group brought to the top of the viewport. Take a look!&lt;/p&gt;&lt;p&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/XAE8UGwHwUA&amp;amp;hl=en&amp;amp;fs=1&amp;amp;fmt=18"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed mce_src="http://www.youtube.com/v/XAE8UGwHwUA&amp;amp;hl=en&amp;amp;fs=1&amp;amp;fmt=18" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344" src="http://www.youtube.com/v/XAE8UGwHwUA&amp;amp;hl=en&amp;amp;fs=1&amp;amp;fmt=18"&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;So what do you need to do to replace the classic Table view you have been using with the Tableflow view? Simple! Search and replace "TableView" with "TableflowView" and you're done!&lt;/p&gt;&lt;p&gt;In addition to the Tableflow view, support for 2 new filter criteria has been added to the filter row: "starts with" and "ends width", which allow the content of a column to be filtered according to the values that start or end with the specified filter value.&lt;/p&gt;&lt;p&gt;Another nice little feature that was added in version 3.5 is a notification glyph that is displayed when the grid is bound to a virtualizing collection view. This glyph (actually, it's 3 separate glyphs) are displayed when data is loaded into the grid, when data is being committed, and when there is an error. In the demo below, you can see the default glyph that is displayed when data is being loaded. Now, if you don't like the default connection-state glyphs, you can always replace them with the image of a kitten! Everyone likes kittens &lt;img src="http://xceed.com/CS/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/p&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=23304" width="1" height="1"&gt;</description></item><item><title>Quick usage preview of Xceed Professional Themes for WPF</title><link>http://xceed.com/CS/blogs/xamlhero/archive/2009/07/23/quick-usage-preview.aspx</link><pubDate>Thu, 23 Jul 2009 18:29:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:22857</guid><dc:creator>Matt</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;&lt;IMG src="http://xceed.com/CS/blogs/xamlhero/P_ProfessionalThemes-WPF_EN.jpg"&gt;&amp;nbsp;&lt;BR&gt;I thought it would be a good idea to share with you how easy you'll be able to integrate our new Xceed Professional Themes for WPF product into your application. Version 1.0 will include 5 different themes: Media, Glass, and Office 2007 Black/Blue/Silver. Future versions will probably include Office 2010, Windows 7 themes, etc. You can expect each theme to have a version for Xceed DataGrid for WPF as well. This way, you can keep the datagrid's look in sync with all the standard controls.&lt;/P&gt;
&lt;P&gt;Once you have the product installed, the first thing you'll want to do is add references to your project. Each theme has an assembly associated with it. For this example, we'll work with the Media theme (similar to the WMP11 theme in Xceed DataGrid for WPf). Once you have added the reference, you'll want to set the namespace declaration in XAML:&lt;/P&gt;
&lt;P&gt;xmlns:xcpt="&lt;A href="http://schemas.xceed.com/wpf/xaml/themes"&gt;http://schemas.xceed.com/wpf/xaml/themes&lt;/A&gt;"&lt;/P&gt;
&lt;P&gt;xcpt stands for Xceed Professional Themes . We wanted to preserve the proper "WPF" way as much as possible, so each theme is basically a resource dictionary that you can add to your resources. You can simply add the resource dictionary as a resource to your entire window:&lt;/P&gt;
&lt;P&gt;&amp;lt;Window.Resources&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;xcpt:MediaResourceDictionary/&amp;gt;&lt;BR&gt;&amp;lt;/Window.Resources&amp;gt;&lt;/P&gt;
&lt;P&gt;This will also work if you want it to be applied to your entire application.&lt;/P&gt;
&lt;P&gt;&amp;lt;Application.Resources&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;xcpt:MediaResourceDictionary/&amp;gt;&lt;BR&gt;&amp;lt;/Application.Resources&amp;gt;&lt;/P&gt;
&lt;P&gt;You're almost ready to go. You need to first take care of the licensing. Our custom resource dictionary exposes a LicenseKey property:&lt;/P&gt;
&lt;P&gt;&amp;lt;xcpt:MediaResourceDictionary LicenseKey="Your-License-Key-Here"/&amp;gt;&lt;/P&gt;
&lt;P&gt;If you are in trial mode, you should be able to find your trial license key in the Resource Center installed with the product. If you have purchased the product already, you will find your license key in an email sent by our sales department. If you are trying the theme on an already existing application, you can hit F5 and see your standard controls styled with the Media theme. Simple enough?&lt;/P&gt;
&lt;P&gt;The method I just described is using all our resources implicitly, meaning that you did not have to define explicitly on each controls which theme you want to use. If, for any reason, you do not wish our themes&amp;nbsp; to override all your defined styles, you can use this product explicitly.&lt;/P&gt;
&lt;P&gt;&amp;lt;xcpt:MediaResourceDictionary StyleUsageMode="Explicit"/&amp;gt;&lt;/P&gt;
&lt;P&gt;As you already probably guessed, the default value is Implicit. Now that you have changed the StyleUsageMode property, if you hit F5, you should not see any difference from what you usually see without the themes referenced.&lt;/P&gt;
&lt;P&gt;This means, however, that you will have to define the resource you want for each control. Let’s take a button for example:&lt;/P&gt;
&lt;P&gt;&amp;lt;Button Style="{x:Static xcpt:MediaResources.ButtonStyle}"/&amp;gt;&lt;/P&gt;
&lt;P&gt;You have to force the Style of the Media button on the desired control. You will find a complete list of keys for our controls available in our documentation if you chose to work in Explicit mode.&lt;/P&gt;
&lt;P&gt;When creating this product, we were also aware that even though we styled all the standard Microsoft controls, some users would require us to go further. This is why in our light API we added some brush resources that you can apply to your own controls. Here's an example:&lt;/P&gt;
&lt;P&gt;&amp;lt;Border Background="{x:Static&lt;BR&gt;xcpt:MediaResources.ControlBackgroundBrush}"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BorderBrush="{x:Static xcpt:MediaResources.BorderBrush}"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BorderThickness="1"&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;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Height="50"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Width="50"/&amp;gt;&lt;/P&gt;
&lt;P&gt;This way, you create your own controls using some of our resources. As demonstrated above, you can set Background and BorderBrush to any element using our resources. A complete list of exposed resources will be available in our documentation as well. Of course, there's always the option to get our Blueprint Edition to get access to the complete XAML resources for all controls.&lt;/P&gt;
&lt;P&gt;Finally, a request I have received a few times and even in my previous blog post is to be able to change themes on the fly for your application. Basically, something to allow the user to have a Combobox with a list of available themes that can be changed during run-time. Here's a quick and dirty way you can do this, by defining your Combobox:&lt;/P&gt;
&lt;P&gt;&amp;lt;ComboBox SelectedIndex="0"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectionChanged="ThemeComboBox_SelectionChanged"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ComboBoxItem Content="Glass"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ComboBoxItem.Tag&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcpt:GlassResourceDictionary /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ComboBoxItem.Tag&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ComboBoxItem&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ComboBoxItem Content="Office 2007 Blue"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ComboBoxItem.Tag&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcpt:Office2007BlueResourceDictionary /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ComboBoxItem.Tag&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ComboBoxItem&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ComboBoxItem Content="Office 2007 Black"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ComboBoxItem.Tag&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcpt:Office2007BlackResourceDictionary /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ComboBoxItem.Tag&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ComboBoxItem&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ComboBoxItem Content="Office 2007 Silver"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ComboBoxItem.Tag&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcpt:Office2007SilverResourceDictionary /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ComboBoxItem.Tag&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ComboBoxItem&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ComboBoxItem Content="WMP11"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ComboBoxItem.Tag&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcpt:MediaResourceDictionary /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ComboBoxItem.Tag&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ComboBoxItem&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ComboBox&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;In your codebehind you will have to add the ThemeComboBox_SelectionChanged method, which should look like this:&lt;/P&gt;
&lt;P&gt;private void ThemeComboBox_SelectionChanged(object sender,&lt;BR&gt;SelectionChangedEventArgs e)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (e.AddedItems.Count &amp;gt; 0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Resources = ((ComboBoxItem)e.AddedItems[0]).Tag as&lt;BR&gt;ResourceDictionary;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;So this pretty much covers how our new product called Xceed Professional Themes for WPF will work. If you have questions about licensing and pricing, you can already contact &lt;A href="mailto:sales@xceedsoft.com"&gt;sales@xceedsoft.com&lt;/A&gt;. You can expect this product to be available by mid/end of August. Enjoy!&lt;BR&gt;&lt;/P&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=22857" width="1" height="1"&gt;</description></item><item><title>A Glimpse at Xceed Professional Theme Packs for WPF.</title><link>http://xceed.com/CS/blogs/xamlhero/archive/2009/06/25/a-glimpse-at-xceed-proffesional-themepacks-for-wpf.aspx</link><pubDate>Thu, 25 Jun 2009 16:47:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:22033</guid><dc:creator>Matt</dc:creator><slash:comments>2</slash:comments><description>&lt;div&gt;&lt;div&gt;For the past few months, Catherine and I have been working on a new product called Xceed Professional Theme Packs for WPF. This product&amp;nbsp;will include all Standard Microsoft controls :&amp;nbsp;Button, RadioButton, Checkbox, ListBox, TreeView, Toolbar, StatusBar etc... and about 30 different controls—all skinned. &lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;The main reason why we decided to develop this product is because of you,&amp;nbsp;our users. We received many comments like : "the WMP11 theme is nice for the DataGrid; however, the rest of my application doesn't fit!". It seemed like the next logical step was to offer a product that would enable our users to give their application a uniformed look. This product does not have a dependancy on Xceed DataGrid for WPF since we can easily imagine users wanting to use this product in any WPF application.&lt;/div&gt;&lt;div&gt;&lt;br&gt;One of the features this product will have is the ability to skin all your controls and still respond to visual properties. For example, having a WMP11 button will completely redo the look of the button; however, we were careful to still support properties like Background and BorderBrush, for example. If you look a the following image, you'll see three different buttons all with the same skin. The only difference between each button is the Background property :&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;img title="undefined" border="0" alt="" width="295" height="49" src="http://xceed.com/CS/blogs/xamlhero/wmp11button.png"&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;We wanted to enable our users to modify the look of the controls without compromising the skin. To achieve this, we had to exploit TemplateBindings as much as we could. TemplateBindings in a template allow you to chose which VisualElement in your VisualTree will respond to a given property. So in our WMP11 Button template, we added a layer over the gradient brush that gives the WMP11 look. So :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;Rectangle Fill={StaticResource WMP11GradientBurhs}/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;Rectangle Fill={TemplateBinding Background}&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Opacity="0.3"/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;ContentPresenter /&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;This is obviously not exactly how our template looks, it's just to give you an idea of how we proceeded. The Rectangle that has the opacity set to 0.3 is the one that is template bound to the background property. This will allow our users to set a color to the control without overriding the grandients as seen in the image.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Here's a quick video demonstrating some of our controls in action :&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/1G9nTNGv5x8&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed mce_src="http://www.youtube.com/v/1G9nTNGv5x8&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344" src="http://www.youtube.com/v/g2NgBcPz4wI&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;/object&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Not all controls are being displayed but it should give you a general idea of where we're going with this product. One of the toolbars has its background property set to DeepSkyBlue and, as you can see, it still fits with the look of the control. &lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;I'm pretty excited about Xceed getting this product out to you as soon as possible. We are currently in a final polishing phase and hoping for this to be released by the end of the summer. Expect to see 5 different themes with over 30 controls including : Office 2007 Blue, Black and Silver, WMP11, and Glass. Have questions about the control? Feel free to email me at drimonakosm@xceed.com or follow me on twitter at www.twitter.com/mattd1980.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=22033" width="1" height="1"&gt;</description></item><item><title>Overview of the new v3.2 datagrid for WPF</title><link>http://xceed.com/CS/blogs/componentinsider/archive/2009/06/15/overview-of-the-new-v3-2-datagrid-for-wpf.aspx</link><pubDate>Mon, 15 Jun 2009 13:43:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:21611</guid><dc:creator>Odi [Xceed]</dc:creator><slash:comments>3</slash:comments><description>&lt;P style="MARGIN:0cm 0cm 10pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;FONT-SIZE:16px;" class=Apple-style-span&gt;Today marks the release of v3.2 of Xceed DataGrid for WPF. This is the 9th major update since the product was first introduced 2.5 years ago. Another one is coming, hot on its heels for August, with smooth scrolling innovations&amp;nbsp;and other UI improvements, but here's what's new in today's release.&lt;/SPAN&gt;&lt;/P&gt;&lt;FONT size=3 face=Calibri&gt;
&lt;P style="TEXT-INDENT:-18pt;MARGIN:0cm 0cm 0pt 36pt;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-ascii-font-family:Calibri;mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3 face=Calibri&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;There are now &lt;B style="mso-bidi-font-weight:normal;"&gt;two paid editions&lt;/B&gt; of the DatagGrid, the new &lt;A title="Standard Edition WPF datagrid" href="http://xceed.com/Grid_WPF_Standard_Intro.html"&gt;Standard Edition&lt;/A&gt;, and the existing &lt;A title="Professional Edition WPF datagrid" href="http://xceed.com/Grid_WPF_Intro.html"&gt;Professional Edition&lt;/A&gt;.&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P style="TEXT-INDENT:-18pt;MARGIN:0cm 0cm 0pt 36pt;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-ascii-font-family:Calibri;mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3 face=Calibri&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;The new Standard Edition is aimed at folks who don’t need a whole lot of advanced features, but would still like to &lt;B style="mso-bidi-font-weight:normal;"&gt;save time and get better results&lt;/B&gt; than when using Microsoft’s upcoming datagrid for WPF. The time saved, from the more complete design, abundant data binding options, documentation and helpful Xceed staff should easily outweigh its &lt;B style="mso-bidi-font-weight:normal;"&gt;affordable $300&lt;/B&gt; cost. It also has more features than the Microsoft grid, such as rich grouping support, more cell editors and input validation. Best of all, there’s a built-in &lt;B style="mso-bidi-font-weight:normal;"&gt;instant upgrade path&lt;/B&gt;, so if your users eventually want filtering, printing, exporting, field chooser or other features, you can just upgrade and turn those capabilities on, instead of being painted in a corner with a control not designed to do them.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt 36pt;" class=MsoListParagraphCxSpMiddle&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt 0pt;" class=MsoListParagraphCxSpMiddle&gt;&lt;FONT size=3 face=Calibri&gt;So what’s new in v3.2? For this release, we’ve made getting to your data, and presenting it properly, a lot easier to do. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt 36pt;" class=MsoListParagraphCxSpMiddle&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-18pt;MARGIN:0cm 0cm 0pt 36pt;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-ascii-font-family:Calibri;mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3 face=Calibri&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;First, the datagrid now &lt;B style="mso-bidi-font-weight:normal;"&gt;autodetects foreign keys in your datatables&lt;/B&gt;, so now it is easier than ever to display the corresponding values you want to display, instead of IDs. It also works with enumerations. To activate this new feature, just set AutoCreateForeignKeyConfig to True.&lt;BR style="mso-special-character:line-break;"&gt;&lt;BR style="mso-special-character:line-break;"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-18pt;MARGIN:0cm 0cm 0pt 36pt;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-ascii-font-family:Calibri;mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3 face=Calibri&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Next, we added support for &lt;B style="mso-bidi-font-weight:normal;"&gt;custom key value mappings&lt;/B&gt;. This makes it easy to map any kind of values or objects to fields in your data that represent keys. For example, if your table of employees has an Employee ID integer field representing an employee object, you can easily map that field so that the datagrid uses corresponding employee’s First name and Last name fields formatted as “Last name, First name”&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;as the value to be displayed instead of the integer.&lt;BR style="mso-special-character:line-break;"&gt;&lt;BR style="mso-special-character:line-break;"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-18pt;MARGIN:0cm 0cm 0pt 36pt;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-ascii-font-family:Calibri;mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3 face=Calibri&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Next, for users of the powerful Data Virtualization feature – which in v3.2 now also supports grouping –&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;if your data source implements IQueriable, and LINQ does, we’ve made providing data to the datagrid a snap. &lt;B style="mso-bidi-font-weight:normal;"&gt;You no longer have to handle a bunch of events to provide the datagrid with data&lt;/B&gt;, and you no longer have to worry about how the datagrid is sorted or grouped. Doing so was tiresome, now it’s code free.&lt;BR style="mso-special-character:line-break;"&gt;&lt;BR style="mso-special-character:line-break;"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-18pt;MARGIN:0cm 0cm 0pt 36pt;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-ascii-font-family:Calibri;mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3 face=Calibri&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;We also completed full support for the &lt;B style="mso-bidi-font-weight:normal;"&gt;Entity Framework&lt;/B&gt;, which makes it super easy for Entity Framework users to get the grid to display hierarchical data. When binding the datagrid to a list of Entity objects, the datagrid will now automatically find and load the detail data into subgrids and use master/detail view. To turn this on, set AutoCreateDetailsDescription to True on the DataGridColectionViewSource and AutoCreateDetailConfigurations&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;to True on the datagrid.&lt;BR style="mso-special-character:line-break;"&gt;&lt;BR style="mso-special-character:line-break;"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-18pt;MARGIN:0cm 0cm 0pt 36pt;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-ascii-font-family:Calibri;mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3 face=Calibri&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;We’ve also made it easier to work with &lt;B style="mso-bidi-font-weight:normal;"&gt;unbound columns&lt;/B&gt;, in two ways. First, we support &lt;B style="mso-bidi-font-weight:normal;"&gt;unbound data&lt;/B&gt;, which appends data to business objects that the grid displays. This method is great for displaying calculated columns or anything else which depends on the data. Second, we now directly support &lt;B style="mso-bidi-font-weight:normal;"&gt;unbound columns&lt;/B&gt;, for displaying static information, such as a delete button for every row, progress bars, or any other controls or content which don’t depend on data.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt 0pt;" class=MsoListParagraphCxSpMiddle&gt;&lt;BR&gt;&lt;FONT size=3 face=Calibri&gt;The other important updates in this release deal with filtering. In previous versions, we offered Excel-like auto filtering, which provides a button for each column so that users can filter in the same way Excel does. In this version, there are two important additions to filtering capabilities for end users.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt 36pt;" class=MsoListParagraphCxSpMiddle&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-18pt;MARGIN:0cm 0cm 0pt 36pt;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-ascii-font-family:Calibri;mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3 face=Calibri&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;First, we’ve added the ability for developers to define their own &lt;B style="mso-bidi-font-weight:normal;"&gt;custom distinct values&lt;/B&gt; to add to the AutoFilter drop-down. You can use this to make the auto-filtering choices a lot more useful for end-users. For example, on a column with dates, you can offer the choice to filter by month. For names, the filtering choices could now be “A-C”, “D-F”, and so on. For numbers, you could group them into appropriate ranges, such as “0-99”,”99-1000” or “Odd numbers” and “Even numbers” – anything you want.&lt;BR style="mso-special-character:line-break;"&gt;&lt;BR style="mso-special-character:line-break;"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-18pt;MARGIN:0cm 0cm 0pt 36pt;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-ascii-font-family:Calibri;mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3 face=Calibri&gt;-&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Next, we’ve added a new row type, called the &lt;B style="mso-bidi-font-weight:normal;"&gt;Filter Row&lt;/B&gt;. This row can be placed in the grid’s fixed or scrolling headers or footers, and provides users with an alternate way to set and view the datagrid’s current filter settings. It’s always visible, and works great with date ranges, as you can set a start and end date to filter by, or set value ranges such as “&amp;gt;5 AND&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;10”. You can filter Booleans using a three state checkbox, and strings can be filtered by typing a value that is contained in the string.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt 36pt;" class=MsoListParagraphCxSpMiddle&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt 0pt;" class=MsoListParagraphCxSpMiddle&gt;&lt;FONT size=3 face=Calibri&gt;One last thing. The datagrid is now compiled for &lt;B style="mso-bidi-font-weight:normal;"&gt;.NET 3.5 SP1&lt;/B&gt;. This service pack has been available for some time, and according to Microsoft, should be automatically pushed out and installed everywhere through Windows Update around the November timeframe.&lt;BR style="mso-special-character:line-break;"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt 0pt;" class=MsoListParagraphCxSpMiddle&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt 0pt;" class=MsoListParagraphCxSpMiddle&gt;&lt;FONT size=3 face=Calibri&gt;Thanks, and I can’t wait to show you the a video of what’s in the next release, a release that’s coming soon, and has lots of amazingly responsive smooth scrolling and animation.&lt;BR&gt;&lt;BR&gt;Let us know what else you want us to implement, by posting in the &lt;A title="Xceed DataGrid for WPF Roadmap 2009 thread" href="http://xceed.com/CS/forums/thread/18805.aspx"&gt;Roadmap 2009 thread&lt;/A&gt; on the forums at Xceed.com.&lt;BR&gt;&lt;BR&gt;Good programming!&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 10pt 0pt;" class=MsoListParagraphCxSpLast&gt;&lt;BR style="mso-special-character:line-break;"&gt;&lt;BR style="mso-special-character:line-break;"&gt;&lt;/P&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=21611" width="1" height="1"&gt;</description><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/WPF/default.aspx">WPF</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/WPF+Toolkit/default.aspx">WPF Toolkit</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/filtering/default.aspx">filtering</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/data+virtualization/default.aspx">data virtualization</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/3.2/default.aspx">3.2</category></item><item><title>Sneak Peek at Version 3.2!</title><link>http://xceed.com/CS/blogs/dontpanic/archive/2009/06/01/sneak-peek-at-version-3-2.aspx</link><pubDate>Mon, 01 Jun 2009 14:38:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:21316</guid><dc:creator>Jenny</dc:creator><slash:comments>16</slash:comments><description>&lt;P&gt;So version 3.2 is compiled and ready to be released in mid-June! It has been a hectic past couple of weeks trying to get everything done and we are all very happy with the end result. I know that many of you have been anxiously waiting for the 3.2 release so I though I would give you a little preview to whet your appetite. So what exactly is included in version 3.2? Good question! It looks something like this:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Custom distinct values (e.g., "less than 10") in the auto-filter control&lt;/LI&gt;
&lt;LI&gt;Filter row that allows end users to provide filter criteria at run time.&lt;/LI&gt;
&lt;LI&gt;Built-in support for &lt;A class="" href="http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx" target=_blank&gt;Entity Framework&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Improvements to the datagrid's data virtualization capabilities including grouping and support for data sources implementing &lt;A class="" href="http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx" target=_blank&gt;IQueryable&lt;/A&gt; (LINQ)&lt;/LI&gt;
&lt;LI&gt;Automatic detection of foreign key constraints and enumerations&lt;/LI&gt;
&lt;LI&gt;Support for unbound columns and data &lt;/LI&gt;
&lt;LI&gt;Enable and disable grouping and sorting on a per-column basis&lt;/LI&gt;
&lt;LI&gt;and a couple little extras that you will discover!&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;One feature that clients have often inquired about is custom distinct values. Or, in other words, being able to provide "Excel-like" filter criteria such as "less than x" and "greater than x" in the auto-filter drop down. With version 3.2, it is possible to do so and even more. How? Easy! Just use the &lt;STRONG&gt;QueryDistinctValue&lt;/STRONG&gt; event exposed by each &lt;STRONG&gt;DataGridItemProperty&lt;/STRONG&gt; and return the desired distinct value. For example, in the code below, I provide distinct values that will filter date/time values according to the year (by default, all dates would have been displayed in the auto-filter control) and I also provide value ranges where, by default, all values would have been displayed in the drop down.&lt;/P&gt;
&lt;P&gt;&amp;lt;Grid xmlns:xcdg="&lt;A href="http://schemas.xceed.com/wpf/xaml/datagrid"&gt;http://schemas.xceed.com/wpf/xaml/datagrid&lt;/A&gt;"&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;Grid.Resources&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridCollectionViewSource x:Key="cvs_orders"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Source="{Binding Source={x:Static Application.Current}, Path=Orders}"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AutoFilterMode="And"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DefaultCalculateDistinctValues="False"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridCollectionViewSource.ItemProperties&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridItemProperty Name="OrderDate"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; QueryDistinctValue="DataGridItemProperty_QueryDistinctValue_Date"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CalculateDistinctValues="True"/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridItemProperty Name="RequiredDate"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QueryDistinctValue="DataGridItemProperty_QueryDistinctValue_Date"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CalculateDistinctValues="True" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridItemProperty Name="ShippedDate"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QueryDistinctValue="DataGridItemProperty_QueryDistinctValue_Date"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CalculateDistinctValues="True" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridItemProperty Name="Freight"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QueryDistinctValue="DataGridItemProperty_QueryDistinctValue_Range"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CalculateDistinctValues="True" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:DataGridCollectionViewSource.ItemProperties&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:DataGridCollectionViewSource&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp; &amp;lt;/Grid.Resources&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;xcdg:DataGridControl x:Name="OrdersGrid"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ItemsSource="{Binding Source={StaticResource cvs_orders}}"/&amp;gt;&lt;BR&gt;&amp;lt;/Grid&amp;gt;&lt;/P&gt;
&lt;P&gt;private void DataGridItemProperty_QueryDistinctValue_Date( object sender, QueryDistinctValueEventArgs e)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;if( e.DataSourceValue is DateTime )&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; e.DistinctValue = ( ( DateTime )e.DataSourceValue ).ToString( "MMMM" );&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;private void DataGridItemProperty_QueryDistinctValue_Range(object sender,QueryDistinctValueEventArgs e)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;if( e.DataSourceValue is decimal )&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; decimal value = ( decimal )e.DataSourceValue;&lt;BR&gt;&amp;nbsp;&amp;nbsp; if( value &amp;lt;= 100 )&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.DistinctValue = "0 - 100";&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp; else if( value &amp;gt; 100 &amp;amp;&amp;amp; value &amp;lt;= 500 )&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.DistinctValue = "101 - 500";&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.DistinctValue = "500+";&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;Beautifully simple &lt;img src="http://xceed.com/CS/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/P&gt;
&lt;P&gt;Version 3.2 also adds the ability for end users to provide filtering criteria at run time through the use of a "filter row", which can be added to the fixed or scrolling header and footer sections of a grid, group, or detail. In addition to supporting relation filters such as "contains", "equal to", and "greater than", among others, the filter row also supports conditional filters such as "AND" and "NOT", which allow a column to be filtered by more than one filter criterion. &lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://xceed.com/CS/blogs/dontpanic/FilterRow.png" align=left&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Another sought-after feature is built-in support for &lt;A class="" href="http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx" target=_blank&gt;Entity Framework&lt;/A&gt;. Although it was possible to use &lt;STRONG&gt;Entity Framework&lt;/STRONG&gt; with the previous version of the grid, version 3.2 makes this a whole lot simpler by automatically detecting Entity collections (&lt;A class="" href="http://msdn.microsoft.com/en-us/library/bb352821.aspx" target=_blank&gt;EntityCollection&amp;lt;TEntity&amp;gt;&lt;/A&gt;) and displaying their content as details. In the case where the reference to related Entity objects are not loaded, the &lt;STRONG&gt;QueryDetails&lt;/STRONG&gt; event, exposed by the &lt;STRONG&gt;EntityDetailDescription&lt;/STRONG&gt; class, can be handled to provide details for a data item.&amp;nbsp; For example, in the code snippet below, a query that will return the appropriate details for a parent item is executed and the &lt;STRONG&gt;Handled&lt;/STRONG&gt; property set to &lt;STRONG&gt;true&lt;/STRONG&gt; to indicate that the event was handled. &lt;/P&gt;
&lt;P&gt;private void EntityDetailDescription_QueryDetails( object sender, QueryEntityDetailsEventArgs e )&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Customer customer = ( Customer )e.ParentItem;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Since EntityFramework doesn't load automatically references to&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// other objects, we build a query that will include those objects.&lt;BR&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;// We start from the base query but we could have added restrictions&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to the query.&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ObjectQuery&amp;lt;Order&amp;gt; query = customer.Orders.CreateSourceQuery();&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;customer.Orders.Attach( query.Include( "Employee" ).Include( "Shipper" ) );&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;e.Handled = true;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;A feature that was lacking in the 3.1 implementation of data virtualization was grouping support. With version 3.2, this limitation is a thing of the past :) Now, unlike the other features I just mentioned, grouping in a virtualized collection view is not something for the feint of heart! But, if you know what data you are dealing with and with the help of the Data Virtualization sample, which provides a detailed example of how to implement grouping support, you should be up and grouping in no time. If not, contact our support department, that's what they are there for &lt;img src="http://xceed.com/CS/emoticons/emotion-5.gif" alt="Wink" /&gt;&lt;/P&gt;
&lt;P&gt;For those of you who are already using the virtualized collection view provided with Xceed DataGrid for WPF, you may be happy to learn that version 3.2 also provides built-in support for &lt;A class="" href="http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx" target=_blank&gt;IQueryable&lt;/A&gt; data sources through the &lt;STRONG&gt;DataGridVirtualizingQueryableCollectionView&lt;/STRONG&gt; and its XAML-proxy the &lt;STRONG&gt;DataGridVirtualizingQueryableCollectionViewSource&lt;/STRONG&gt;, which, by the way, earned its developer the "longest class name" award!&lt;/P&gt;
&lt;P&gt;A feature that has been implemented in version 3.2 whose lack caused a lot of frustration in previous versions, is automatic detection and support for foreign keys and enumerations. In previous versions, in order to display foreign key constraints, you had to write a lot of code, which, quite honestly, was time consuming and annoying to implement. In version 3.2, all that is a thing of the past (although you can still use your code if you want!). By default, foreign key constraints defined by a &lt;A class="" href="http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx" target=_blank&gt;DataTable&lt;/A&gt; or &lt;A class="" href="http://msdn.microsoft.com/en-us/library/system.data.dataview.aspx" target=_blank&gt;DataView&lt;/A&gt; used as a data source, as well as enums, can be automatically detected and displayed and edited, through a &lt;STRONG&gt;ComboBox&lt;/STRONG&gt;, as the corresponding value rather than its key. If you are dealing with a different type of source or would like to provide custom key/value mappings, you can do that too. Although it is recommended to always bind the grid to its data by-proxy of a &lt;STRONG&gt;DataGridCollectionView&lt;/STRONG&gt;[&lt;STRONG&gt;Source&lt;/STRONG&gt;] or any other data-grid collection view, it is not obligatory. When binding a grid directly to a source that contains foreign key constraints or enums and data-grid collection view is not used, it is still possible to display the value rather than the key of the constraints and enums; however, they must be defined manually by providing the appropriate foreign key configurations, and a &lt;STRONG&gt;ForeignKeyConverter &lt;/STRONG&gt;must be used in order to convert keys to values and back (see ReportsTo column in Example ).&lt;/P&gt;
&lt;P&gt;&amp;lt;Grid xmlns:xcdg="&lt;A href="http://schemas.xceed.com/wpf/xaml/datagrid"&gt;http://schemas.xceed.com/wpf/xaml/datagrid&lt;/A&gt;"&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;Grid.Resources&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;local:&lt;A class="" href="http://xceed.com/CS/blogs/dontpanic/OccupationToStringConverter.txt" target=_blank&gt;OccupationToStringConverter&lt;/A&gt; x:Key="occupationToStringConverter" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;local:&lt;A class="" href="http://xceed.com/CS/blogs/dontpanic/PersonForeignKeyConverter.txt" target=_blank&gt;PersonForeignKeyConverter&lt;/A&gt; x:Key="personForeignKeyConverter" /&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ObjectDataProvider x:Key="occupationValues"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MethodName="GetValues"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ObjectType="{x:Type sys:Enum}"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ObjectDataProvider.MethodParameters&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;x:Type TypeName="local:Occupation" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ObjectDataProvider.MethodParameters&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ObjectDataProvider&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;lt;/Grid.Resources&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp; &amp;lt;xcdg:DataGridControl x:Name="PersonsGrid"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ItemsSource="{Binding Source={x:Static Application.Current}, Path=Persons}"&amp;gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN:left;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridControl.Columns&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:Column FieldName="Occupation"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:Column.CellContentTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;DataTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TextBlock Text="{Binding Converter={StaticResource occupationToStringConverter}}" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/DataTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:Column.CellContentTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:Column.ForeignKeyConfiguration&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xcdg:ForeignKeyConfiguration ItemsSource="{Binding Source={StaticResource occupationValues}}"/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:Column.ForeignKeyConfiguration&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:Column&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:Column FieldName="ReportsTo"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:Column.CellContentTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;DataTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;StackPanel Orientation="Horizontal"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TextBlock Text="{Binding FirstName}" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TextBlock Text=" " /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TextBlock Text="{Binding LastName}" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/StackPanel&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/DataTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:Column.CellContentTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:Column.ForeignKeyConfiguration&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xcdg:ForeignKeyConfiguration ItemsSource="{Binding Source={x:Static Application.Current}, Path=Persons}"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ForeignKeyConverter="{StaticResource personForeignKeyConverter}"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ValuePath="PersonID"/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:Column.ForeignKeyConfiguration&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:Column&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:DataGridControl.Columns&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/xcdg:DataGridControl&amp;gt;&lt;BR&gt;&amp;lt;/Grid&amp;gt;&lt;/P&gt;
&lt;P&gt;Another feature that was often requested is support for unbound columns and data. Now, you may be wondering why I am referring to unbound columns AND unbound data. Good question. Initially, this feature was known as unbound columns; however, after it was implemented, we realized that&amp;nbsp; unbound columns and unbound data were two different things. Let me try to explain... "Unbound data" is data that can be "appended" to a data item through the use of unbound item properties, which are represented by the &lt;STRONG&gt;DataGridUnboundItemProperty&lt;/STRONG&gt; class. Unlike "unbound columns", which can be used to display non-data related information such as a label or controls that allow some sort of action to be carried out, unbound item properties can be used to provide additional data, such as calculated columns. If you are scratching your head at this point, don't worry, it is a lot simpler than it seems! Let me demonstrate:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Unbound Data&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;Grid xmlns:xcdg="&lt;A href="http://schemas.xceed.com/wpf/xaml/datagrid"&gt;http://schemas.xceed.com/wpf/xaml/datagrid&lt;/A&gt;"&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;Grid.Resources&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridCollectionViewSource x:Key="cvs_products"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Source="{Binding Source={x:Static Application.Current}, Path=Products}"&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridCollectionViewSource.ItemProperties&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridUnboundItemProperty Name="TotalUnitsValue"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataType="{x:Type sys:Double}"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; QueryValue="DataGridUnboundItemProperty_QueryValue" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:DataGridCollectionViewSource.ItemProperties&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:DataGridCollectionViewSource&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;local:CurrencyConverter x:Key="currencyConverter" /&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;lt;/Grid.Resources&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;xcdg:DataGridControl x:Name="OrdersGrid"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ItemsSource="{Binding Source={StaticResource cvs_products}}"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridControl.Columns&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:Column FieldName="TotalUnitsValue"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Title="Total Inventory"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:Column.CellContentTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;DataTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TextBlock Text="{Binding Converter={StaticResource currencyConverter}}" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/DataTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:Column.CellContentTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:Column&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:Column FieldName="Photo"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Visible="False" /&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:DataGridControl.Columns&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/xcdg:DataGridControl&amp;gt;&lt;BR&gt;&amp;lt;/Grid&amp;gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN:left;"&gt;private void DataGridUnboundItemProperty_QueryValue( object sender, DataGridItemPropertyQueryValueEventArgs e )&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;System.Data.DataRowView row = e.Item as System.Data.DataRowView;&lt;BR&gt;&amp;nbsp;if( row != null )&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; if( row[ "UnitsInStock" ] != DBNull.Value )&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.Value = ( double )( ( short )row[ "UnitsInStock" ] * ( decimal )row[ "UnitPrice" ] );&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Unbound Columns&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;Grid xmlns:xcdg="&lt;A href="http://schemas.xceed.com/wpf/xaml/datagrid"&gt;http://schemas.xceed.com/wpf/xaml/datagrid&lt;/A&gt;"&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;Grid.Resources&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridCollectionViewSource x:Key="cvs_products"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Source="{Binding Source={x:Static Application.Current}, Path=Products}" /&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;lt;/Grid.Resources&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;xcdg:DataGridControl x:Name="OrdersGrid"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ItemsSource="{Binding Source={StaticResource cvs_products}}"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridControl.Columns&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:UnboundColumn FieldName="EditRowColumn"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Width="30"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MinWidth="30"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MaxWidth="30"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:UnboundColumn.CellContentTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;DataTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Button Click="Button_Click"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Content="..." /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/DataTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:UnboundColumn.CellContentTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:UnboundColumn&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:Column FieldName="Photo"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Visible="False" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:DataGridControl.Columns&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/xcdg:DataGridControl&amp;gt;&lt;BR&gt;&amp;lt;/Grid&amp;gt;&lt;/P&gt;
&lt;P&gt;private void Button_Click( object sender, RoutedEventArgs e )&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; Cell cell = Cell.FindFromChild( sender as DependencyObject );&lt;/P&gt;
&lt;P&gt;&amp;nbsp; ProductsEditorWindow editor = new ProductsEditorWindow( DataGridControl.GetParentDataGridControl( cell ).GetItemFromContainer( cell.ParentRow ) as DataRowView );&lt;/P&gt;
&lt;P&gt;&amp;nbsp; editor.ShowDialog();&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;Notice that although both the &lt;STRONG&gt;UnboundColumn&lt;/STRONG&gt; and &lt;STRONG&gt;DataGridUnboundItemProperty&lt;/STRONG&gt; classes both use the term "unbound" they are not meant to be used together. Meaning that an unbound item property's corresponding column is a &lt;STRONG&gt;Column&lt;/STRONG&gt; and not an &lt;STRONG&gt;Unbound&lt;/STRONG&gt; column.&lt;/P&gt;
&lt;P&gt;A little feature, but one that has been often requested, is to enable and disable grouping and sorting on a per-column basis. If you are one of those who requested this feature, version 3.2 is what you need!&lt;/P&gt;
&lt;P&gt;So there you go! Version 3.2 is scheduled to be released on June 15th. So mark the date on your calendar!&lt;/P&gt;
&lt;P&gt;Any questions or comments? Feel free to post them in the comments section below.&lt;/P&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=21316" width="1" height="1"&gt;</description></item><item><title>Don't sacrifice function for looks!</title><link>http://xceed.com/CS/blogs/xamlhero/archive/2009/05/29/don-t-sacrifice-functionalities-for-looks.aspx</link><pubDate>Fri, 29 May 2009 15:13:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:21271</guid><dc:creator>Matt</dc:creator><slash:comments>0</slash:comments><description>&lt;P class=MsoNormal&gt;This is somewhat related to my &lt;A href="http://xceed.com/CS/blogs/xamlhero/archive/2009/02/10/because-you-can-animate-doesn-t-mean-you-should.aspx" target=_blank&gt;previous post&lt;/A&gt; about "less is more". Another thing that I've noticed over the years is that some websites or applications tend to give a priority to looks over function. There are some exceptions to this that obviously depend on the theme of the application or website. Now, WPF and Silverlight provide us with a lot of features to alter the visual appearance of an application and as I mentionned before: with great power comes great responsibility.&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;A lot of our clients have to wear the designer, artist, and programmer hat all at once. Not everyone has the chance to have an integrator and artist/designer working alongside. If you are just starting out in WPF or Silveright and do not have a lot of experience in design my first advice is this: don’t try to be cute. Design is hard and requires a lot of experience, you wouldn’t expect someone to start coding in C# and or VB.NET by improvising, well don’t expect you can easily improvise design ;-).&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;When I say “don’t sacrifice function over looks” it means elements placed on your application or website that require interaction should not be blended in your design in a way that they cannot be easily accessible. This might sound very basic; however, even the most advanced design companies make these fundamental mistakes. For example, here’s something Odi (@kosmatos) tweeted : “So who can tell which is currently selected in the "Public | Private" TOGGLE button? How do you know? http://twitpic.com/659sb”. And he’s right, the purpose of a ToggleButton is to easily determine if a button is currently toggled or not. When designing an application make sure your controls are easily accessible and that their visual representation respects the essence of the controls.&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;Another fundamental way to allow users to easily indentify an element that can be manipulated is by using contrasts. Make sure that what is important to the end users visually stands out. This is another point that may sound very basic to most of you; however, it is a detail that can be forgotten or ignored. Here’s a selected menu item from a very awesome website I visit:&lt;/P&gt;
&lt;P class=MsoNormal&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;IMG style="WIDTH:111px;HEIGHT:51px;" src="http://xceed.com/CS/blogs/xamlhero/getstarted.png" width=111 height=51&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;Bright orange on white is not the best way to make text stand out. Test your contrasts and make sure that important text or informationcan be easily read.&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;Regroup valuable information or sections currently important to the user. We faced this issue when developing our Resource Center. &amp;nbsp;We wanted to display a lot of information in a single form. For those who don’t know what the Resource Center looks like, here it is:&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;IMG title=undefined border=0 alt="" src="http://xceed.com/CS/blogs/xamlhero/resourcecenter.png" width=606 height=426&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;We have a main section in our circular listbox, we have News Headlines and Licensing Information. That’s a lot of content to throw at our users. So we have to guide our user eyes to what is important. The currently active section will have a big icon standout and the icon will be linked to the currently active section, in this case Getting Started, which is represented by a timer. One of the issues we had is that the news headline would have grabbed the user's attention too much when really this is not where we want them to initially look. So what we did is we made the text semi transparent until the user hovers over the section. We also decided to hide our scrollbar on the News section that would just be cumbersome to the user's eye. So with this, we hope that the users initially pay attention to the middle circular panel.&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;This is just some advice I’ve learned by working with our designer over the years. They are fundamental principles that we obviously did not invent. Those are related to the&amp;nbsp;Contrast, Repitetion, Alignment, Proximity (C.R.A.P.)&amp;nbsp;design principles&amp;nbsp;brought up by Robin Williams in his popular book &lt;A href="http://www.amazon.com/gp/product/1566091594/103-8332888-8605461?v=glance&amp;amp;n=283155#" target=_blank&gt;The Non-Designer’s&amp;nbsp;Design Book&lt;/A&gt;. You can do a quick google search for C.R.A.P. Web Design to find more information about this. Keep in mind that the C.R.A.P. Principles applies, in my opinion, to application design as well.&lt;/P&gt;
&lt;P class=MsoNormal&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&amp;nbsp;Questions or comments, feel free to send them either on twitter @mattd1980 or &lt;A href="mailto:drimonakosm@xceed.com"&gt;drimonakosm@xceed.com&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=21271" width="1" height="1"&gt;</description></item><item><title>How does Xceed DataGrid for WPF stack up against Microsoft’s?</title><link>http://xceed.com/CS/blogs/componentinsider/archive/2009/05/05/how-does-the-xceed-datagrid-stack-up-against-microsoft-s.aspx</link><pubDate>Tue, 05 May 2009 17:17:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:20727</guid><dc:creator>Odi [Xceed]</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Today I noticed this &lt;a title="Nigel Spencer on Xceed DataGrid for WPF" href="http://blog.spencen.com/2009/05/06/xceed-wpf-datagrid-ndash-part-1.aspx"&gt;blog post by Nigel Spencer&lt;/a&gt; discussing his experiences with both Microsoft's WPF datagrid and Xceed's. I liked that Nigel recognizes that any new datagrid coming out this year will be significantly behind in maturity. If you take a look at the &lt;a title="Xceed DataGrid for WPF releases / what's new" href="http://xceed.com/Grid_WPF_New.html"&gt;25 releases&lt;/a&gt; of Xceed's WPF grid so far, you'll see hundreds of improvements to the product over the 2.5 years it has been on the market. Not only would you have to live through that with any new datagrid coming out soon (or even in the past year), but the competition's pace will be slower. That's because Xceed's UI controls team, which used to make a variety of controls for Windows Forms, is now focused entirely on datagrids and hasn't spread its teams to design ribbons, charts and other WPF controls not directly related to datagrids.&lt;/p&gt;&lt;p&gt;Nigel also mentions the Microsoft WPF toolkit datagrid. Nice to see that he thinks we got a few things right that Microsoft might have missed in their v1. Here's a portion of his post:&lt;/p&gt;&lt;p&gt;&lt;i&gt;So how does the Xceed DataGrid stack up against Microsoft’s? Here are some of the benefits that I’ve found so far:&lt;/i&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a target="_blank" href="http://blog.spencen.com/2009/04/30/problems-binding-to-selectedvalue-with-microsoftrsquos-wpf-datagrid.aspx"&gt;&lt;i&gt;Binding to SelectedItem&lt;/i&gt;&lt;/a&gt;&lt;i&gt; works just fine. &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;ReadOnly properties support at Grid, Column and &lt;/i&gt;&lt;a target="_blank" href="http://blog.spencen.com/2009/04/25/readonly-rows-and-cells-in-a-datagrid.aspx"&gt;&lt;i&gt;Row level&lt;/i&gt;&lt;/a&gt;&lt;i&gt;. &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;CheckBox column allows simple styling &lt;/i&gt;&lt;a target="_blank" href="http://blog.spencen.com/2009/04/19/when-is-a-wpf-datagrid-readonly-checkbox-not-readonly.aspx"&gt;&lt;i&gt;whilst preserving ReadOnly&lt;/i&gt;&lt;/a&gt;&lt;i&gt; value. &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Automatically supports current selection and &lt;/i&gt;&lt;a target="_blank" href="http://blog.spencen.com/2009/04/26/editing-indicator-in-datagrid-row-header.aspx"&gt;&lt;i&gt;edit indicators&lt;/i&gt;&lt;/a&gt;&lt;i&gt; in the row header. &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;The grid theme matches the OS theme out of the box. This is how it should be. Sure the grid can be custom styled to suit but it only makes sense that by default the grid should match the look and feel of the standard themed controls. &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;When auto-generating column headers it correctly uses any System.ComponentModel.DisplayName attributes that have been applied to the underlying class. &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;There are lots of options at grid and column level that determine how a cell should enter edit mode. This is very useful for columns such as CheckBox columns where requiring a click to enter edit mode can be highly annoying (since the user would expect the click to toggle the checkbox). &lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Here are a couple of things Nigel suggests we could improve in an upcoming version:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;An easier mechanism for custom sorting. Rather than having to specific custom IComparer implemenations often it is easier to refer to an unbound property that contains the raw data. Like Microsoft’s SortMemberPath property. Hmm… I wonder if you could use a generic SortComparer to provide the same functionality?&lt;/i&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Smaller assembly size. I know these days 2.08Mb shouldn’t be an issue but for my current contract it is. We have a ClickOnce application that is deployed to machines in remote country areas. Many of these machines are still using dial-up! Adding another another 2Mb to our current 4.5Mb total is a decision not to be made too lightly. [We’ve already been burned with a ridiculously bloated NHibernate assembly (1.6Mb)]&lt;/i&gt; &lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Thanks for the suggestions. You can be sure the team has noticed them.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=20727" width="1" height="1"&gt;</description><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/WPF/default.aspx">WPF</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/WPF+Toolkit/default.aspx">WPF Toolkit</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/DataGrid/default.aspx">DataGrid</category></item><item><title>I notify, we notify, we all... Wait. No we don't!</title><link>http://xceed.com/CS/blogs/dontpanic/archive/2009/04/01/i-notify-we-notify-we-all-wait-no-we-don-t.aspx</link><pubDate>Wed, 01 Apr 2009 18:57:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:19837</guid><dc:creator>Jenny</dc:creator><slash:comments>4</slash:comments><description>&lt;p&gt;Our support department often answers questions from customers who are wondering why grouping, sorting, and statistical functions are not updated when items in the underlying data source are changed, even though they are using a grid bound to an &lt;a class="" target="_blank" href="http://msdn.microsoft.com/en-us/library/ms668604.aspx"&gt;ObservableCollection&lt;/a&gt;. After all, an ObservableCollection is supposed to observe its content, isn't it? Well, actually, an ObservableCollection observes its items as a whole. In other words, it only notices when items are added or removed, not when the values of its items change, even if those items implement &lt;a class="" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx"&gt;INotifyPropertyChanged&lt;/a&gt;. In comparison, a &lt;a class="" target="_blank" href="http://msdn.microsoft.com/en-us/library/ms132679.aspx"&gt;BindingList&lt;/a&gt; DOES listen to INotifyPropertyChanged, and therefore, if its items are modified, the changes will be reflected in the grid. As a result grouping, sorting, and statistical functions will be updated.&lt;/p&gt;&lt;p&gt;&lt;br&gt;This nifty&amp;nbsp;animation illustrates the differences between the two.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;/p&gt;&lt;center&gt;&lt;object height="425" width="575"&gt;&lt;param name="movie" value="Anim00.swf"&gt;&lt;embed width="575" height="425" src="http://xceed.com/CS/blogs/dontpanic/Anim00.swf"&gt;&lt;/object&gt;&lt;/center&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;Now, if you apply these changes through the grid—in other words, edit an item in the grid—you don't have to worry about it.&lt;br&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=19837" width="1" height="1"&gt;</description></item><item><title>WPF vs. Silverlight: it's the wrong debate</title><link>http://xceed.com/CS/blogs/componentinsider/archive/2009/03/23/wpf-vs-silverlight-it-s-the-wrong-debate.aspx</link><pubDate>Mon, 23 Mar 2009 18:43:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:19534</guid><dc:creator>Odi [Xceed]</dc:creator><slash:comments>3</slash:comments><description>&lt;P&gt;The question isn't "Wither WPF?" or "Will Silverlight marginalize WPF?"&lt;/P&gt;
&lt;P&gt;With announcements at MIX09 that Silverlight will gain many of the key features that made WPF special, developers, component vendors and the media are now concerned more than ever about the future of WPF.&lt;/P&gt;
&lt;P&gt;It's not WPF they should be worried about.&lt;/P&gt;
&lt;P&gt;When you elect to use Silverlight, you are really choosing to forego the full .NET framework and everything that goes along with it that isn't in the latest flavour of Silverlight. Tons of useful capabilities, thousands of APIs, file system access, you name it. And also lots of new .NET 4.0 capabilities as well, like dynamic languages, MEF, parallel programming, hard-core multi-touch support, and so on, that aren't in Silverlight.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Silverlight isn't just a compact, streamlined version of WPF, it is a compact, streamlined version of the entire .NET framework.&lt;/B&gt; To say the debate is about whether or not you want to forego some particular WPF features that aren't in Silverlight 3 is focusing on too fine a point. The issue at hand, and the choice being made when selecting the platform to use, is much larger than that.&lt;/P&gt;
&lt;P&gt;Think about this question instead: Do you think there will be a significant amount of developers that will continue to use the full .NET framework for their projects? Or will they be using the more cross-platform, quick-to-install Silverlight, whether they are targeting the web or not? Consider both run-of-the-mill business apps which Silverlight 3 tries to easily enable, as well as other kinds of apps, such as “media” apps like movie players and games.&lt;/P&gt;
&lt;P&gt;If your answer is that, Yes, there will still be many developers using the full .NET framework instead of Silverlight, then you have nothing to worry about when it comes to WPF. WPF is arguably at the point where it knocks the socks off of Windows Forms. With .NET 4, Visual Studio 2010 and Expression Blend 3, WPF will be the UI framework "par excellence" for those using the full .NET framework.&lt;/P&gt;
&lt;P&gt;If your answer is No, you think very few developers will resist Silverlight's temptations such as being able to run on OS X and potentially other platforms, then it isn't just WPF that you should be concerned about. It's the entire .NET framework, even the Windows platform itself.&lt;/P&gt;
&lt;P&gt;After all, if there weren't enough reasons left to develop specifically for Windows, well, all that would be left going for Windows would be features. There would be fewer and fewer Windows-only apps. That seems suicidal to me, Microsoft wouldn’t let it happen without a fight. What did Steve Jobs recently say? He insists it’s the apps that will differentiate Apple’s latest product, the iPhone, from the competition.&lt;/P&gt;
&lt;P&gt;So what’s my answer?&lt;/P&gt;
&lt;P&gt;Yes, moving forward, there will still be plenty of developers that choose to use the full .NET framework, for not-so-run-of-the-mill business apps as well as for a million and one other kinds of apps. I'm talking about a pretty big '&lt;A class="" title='Definition of "The Long Tail"' href="http://en.wikipedia.org/wiki/The_Long_Tail"&gt;Long Tail&lt;/A&gt;'. And many of those apps will need a UI, and that means WPF, not Silverlight. Sure, Silverlight 3 has multi-platinum superstar potential, but WPF should get a few &lt;A class="" title="Gold record" href="http://en.wikipedia.org/wiki/Gold_record"&gt;gold records&lt;/A&gt; as well. I think it’s far from withering away or being marginalized, as&amp;nbsp;many are worried about.&lt;/P&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=19534" width="1" height="1"&gt;</description><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/WPF/default.aspx">WPF</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/.NET+4.0/default.aspx">.NET 4.0</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/Silverlight+3/default.aspx">Silverlight 3</category></item><item><title>Mix09!</title><link>http://xceed.com/CS/blogs/xamlhero/archive/2009/03/13/mix09.aspx</link><pubDate>Fri, 13 Mar 2009 13:47:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:19265</guid><dc:creator>Matt</dc:creator><slash:comments>1</slash:comments><description>&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-CA;"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Next week I'm headed to Vegas to participate in this much anticipated event. I'm really looking forward to meet some of you and I will be hard to miss with my white Xceed polo ;-) so don't be a stranger! The sessions I will be attending will be mostly those concerning Silverlight 3 and WPF. I'm pretty excited about What's New in Windows Presentation Foundation (WPF) 4 by Kevin Gjerstad and Mark Wolson-Thomas, I've been working with WPF over the past three years and have pretty high expectations about this new version. I hear XAML will change a bit, which concerns me considering most of my coding time is done in XAML for the DataGrid or our Silverlight products.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-CA;"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-CA;"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;My expectations for Mix09 are to a) learn new stuff and b) get inspired! It'll be interesting to see what others do and what Microsoft has planned for the future. I'll see you guys and gals there! I'll probably be tweeting quite a bit about what I am doing while I’m there so feel free to follow me at &lt;A class="" title=twitter.com/mattd1980 href="http://twitter.com/mattd1980"&gt;twitter.com/mattd1980&lt;/A&gt;. Oh and I'll be attending the TAO party with Catherine, Charles, and Odi on Wednesday night! &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=19265" width="1" height="1"&gt;</description></item><item><title>From WinForms to WPF – PART 3: Master/Detail</title><link>http://xceed.com/CS/blogs/dontpanic/archive/2009/02/26/from-winforms-to-wpf-part-3-master-detail.aspx</link><pubDate>Thu, 26 Feb 2009 19:42:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:18941</guid><dc:creator>Jenny</dc:creator><slash:comments>7</slash:comments><description>&lt;P&gt;Rarely has a feature sparked so much debate at Xceed as hierarchical master/detail. And I think that this feature made it in both the &lt;A class="" href="http://xceed.com/Grid_WinForms_Intro.html" target=_blank&gt;WinForms&lt;/A&gt; and &lt;A class="" href="http://xceed.com/Grid_WPF_Intro.html" target=_blank&gt;WPF&lt;/A&gt; grids solely on the fact that our customer base kept requesting it. So here we are, a couple of years later, with a feature that when used appropriately can be a valid way to display information, but that can easily spiral into an incomprehensible mess. What I mean by this is that one level of detail information per master row is perfectly acceptable and legible, but throw in grouping and things start getting ugly. Add more than one detail level as well as grouping and you are in for a world of confusion. So whether you agree with me or not, let’s get started!&lt;/P&gt;
&lt;P&gt;In order to be able to display master/detail data, the grid must be bound through a &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridCollectionView.html" target=_blank&gt;DataGridCollectionView&lt;/A&gt; to an underlying data source that contains hierarchical detail relations (not 100% true, but I will get to that later). The content of those relations will be displayed as the details of the data items in a grid or in another detail. Each relation is represented by a &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridDetailDescription.html" target=_blank&gt;DataGridDetailDescription&lt;/A&gt;, which will automatically be created for:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Every &lt;A class="" href="http://msdn.microsoft.com/en-us/library/system.data.datarelation.aspx" target=_blank&gt;DataRelation&lt;/A&gt; in a &lt;A class="" href="http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx" target=_blank&gt;DataTable&lt;/A&gt; (&lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataRelationDetailDescription.html" target=_blank&gt;DataRelationDetailDescription&lt;/A&gt;)&lt;/LI&gt;
&lt;LI&gt;Data items that implement the &lt;A class="" href="http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.aspx" target=_blank&gt;IEnumerable&lt;/A&gt; interface (&lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.EnumerableDetailDescription.html" target=_blank&gt;EnumerableDetailDescription&lt;/A&gt;)&lt;/LI&gt;
&lt;LI&gt;Data items that implement the &lt;A class="" href="http://msdn.microsoft.com/en-us/library/system.componentmodel.ilistsource.aspx" target=_blank&gt;IListSource&lt;/A&gt; interface (&lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.ListSourceDetailDescription.html" target=_blank&gt;ListSourceDetailDescription&lt;/A&gt;)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Detail descriptions can also be explicitly defined by adding them to &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridCollectionViewBase~DetailDescriptions.html" target=_blank&gt;DetailDescriptions&lt;/A&gt; collection of the &lt;STRONG&gt;DataGridCollectionView&lt;/STRONG&gt; to which the grid is bound.&lt;/P&gt;
&lt;P&gt;In order for the detail to appear in the grid, the grid’s &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridControl~AutoCreateDetailConfigurations.html" target=_blank&gt;AutoCreateDetailConfigurations&lt;/A&gt; property must be set to true. At this point, you are probably wondering what the difference is between a “detail description” and a “detail configuration”, so I will explain it before continuing:&lt;/P&gt;
&lt;P&gt;A “detail description” is the data representation of a detail relation while a “detail configuration” is its visual representation.&amp;nbsp; See? Easy. &lt;img src="http://xceed.com/CS/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/P&gt;
&lt;P&gt;So let’s see how this would look in code:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;DataGridCollectionView view = new DataGridCollectionView( this.Orders.DefaultView );&lt;BR&gt;DataGridControl grid = new DataGridControl();&lt;/P&gt;
&lt;P&gt;grid.AutoCreateDetailConfigurations = true;&lt;/P&gt;
&lt;P&gt;grid.ItemsSource = view;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;If you have been following this series of posts, you knowthat “Orders” is a &lt;STRONG&gt;DataTable&lt;/STRONG&gt; from the Northwind &lt;A class="" href="http://msdn.microsoft.com/en-us/library/system.data.dataset.aspx" target=_blank&gt;DataSet&lt;/A&gt; that also happens to contain a &lt;STRONG&gt;DataRelation&lt;/STRONG&gt; (remember, these are automatically detected) to the OrderDetails &lt;STRONG&gt;DataTable&lt;/STRONG&gt;. &lt;/P&gt;
&lt;P&gt;In XAML, it would look like the following: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;lt;Grid xmlns:xcdg="&lt;A href="http://schemas.xceed.com/wpf/xaml/datagrid"&gt;http://schemas.xceed.com/wpf/xaml/datagrid&lt;/A&gt;"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;Grid.Resources&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridCollectionViewSource x:Key="cvs_orders"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Source="{Binding Path=Orders}"/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/Grid.Resources&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;lt;xcdg:DataGridControl x:Name="OrdersGrid"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ItemsSource="{Binding Source={StaticResource cvs_orders}}"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AutoCreateDetailConfigurations="True"/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;lt;/Grid&amp;gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Notice that the &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridCollectionViewSource.html" target=_blank&gt;DataGridCollectionViewSource&lt;/A&gt; is used in exactly the same way to display master/detail data as it is to display data that does not have relations, that is, when you let the automatic detection of detail relations do its thing. Now, if you want to intervene in this process, you are more than welcome to do so. Here’s how.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Detail Descriptions&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Every detail description must have a unique, identifying relation name that can be provided through its &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridDetailDescription~RelationName.html" target=_blank&gt;RelationName&lt;/A&gt; property and that will be used by detail configurations to identify which description their configuration will be applied to. If the detail descriptions are automatically created, their relation name will be extracted from the underlying source or a default one will be provided. If they are explicitly provided, then their relation name must also be explicitly set.&lt;/P&gt;
&lt;P&gt;The &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridCollectionViewSource~AutoCreateDetailDescriptions.html" target=_blank&gt;AutoCreateDetailDescriptions &lt;/A&gt;property of the &lt;STRONG&gt;DataGridCollectionView&lt;/STRONG&gt; class determines whether detail descriptions are automatically created when a data relation is encountered in the data source and can only be set at construction time. &lt;/P&gt;
&lt;P&gt;OK, enough copy and paste from the documentation. Let’s look at some code that changes the title that will be used to represent the resulting details in the &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.HierarchicalGroupByControl.html" target=_blank&gt;HierarchicalGroupByControl&lt;/A&gt; and in other locations where the detail title is displayed:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;view.DetailDescriptions[ "OrdersOrderDetails" ].Title = "Order Details";&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;In XAML:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&amp;lt;xcdg:DataGridCollectionViewSource.DetailDescriptions&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataRelationDetailDescription RelationName="OrdersOrderDetails" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Title="Order Details"/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;lt;/xcdg:DataGridCollectionViewSource.DetailDescriptions&amp;gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now, if we were to bypass the automatic creation of the detail descriptions, it would be necessary to create the detail description and provide it to the &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridCollectionViewBase~DetailDescriptions.html" target=_blank&gt;DetailDescriptions&lt;/A&gt; collection of the &lt;STRONG&gt;DataGridCollectionView&lt;/STRONG&gt; before it can be accessed. Of course, adding it to the collection with its &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridDetailDescription~Title.html" target=_blank&gt;Title&lt;/A&gt; property already set is probably a better idea. &lt;img src="http://xceed.com/CS/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;DataGridCollectionView view = new DataGridCollectionView( this.Orders.DefaultView, typeof( System.Data.DataRowView ), true, false );&lt;/P&gt;
&lt;P&gt;DataRelationDetailDescription relation = new DataRelationDetailDescription();&lt;BR&gt;relation.RelationName = "OrdersOrderDetails";&lt;BR&gt;relation.Title = "Order Details";&lt;/P&gt;
&lt;P&gt;view.DetailDescriptions.Add( relation );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;And now the XAML version, which does not do much in this case since we only have one detail relation; however, if the source were to contain more than one relation, by setting the &lt;STRONG&gt;AutoCreateDetailDescriptions&lt;/STRONG&gt; property to false, only the “OrdersOrderDetails” relation would have been created.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;lt;xcdg:DataGridCollectionViewSource x:Key="cvs_orders"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Source="{Binding Path=Orders}"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AutoCreateDetailDescriptions="False"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridCollectionViewSource.DetailDescriptions&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataRelationDetailDescription RelationName="OrdersOrderDetails" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Title="Order Details"/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:DataGridCollectionViewSource.DetailDescriptions&amp;gt;&lt;BR&gt;&amp;lt;/xcdg:DataGridCollectionViewSource&amp;gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Sibling and Child Detail Descriptions&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Not only can each detail description can have one or more sibling detail descriptions (they will be contained in the same &lt;STRONG&gt;DetailDescriptions&lt;/STRONG&gt; collection), they can also have one or more child detail descriptions, and so on and so forth. &lt;/P&gt;
&lt;P&gt;Now I won’t go into detail about sibling and child detail descriptions. Just keep in mind that they work like the first-level detail descriptions, and that each has its own &lt;STRONG&gt;DetailDescriptions&lt;/STRONG&gt; collection.&lt;/P&gt;
&lt;P&gt;Ok, so now you know how to get your detail data displayed in a grid, and you know the difference between a detail description and a detail configuration.Let’s take a look at how to use the detail configurations to change the look of the details.&lt;/P&gt;
&lt;P&gt;I have the sudden urge to count the number of times I have written the word “detail” so far...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Detail Configurations&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;As I previously mentioned, detail descriptions are the &lt;U&gt;data&lt;/U&gt; representation of detail relations while detail configurations are their &lt;U&gt;visual&lt;/U&gt; representation. Each detail that results from a detail description is configured according to its corresponding detail configuration, which is identified by its relation name (the same relation name that was used for or extrapolated by the corresponding detail description). By default, a detail configuration that contains a &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.ColumnManagerRow.html" target=_blank&gt;ColumnManagerRow&lt;/A&gt; and a &lt;A class="" href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.aspx" target=_blank&gt;TextBlock&lt;/A&gt; containing the detail title will be applied to all resulting details. Now, you can decide to change the configuration of all details, regardless of their level, through the grid’s &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridControl~DefaultDetailConfiguration.html" target=_blank&gt;DefaultDetailConfiguration&lt;/A&gt; property, or you can provide a detail configuration for a specific detail level through the grid’s &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridControl~DetailConfigurations.html" target=_blank&gt;DetailConfigurations&lt;/A&gt; collection.&lt;/P&gt;
&lt;P&gt;Before I continue, I want to explain the difference between the default detail configuration and the configurations contained in the configuration collection. The main difference is their type: the &lt;STRONG&gt;DefaultDetailConfiguration&lt;/STRONG&gt; property expects a &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DefaultDetailConfiguration.html" target=_blank&gt;DefaultDetailConfiguration&lt;/A&gt; while the &lt;STRONG&gt;DetailConfigurations&lt;/STRONG&gt; collection expects &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DetailConfiguration.html" target=_blank&gt;DetailConfiguration&lt;/A&gt; types. Why? Well, since there is a direct one-to-one relation between a detail description and a detail configuration, we did not think it was a good idea to expose properties, such as &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DetailConfiguration~RelationName.html" target=_blank&gt;RelationName&lt;/A&gt; and &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DetailConfiguration~Title.html" target=_blank&gt;Title&lt;/A&gt; in the default detail configuration,since these properties could not be applied to all. So we decided to create the &lt;STRONG&gt;DefaultDetailConfiguration&lt;/STRONG&gt; class, which only exposes the properties that can be applied to all details indiscriminately.&lt;/P&gt;
&lt;P&gt;So let’s take a look at how we could use the default detail description to provide an &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.InsertionRow.html" target=_blank&gt;InsertionRow&lt;/A&gt; in the footers of every detail:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;DataTemplate template = new DataTemplate();&lt;BR&gt;template.VisualTree = new FrameworkElementFactory( typeof( InsertionRow ) );&lt;/P&gt;
&lt;P&gt;DefaultDetailConfiguration defaultConfiguration = new DefaultDetailConfiguration();&lt;BR&gt;defaultConfiguration.Footers.Add( template );&lt;/P&gt;
&lt;P&gt;grid.DefaultDetailConfiguration = defaultConfiguration;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;And the XAML:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;lt;xcdg:DataGridControl.DefaultDetailConfiguration&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DefaultDetailConfiguration&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DefaultDetailConfiguration.Footers&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;DataTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:InsertionRow&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/DataTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:DefaultDetailConfiguration.Footers&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:DefaultDetailConfiguration&amp;gt;&lt;BR&gt;&amp;lt;/xcdg:DataGridControl.DefaultDetailConfiguration&amp;gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;BR&gt;Now if we were to explicitly provide a detail configuration for a specific detail relation, the default detail configuration would be ignored and the explicit detail configuration would be used. So let’s see how that would look:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;grid.AutoCreateDetailConfigurations= false;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;DetailConfiguration configuration = new DetailConfiguration();&lt;BR&gt;configuration.RelationName = "OrdersOrderDetails";&lt;BR&gt;configuration.Title = "Order Details";&lt;/P&gt;
&lt;P&gt;// Do not use the default headers ( TextBlock andColumnManagerRow )&lt;BR&gt;configuration.UseDefaultHeadersFooters = false;&lt;/P&gt;
&lt;P&gt;DataTemplate cmrTemplate = new DataTemplate();&lt;BR&gt;cmrTemplate.VisualTree = new FrameworkElementFactory( typeof( ColumnManagerRow) );&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;configuration.Headers.Add( cmrTemplate );&lt;BR&gt;grid.DetailConfigurations.Add( configuration );&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;XAML:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;lt;xcdg:DataGridControl.DetailConfigurations&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;xcdg:DetailConfiguration RelationName="OrdersOrderDetails"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Title="Order Details"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UseDefaultHeadersFooters="False"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DetailConfiguration.Headers&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;DataTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:ColumnManagerRow/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/DataTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:DetailConfiguration.Headers&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/xcdg:DetailConfiguration&amp;gt;&lt;BR&gt;&amp;lt;/xcdg:DataGridControl.DetailConfigurations&amp;gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;In this situation there is one MAJOR difference between the code and the XAML: in code, the value of the &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridControl~AutoCreateDetailConfigurations.html" target=_blank&gt;AutoCreateDetailConfigurations &lt;/A&gt;property (which I will refer to as &lt;STRONG&gt;ACDC&lt;/STRONG&gt; from now on because you can’t get a better acronym) is set to false, while in XAML, its value is of no importance in this situation. Let me explain: in XAML, when the &lt;STRONG&gt;ACDC&lt;/STRONG&gt; property is set to true, the &lt;STRONG&gt;DetailDescriptions&lt;/STRONG&gt; collection will be automatically populated with the appropriate detail configurations, and any items that are added to the collection will be “linked” to the existing item in the collection. If set to false (still in XAML), the collection will not automatically be populated, but by defining a configuration in the collection, it&amp;nbsp;is&amp;nbsp;also added at the same time. In code, as I have painstakingly learned, the &lt;STRONG&gt;ACDC&lt;/STRONG&gt; property takes on a different personality... sort of... I have already explained that, when set to true, detail configurations will automatically be created and added to the &lt;STRONG&gt;DetailConfigurations&lt;/STRONG&gt; collection. BUT what is not so obvious is that setting values of properties on the automatically created detail configuration does not provide the same result as creating a new &lt;STRONG&gt;DetailConfiguration&lt;/STRONG&gt; for the specific detail relation. So, if &lt;STRONG&gt;ACDC&lt;/STRONG&gt; remains true, you will need to replace the one that was automatically created with the new one. So to keep things simple, I would suggest you set the &lt;STRONG&gt;ACDC&lt;/STRONG&gt; property to false and add the &lt;STRONG&gt;DetailConfiguration&lt;/STRONG&gt; to the &lt;STRONG&gt;DetailConfigurations&lt;/STRONG&gt; collection.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Custom Detail Descriptions&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Remember in the first few paragraphs when I said that it was not 100% true that a data source must contain detail relations in order to display detail data? What I meant by that is that although the most common types of detail relations are automatically detected, it is also possible to create and use custom detail descriptions that will return detail items for a parent item, whatever the definition of the detail relation is.&lt;/P&gt;
&lt;P&gt;Custom detail descriptions can be created by deriving from the &lt;STRONG&gt;DataGridDetailDescription&lt;/STRONG&gt; class and overriding its &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridDetailDescription~GetDetailsForParentItem.html" target=_blank&gt;GetDetailsForParentItem&lt;/A&gt; method to return the desired details for a data item. Now the detail data returned can be anything, as long as it is at least an &lt;STRONG&gt;IEnumerable&lt;/STRONG&gt;. If a data item does not have detail data, simply return null.&lt;/P&gt;
&lt;P&gt;I will not go into details about how to create a custom detail description, so if you want an example, you can take a look at the “&lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Custom_Detail_Descriptions.html" target=_blank&gt;Custom Detail Descriptions&lt;/A&gt;” topic in the documentation.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What Now?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This post ended up being much longer than I had originally anticipated! So if you read all the way to the end and have any questions or would like more information, please post it here or in the forums. &lt;img src="http://xceed.com/CS/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/P&gt;
&lt;P&gt;For those of you who are interested, I wrote “detail” 156 times.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=18941" width="1" height="1"&gt;</description><enclosure url="http://xceed.com/CS/blogs/dontpanic/attachment/18941.ashx" length="9347" type="application/x-zip-compressed" /><category domain="http://xceed.com/CS/blogs/dontpanic/archive/tags/Tutorial/default.aspx">Tutorial</category><category domain="http://xceed.com/CS/blogs/dontpanic/archive/tags/Master_2F00_Detail/default.aspx">Master/Detail</category></item><item><title>Animation in xaml to get you started.</title><link>http://xceed.com/CS/blogs/xamlhero/archive/2009/02/16/animation-in-xaml-to-get-you-started.aspx</link><pubDate>Mon, 16 Feb 2009 16:14:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:18643</guid><dc:creator>Matt</dc:creator><slash:comments>0</slash:comments><description>&lt;div&gt;My previous post was xamlless so I thought I'd give some basic examples to get you started if you're not familiar with animations.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;First I'll show you how to create this smooth translate and opacity animation and how to tweak it to what you want. Here's the storyboard I declared in my project resources :&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;Storyboard x:Key="showItemsStoryboard"&gt;&lt;/div&gt;&lt;div&gt;  &amp;lt;DoubleAnimation &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="WHITE-SPACE:pre;"&gt;&lt;/span&gt;      Storyboard.TargetProperty="Opacity"&lt;/div&gt;&lt;div&gt;                              DecelerationRatio="0.5"&lt;/div&gt;&lt;div&gt;                              To="1"&lt;/div&gt;&lt;div&gt;                              Duration="00:00:00.400"/&gt;         &lt;/div&gt;&lt;div&gt;  &amp;lt;DoubleAnimation &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="WHITE-SPACE:pre;"&gt;&lt;/span&gt;      Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"&lt;/div&gt;&lt;div&gt;                              To="0"&lt;/div&gt;&lt;div&gt;                              DecelerationRatio="0.5"&lt;/div&gt;&lt;div&gt;                              Duration="00:00:00.400"/&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/Storyboard&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;There are various ways you can do this but I prefer using a more generic approach where I will not be dependent on the type of object I will be animating, hence the UIElement.RenderTransform. You could also set this explicitly by using the Storyboard.TargetName property and naming (x:Name) your TranslateTransform, which would look like this : &lt;br&gt;&lt;br&gt; &amp;lt;DoubleAnimation &lt;div&gt;&lt;span class="Apple-tab-span" style="WHITE-SPACE:pre;"&gt;&lt;/span&gt;                              Storyboard.TargetName="myTranslate"&lt;/div&gt;&lt;div&gt;                              Storyboard.TargetProperty="X"&lt;/div&gt;&lt;div&gt;                              To="0"&lt;/div&gt;&lt;div&gt;                              DecelerationRatio="0.5"&lt;/div&gt;&lt;div&gt;                              Duration="00:00:00.400"/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;  &lt;/div&gt;&lt;div&gt;Either way, it does not really change anything for the current example. Now, the only thing left is to make sure the object you will be animating has a TranslateTransform attached and its opacity set to 0 :&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;TextBlock Opacity="0"&gt;&lt;/div&gt;&lt;div&gt; &amp;lt;TextBlock.RenderTransform&gt;&lt;/div&gt;&lt;div&gt;    &amp;lt;TranslateTransform X="-15"/&gt;&lt;/div&gt;&lt;div&gt; &amp;lt;/TextBlock.RenderTransform&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/TextBlock&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Your control is now ready to be animated, for testing purposes you can just add the following code in your xaml :&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt; &amp;lt;TextBlock.Triggers&gt;&lt;/div&gt;&lt;div&gt;    &amp;lt;EventTrigger RoutedEvent="TextBlock.Loaded"&gt;&lt;/div&gt;&lt;div&gt;       &amp;lt;EventTrigger.Actions&gt;&lt;/div&gt;&lt;div&gt;        &amp;lt;BeginStoryboard Storyboard="{StaticResource showItemsStoryboard}"/&gt;&lt;/div&gt;&lt;div&gt;       &amp;lt;/EventTrigger.Actions&gt;&lt;/div&gt;&lt;div&gt;    &amp;lt;/EventTrigger&gt;&lt;/div&gt;&lt;div&gt; &amp;lt;/TextBlock.Triggers&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;There are various elements you can play with to get the effect you want, at this point it's just a matter of changing the duration along with the Acceleration or DecelerationRatio and the TranslateTransform X value. Keep in mind that in a lot of cases a simple Opacity animation should be enough without adding the translate. The key is to not over do it &lt;img src="http://xceed.com/CS/emoticons/emotion-1.gif" alt="Smile" /&gt;.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Another fun yet dangerous (in a design point of view) thing to play with when working with animation, is the ScaleTransform. If you read my &lt;a class="" target="_blank" href="http://xceed.com/CS/blogs/xamlhero/archive/2009/02/10/because-you-can-animate-doesn-t-mean-you-should.aspx"&gt;previous post&lt;/a&gt; you will understand why. ScaleTransform animation surfs on the thin line between corny and cool. Scaling elements can be intresting in splash screens or when you initially layout your elements. Here is an example : &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt; &amp;lt;DoubleAnimation Storyboard.TargetProperty="Opacity"&lt;/div&gt;&lt;div&gt;                          To="1"&lt;/div&gt;&lt;div&gt;                          Duration="00:00:00.400"/&gt;         &lt;/div&gt;&lt;div&gt;         &amp;lt;DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)"&lt;/div&gt;&lt;div&gt;                          To="1"&lt;/div&gt;&lt;div&gt;                          Duration="00:00:00.400"/&gt;&lt;/div&gt;&lt;div&gt;         &amp;lt;DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)"&lt;/div&gt;&lt;div&gt;                          To="1"&lt;/div&gt;&lt;div&gt;                          Duration="00:00:00.400"/&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Make sure your element has both the opacity set to 0 and has a ScaleTransform attached : &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;TextBlock Text="Hello World"&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="WHITE-SPACE:pre;"&gt;&lt;/span&gt;  Opacity="0"&gt;&lt;/div&gt;&lt;div&gt; &amp;lt;TextBlock.RenderTransform&gt;&lt;/div&gt;&lt;div&gt;   &amp;lt;ScaleTransform ScaleX="0.75" ScaleY="0.75"/&gt;&lt;/div&gt;&lt;div&gt; &amp;lt;/TextBlock.RenderTransform&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/TextBlock&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I would advise against starting with a ScaleX and ScaleY at 0 as the effect will be too drastic. You can try it out and see what I mean. &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Just to demonstrate what you could do :&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/1G9nTNGv5x8&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed mce_src="http://www.youtube.com/v/1G9nTNGv5x8&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344" src="http://www.youtube.com/v/1G9nTNGv5x8&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;/object&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;So how does that all tie in the datagrid? Well, it's really up to you and your creativity. An easy example would be to use an animation like a scaleTransform in a cell's error style. If some data is invalid, you could then scale it to bring the information to the user's attention. &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;If you want to try this out, create a new Style with TargetType xcdg:DataCell (assuming you added Xceed's namespace with xcdg) give it a key like : myCellErrorStyle&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;In this style you can add something like this (tweak it to what you want) :&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt; &amp;lt;Setter Property="RenderTransformOrigin"&lt;/div&gt;&lt;div&gt;              Value="0.5,0.5"/&gt;&lt;/div&gt;&lt;div&gt;      &lt;/div&gt;&lt;div&gt;      &amp;lt;Setter Property="RenderTransform"&gt;&lt;/div&gt;&lt;div&gt;         &amp;lt;Setter.Value&gt;&lt;/div&gt;&lt;div&gt;            &amp;lt;ScaleTransform ScaleX="1" ScaleY="1"/&gt;&lt;/div&gt;&lt;div&gt;         &amp;lt;/Setter.Value&gt;&lt;/div&gt;&lt;div&gt;      &amp;lt;/Setter&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;        &amp;lt;Style.Triggers&gt;&lt;/div&gt;&lt;div&gt;            &amp;lt;Trigger Property="IsValidationErrorRestrictive"&lt;/div&gt;&lt;div&gt;                     Value="True"&gt;&lt;/div&gt;&lt;div&gt;                &amp;lt;Setter Property="Background"&lt;/div&gt;&lt;div&gt;                        Value="Red"&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;            &amp;lt;/Trigger&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;            &amp;lt;Trigger Property="IsValidationErrorRestrictive"&lt;/div&gt;&lt;div&gt;                     Value="False"&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;                &amp;lt;Setter Property="Background"&lt;/div&gt;&lt;div&gt;                        Value="Orange"&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;Trigger.EnterActions&gt;&lt;/div&gt;&lt;div&gt;               &amp;lt;BeginStoryboard&gt;&lt;/div&gt;&lt;div&gt;                  &amp;lt;Storyboard AutoReverse="True"&gt;&lt;/div&gt;&lt;div&gt;                     &amp;lt;DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)"&lt;/div&gt;&lt;div&gt;                                      To="1.1"&lt;/div&gt;&lt;div&gt;                                      Duration="00:00:00.25"/&gt;&lt;/div&gt;&lt;div&gt;                     &amp;lt;DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)"&lt;/div&gt;&lt;div&gt;                                      To="1.1"&lt;/div&gt;&lt;div&gt;                                      Duration="00:00:00.25"/&gt;                                      &lt;/div&gt;&lt;div&gt;                  &amp;lt;/Storyboard&gt;                     &lt;/div&gt;&lt;div&gt;               &amp;lt;/BeginStoryboard&gt;&lt;/div&gt;&lt;div&gt;            &amp;lt;/Trigger.EnterActions&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;            &amp;lt;/Trigger&gt;&lt;/div&gt;&lt;div&gt;        &amp;lt;/Style.Triggers&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Now, on the datagrid you have a property named CellErrorStyle, you can set it to your myCellErrorStyle and voila!&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Questions? Comments? Please feel free to share :).&lt;/div&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=18643" width="1" height="1"&gt;</description><category domain="http://xceed.com/CS/blogs/xamlhero/archive/tags/wpf/default.aspx">wpf</category><category domain="http://xceed.com/CS/blogs/xamlhero/archive/tags/Animation/default.aspx">Animation</category></item><item><title>Public, Private, Protected, OH MY!</title><link>http://xceed.com/CS/blogs/dontpanic/archive/2009/02/12/public-private-protected-oh-my.aspx</link><pubDate>Thu, 12 Feb 2009 15:18:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:18585</guid><dc:creator>Jenny</dc:creator><slash:comments>1</slash:comments><description>&lt;div&gt;How an API is designed can make or break a product. A good API will make it easy and intuitive to use the product while a poorly designed API can be an immediate turnoff. At Xceed, we spend a great deal of time designing our APIs and take great pride in knowing that, although they might not be perfect, we have made every effort to get it as close as possible to perfection. Because of my involvement in this process and my, well, strict rules and guidelines, the guys have dubbed me the "Interface Nazi". So for any of you who are interested in knowing the process that goes into a design/API meeting at Xceed, here are some inside looks at how our APIs are designed &lt;img src="http://xceed.com/CS/emoticons/emotion-1.gif" alt="Smile" /&gt;.&lt;br&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="FONT-WEIGHT:bold;"&gt;Design Meetings&lt;/span&gt;&lt;br&gt; &lt;/div&gt;&lt;div&gt;In a normal design meeting where how a feature will work and how it will be exposed is discussed, the developers working on the feature, the project leader, and I will be there. We usually start by looking at the work that has been done by the developer and how it behaves. Next, we take a look at how the feature is exposed. This part usually involves opening up &lt;a class="" target="_blank" href="http://www.red-gate.com/products/reflector/"&gt;Reflector&lt;/a&gt; and looking at the initial version of the API as designed by the developer. Now, for an API review, we only really care about the "public" members, which includes all members that have the public, protected, and protected internal accessors. During these meetings, I bring in my dictionary (yes, the big book with lots of pages), my thesaurus (yes, I prefer books), and most importantly my copy—and I repeat MY copy—of &lt;a class="" target="_blank" href="http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756"&gt;Framework Design Guidelines&lt;/a&gt;, signed by &lt;a class="" target="_blank" href="http://blogs.msdn.com/brada/"&gt;Brad Abrams&lt;/a&gt; (yes, I am nerdy enough to get my design guidelines book signed). On a side note: EVERY .NET developer should have a copy of the &lt;i&gt;Framework Design Guidelines&lt;/i&gt; in his or her bookshelf. If you don't, &lt;a class="" target="_blank" href="http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756"&gt;order it now&lt;/a&gt;. To continue: Once we start reviewing the API, this is where the fun part starts. It usually goes something like this:&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Me:  Why is that member public?&lt;/div&gt;&lt;div&gt;Dev: Because it might be useful in the future.&lt;/div&gt;&lt;div&gt;Me:  Is it useful now?&lt;/div&gt;&lt;div&gt;Dev: No.&lt;/div&gt;&lt;div&gt;Me:  Make it internal. We can always make it public later in another version when it is needed.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;This, to me, is a very important part of the API design: If it does not need to be public, don't make it public. Only expose what is important to the user. You can always expose members later, but you can't remove them from the API without breaking the interface. And I HATE breaking the interface.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Spelling and the correct usage of words in an API is also very important, especially in a team where English is not always the native language. At Xceed, most of our developers can read and write in English, but sometimes, French words creep into the API. One common example is the word "edition". In French, in the context of the datagrid, this word means "to be in edit mode"; however, in English, this word usually relates to printed materials, such as books. So using the word "edition" in the API does not make sense. (If you have the Blueprint Edition, you may notice that some of the internal members still have the word "edition" in them!) Another point of contention was the verb "canceling". Do we spell it with 1 "L" or 2? It was decided that we would follow "US English" for all of our APIs, which was an easy decision since we wanted to follow the .NET Framework API as closely as possible. So 1 "L" it was! &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Although these are simple examples, many people would be surprised at how much effort goes into designing an API at Xceed. I remember when we were designing the Cardflow 3D View. It took 3 weeks and about 21 API iterations before we finally settled on a design. And I say "settled" because I think that no one involved in that design is still 100% satisfied with the API.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="FONT-WEIGHT:bold;"&gt;Nearing the End&lt;/span&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;The big API review comes near the end of the development cycle. At this point I generally need the API to be finalized so I can finish the documentation in time. The meeting usually involves the lead developer and me, and we compare the latest public version of an assembly and the latest version of the one currently under development to examine the differences in their APIs. Although we still use &lt;a class="" target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4B5B7F29-1939-4E5B-A780-70E887964165&amp;amp;displaylang=en"&gt;LibCheck&lt;/a&gt; for this, there are many different tools that you can use such as &lt;a class="" target="_blank" href="http://code.msdn.microsoft.com/fds"&gt;Framework Design Studio&lt;/a&gt;. Equipped with coffee and lots of treats, this meeting usually lasts for the better part of the day, and it is during this final review that we try to pinpoint any breaking changes (so I can document them) and any API inconsistencies that we may have missed during the other meetings.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;After this meeting and once the developers have corrected any API issues we might have found, we call an "API freeze", meaning that if a developer wants to add, remove, or rename anything that is publicly exposed, he better have a good reason and a nice bribe &lt;img src="http://xceed.com/CS/emoticons/emotion-5.gif" alt="Wink" /&gt;.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="FONT-WEIGHT:bold;"&gt;What Would Xceed Do?&lt;/span&gt;&lt;br&gt; &lt;/div&gt;&lt;div&gt;Here are some guidelines that I try to enforce in our APIs:&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;1- It is better to make everything internal or private and expose what is needed when it is needed than to make everything public.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;2- Do not sacrifice clarity for character count. If the name of a member has to be 57 characters long to make its function clear, then do it. With Intellisense, who types out full member names anyway?&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;3- Do what Microsoft does. If you are not certain how a member should be named, look for precedents! Often, there will be a class in the Framework that does something similar to yours. Look at its members and try to keep the naming similar. HOWEVER, you should ALWAYS follow your own precedents before adopting someone else's. For example, if throughout your API you have used ReadOnly but the Framework uses IsReadOnly, stick to yours. Uniformity in an API is a key feature of its ease of use.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=18585" width="1" height="1"&gt;</description></item><item><title>Because you can animate, doesn't mean you should.</title><link>http://xceed.com/CS/blogs/xamlhero/archive/2009/02/10/because-you-can-animate-doesn-t-mean-you-should.aspx</link><pubDate>Tue, 10 Feb 2009 17:56:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:18529</guid><dc:creator>Matt</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;A lot has changed since WinForms but one of the variables that hasn't changed much, is the programmer. WinForms programmers who were used to static environments are now asked to "upgrade" to WPF, which brings a whole new world of possibilities. One of these possibilities is animation. In an ideal world, a company that moves from WinForms to WPF should have an integrator and an artist. Obviously, not all of WPF programmers are that fortunate and some have to take on the three roles. Here's an example of what I consider a good use of animation. &lt;br&gt;&lt;br&gt;If working with Catherine (our artist) has taught me anything in the past three year is that "less is more", which she often loves to remind me. This is especially true with animations and more so if you have little or no experience with it. Stick with the basics. Why do you want to animate X and Y? The answer can't always be "because it's cool” or “because I can". Animations should be used to guide the user’s eyes on the screen, to give them a visual queue that something changed. It's easy to go over the top and do too much. Here's an example of what I would not recommend :&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ekAX18Mq7fE&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed mce_src="http://www.youtube.com/v/ekAX18Mq7fE&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344" src="http://www.youtube.com/v/ekAX18Mq7fE&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;/object&gt;&lt;br&gt;&lt;br&gt;Unfortunately, this is the type of things we see in WPF applications. Too much visual noise, which overwhelms the user. I would recommend a much smoother approach. For example:&lt;/p&gt;&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/AhsUSyNJ_p0&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed mce_src="http://www.youtube.com/v/AhsUSyNJ_p0&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344" src="http://www.youtube.com/v/AhsUSyNJ_p0&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;/object&gt;&lt;br&gt;&lt;br&gt;In the end, if your application is built around a "light" animation philosophy, odds are that you'll get a much slicker application. Try not to vary the type of animation you are using either. Mixing ScaleTransforms with RotateTransform can make a user nauseous. If you don't feel you have the knowledge required to determine when you should use animation, refer to the pros like what you see in &lt;a&gt;Zune&lt;/a&gt;, which uses very smooth animation like the one I demonstrated.&lt;/p&gt;&lt;p&gt;Also feel free to follow me on &lt;a href="http://twitter.com/mattd1980"&gt;twitter&lt;/a&gt; !&lt;br&gt;&lt;/p&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=18529" width="1" height="1"&gt;</description><category domain="http://xceed.com/CS/blogs/xamlhero/archive/tags/wpf/default.aspx">wpf</category><category domain="http://xceed.com/CS/blogs/xamlhero/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://xceed.com/CS/blogs/xamlhero/archive/tags/Animation/default.aspx">Animation</category><category domain="http://xceed.com/CS/blogs/xamlhero/archive/tags/zune/default.aspx">zune</category></item><item><title>Microsoft Tag in MSDN Magazine February 2009 issue.</title><link>http://xceed.com/CS/blogs/componentinsider/archive/2009/02/09/microsoft-tag-in-msdn-magazine-february-2009-issue.aspx</link><pubDate>Mon, 09 Feb 2009 20:55:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:18492</guid><dc:creator>Odi [Xceed]</dc:creator><slash:comments>3</slash:comments><description>&lt;P&gt;When Microsoft Tag was announced at &lt;A class="" title="Microsoft Tag Announcement at CES 2009 (on On10.net)" href="http://on10.net/blogs/larry/CES-2009-Microsoft-Tag-Youre-It/" target=_blank&gt;CES 2009&lt;/A&gt;&amp;nbsp;on&amp;nbsp;January 7th,&amp;nbsp;the official deadline for submitting ad material for the February 2009 issue of&amp;nbsp;&lt;A class="" title="MSDN Magazine online" href="http://msdn.microsoft.com/" target=_blank&gt;MSDN magazine&lt;/A&gt; (the print publication) was already passed. But I knew it still wasn't too late,&amp;nbsp;most magazines always keep a&amp;nbsp;safety buffer for late submissions.&amp;nbsp;So we created a tag on the &lt;A class="" title="Microsoft Tag main site" href="http://www.microsoft.com/tag/" target=_blank&gt;Microsoft Tag site&lt;/A&gt;, added the tag to our latest printed advertisement with the word "Surprise!" near it, and re-submitted February's material. It made it into the February issue! Visit the tag for a nice surprise (if you're interested in&amp;nbsp;a fantastic&amp;nbsp;datagrid for WPF development.)&lt;/P&gt;
&lt;P&gt;Here is what the ad looks like (it is a two page spread ad, and the tag has been partially hidden here on purpose, you must get your hands on an MSDN magazine to get to the tag itself):&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Xceed two-page spread ad with Microsoft Tag" alt="Microsoft Tag used in Xceed printed advertisement in February 2009 MSDN Magazine" src="http://xceed.com/CS/photos/odi/images/18493/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;Is it the first use of Microsoft Tag in a printed magazine? Close, but there's &lt;A class="" title="Microsoft Tag used in Turkish magazine - LOG -" href="http://blogs.msdn.com/tag/archive/2009/02/03/microsoft-tag-on-a-turkish-magazine.aspx" target=_blank&gt;this one&lt;/A&gt;, and perhaps one in a newspaper which doesn't require materials so long in advance.&lt;/P&gt;
&lt;P&gt;Add this technology to &lt;A class="" title="Blog post about Xceed being early adopters of many Microsoft development technologies" href="http://xceed.com/CS/blogs/componentinsider/archive/2008/10/23/another-silverlight-2-component.aspx"&gt;the list&lt;/A&gt;&amp;nbsp;of Microsoft technologies Xceed has been the first (or one of the first) to use :)&lt;/P&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=18492" width="1" height="1"&gt;</description><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/DataGrid/default.aspx">DataGrid</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/Microsoft+Tag/default.aspx">Microsoft Tag</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/MSDN+Magazine/default.aspx">MSDN Magazine</category></item><item><title>From WinForms to WPF - PART 2: Sorting and Grouping Data</title><link>http://xceed.com/CS/blogs/dontpanic/archive/2009/02/06/from-winforms-to-wpf-part-2-sorting-and-grouping-data.aspx</link><pubDate>Fri, 06 Feb 2009 17:26:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:18455</guid><dc:creator>Jenny</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;In &lt;A class="" href="http://xceed.com/CS/blogs/dontpanic/archive/2008/11/05/from-winforms-to-wpf-part-1-providing-data.aspx" target=_blank&gt;Part 1&lt;/A&gt; of this series, I demonstrated how to provide a grid with data. This post will continue where I left off and demonstrate how to group and sort the same data, so if you have not looked at &lt;A class="" href="http://xceed.com/CS/blogs/dontpanic/archive/2008/11/05/from-winforms-to-wpf-part-1-providing-data.aspx" target=_blank&gt;Part 1&lt;/A&gt;, I suggest you do so.&lt;/P&gt;
&lt;P&gt;Ready?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Data items can be sorted by adding &lt;A class="" href="http://msdn.microsoft.com/en-us/library/system.componentmodel.sortdescription.aspx" target=_blank&gt;SortDescription &lt;/A&gt;structures to the &lt;STRONG&gt;SortDescriptions&lt;/STRONG&gt; collection of the &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridCollectionView.html" target=_blank&gt;DataGridCollectionView&lt;/A&gt; to which a grid is bound and specifying the field name of the column by whose values to sort, as well as the direction in which those values are to be sorted.&amp;nbsp; Let's look at some code:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="TEXT-ALIGN:left;"&gt;view.SortDescriptions.Add( new SortDescription( "ShipCountry", ListSortDirection.Ascending ) );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;view.SortDescriptions.Add( new SortDescription( "ShipCity", ListSortDirection.Ascending ) );&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;In the above code, two &lt;STRONG&gt;SortDescription&lt;/STRONG&gt; structures are added to the &lt;STRONG&gt;SortDescriptions&lt;/STRONG&gt; collection of the &lt;STRONG&gt;DataGridCollectionView&lt;/STRONG&gt; ("view") to which the grid is bound. The result is that the data items of the grid are sorted according to the values of the &lt;EM&gt;ShipCountry&lt;/EM&gt; and &lt;EM&gt;ShipCity&lt;/EM&gt; columns.&lt;/P&gt;
&lt;P&gt;Groups are created in basically the same way; however, rather than adding &lt;STRONG&gt;SortDescription&lt;/STRONG&gt; structures&amp;nbsp;to the &lt;STRONG&gt;SortDescriptions&lt;/STRONG&gt; collection, &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridGroupDescription.html" target=_blank&gt;DataGridGroupDescription&lt;/A&gt; objects are added to the &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridCollectionView~GroupDescriptions.html" target=_blank&gt;GroupDescriptions &lt;/A&gt;collection. For example:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;view.GroupDescriptions.Add( new DataGridGroupDescription( "ShipCountry" ) );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;view.GroupDescriptions.Add( new DataGridGroupDescription( "ShipCity" ) );&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;As mentioned in Part 1, the &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridCollectionViewSource.html" target=_blank&gt;DataGridCollectionViewSource &lt;/A&gt;is the XAML representation of the &lt;STRONG&gt;DataGridCollectionView&lt;/STRONG&gt;. So let's see how the above code translates to XAML. But before we do, we need to map the &lt;STRONG&gt;System.ComponentModel&lt;/STRONG&gt; namespace in the &lt;STRONG&gt;WindowsBase&lt;/STRONG&gt; assembly that will allow us to use the &lt;STRONG&gt;SortDescription&lt;/STRONG&gt; structure. You can add the new namespace declaration to your window or to the grid that contains the datagrid control.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Let's get on with the show!&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;lt;xcdg:DataGridCollectionViewSource x:Key="cvs_orders" Source="{Binding Path=Orders}"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridCollectionViewSource.SortDescriptions&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;scm:SortDescription PropertyName="ShipCountry" Direction="Ascending" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;scm:SortDescription PropertyName="ShipCity" Direction="Ascending" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xcdg:DataGridCollectionViewSource.SortDescriptions&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xcdg:DataGridCollectionViewSource.GroupDescriptions&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridGroupDescription PropertyName="ShipCountry" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xcdg:DataGridGroupDescription PropertyName="ShipCity" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xcdg:DataGridCollectionViewSource.GroupDescriptions&amp;gt;&lt;BR&gt;&amp;lt;/xcdg:DataGridCollectionViewSource&amp;gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now, when &lt;STRONG&gt;SortDescriptions&lt;/STRONG&gt; and &lt;STRONG&gt;DataGridGroupDescriptions&lt;/STRONG&gt; are added to a &lt;STRONG&gt;DataGridCollectionView&lt;/STRONG&gt; or &lt;STRONG&gt;DataGridCollectionViewSource&lt;/STRONG&gt;, they represent the &lt;B&gt;INITIAL&lt;/B&gt; sorting and grouping criteria that are applied to the content of a grid. Once an end user changes these, the ones that were initially added will no longer be used. This can be especially problematic with group descriptions since any customization that was done to the initial descriptions, such as providing a specific &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.GroupConfiguration.html" target=_blank&gt;GroupConfiguration&lt;/A&gt;, will be lost. But don't panic! As you will see, there is a very easy solution to this problem!&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Custom Group Descriptions and Configurations&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;Each &lt;STRONG&gt;DataGridGroupDescription&lt;/STRONG&gt; exposes a &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridGroupDescription~GroupConfiguration.html" target=_blank&gt;GroupConfiguration &lt;/A&gt;property, which determines the appearance the groups will have once they are created. If a custom group configuration is provided to the initial &lt;STRONG&gt;DataGridGroupDescription&lt;/STRONG&gt;, it will be lost once the group is removed by the end user. This is where the &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.Column~GroupDescription.html" target=_blank&gt;GroupDescription&lt;/A&gt; and &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.Column~GroupConfiguration.html" target=_blank&gt;GroupConfiguration&lt;/A&gt; properties, which are exposed by the &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.Column.html" target=_blank&gt;Column&lt;/A&gt; class, come in handy. &amp;nbsp;The &lt;STRONG&gt;DataGridGroupDescription &lt;/STRONG&gt;and &lt;STRONG&gt;GroupConfiguration&lt;/STRONG&gt; that are provided to these properties, respectively, will be used whenever the content of the grid is grouped by the values of the column. Of course, if you have a custom &lt;STRONG&gt;DataGridGroupDescription&lt;/STRONG&gt; that already has a &lt;STRONG&gt;GroupConfiguration&lt;/STRONG&gt;, you don't need to provide the &lt;STRONG&gt;GroupConfiguration&lt;/STRONG&gt; to the column.&lt;/P&gt;
&lt;P&gt;So, let's assume that we have a &lt;STRONG&gt;GroupConfiguration&lt;/STRONG&gt; that needs to be used every time the content of the grid is grouped by the values of the &lt;EM&gt;ShipCountry&lt;/EM&gt; column. If this were&amp;nbsp;done in code, it would look something like the following:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;DataTemplate template = new DataTemplate();&lt;BR&gt;template.VisualTree = new FrameworkElementFactory( typeof( InsertionRow ) );&lt;/P&gt;
&lt;P&gt;GroupConfiguration configuration = new GroupConfiguration();&lt;BR&gt;configuration.Footers.Add( template );&lt;/P&gt;
&lt;P&gt;grid.Columns[ "ShipCountry" ].GroupConfiguration = configuration;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Although the above code demonstrates how to create a template in code and add it to the &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.GroupConfiguration~Footers.html" target=_blank&gt;Footers &lt;/A&gt;collection of the &lt;STRONG&gt;GroupConfiguration&lt;/STRONG&gt;, &lt;B&gt;DO NOT CREATE TEMPLATES IN CODE!&lt;/B&gt; &lt;B&gt;EVER!&lt;/B&gt; FrameworkElementFactory is deprecated and the API in code does not allow you to do as much as it does in XAML. Now that I got that out of my system, let's look at the equivalent XAML:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;lt;xcdg:DataGridControl.Columns&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:Column FieldName="ShipCountry"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:Column.GroupConfiguration&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:GroupConfiguration&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:GroupConfiguration.Footers&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;DataTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:InsertionRow /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/DataTemplate&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:GroupConfiguration.Footers&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:GroupConfiguration&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xcdg:Column.GroupConfiguration&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xcdg:Column&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;lt;/xcdg:DataGridControl.Columns&amp;gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Much better &lt;img src="http://xceed.com/CS/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Custom Sorting&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;In addition to the default type-based sorting, custom sorting can also be applied by providing an &lt;A class="" href="http://msdn.microsoft.com/en-us/library/system.collections.icomparer.aspx" target=_blank&gt;IComparer &lt;/A&gt;to the &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridItemProperty~SortComparer.html" target=_blank&gt;SortComparer&lt;/A&gt; property of one or more &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridItemProperty.html" target=_blank&gt;DataGridItemProperties&lt;/A&gt; defined in the &lt;STRONG&gt;DataGridCollectionView&lt;/STRONG&gt; or &lt;STRONG&gt;DataGridCollectionViewSource&lt;/STRONG&gt; to which a grid is bound. This comparer will be used whenever the values of the corresponding column are sorted (e.g., clicking on the column header). For example, I have created a custom sort comparer (AddressComparer class) that compares addresses first with their civic number, followed by the street. This comparer is then provided to the &lt;EM&gt;ShipAddress&lt;/EM&gt; &lt;STRONG&gt;DataGridItemProperty&lt;/STRONG&gt; and will be used whenever the &lt;EM&gt;ShipAddress&lt;/EM&gt; column is sorted.&lt;/P&gt;
&lt;P&gt;First, the code:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="TEXT-ALIGN:left;"&gt;DataGridItemProperty addressProperty = new DataGridItemProperty( "ShipAddress", typeof( string ) );&lt;BR&gt;addressProperty.SortComparer = new AddressComparer();&lt;/P&gt;
&lt;P&gt;view.ItemProperties.Add( addressProperty );&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now, the XAML:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;lt;local:AddressComparer x:Key="addressComparer"/&amp;gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN:left;"&gt;&amp;lt;xcdg:DataGridCollectionViewSource.ItemProperties&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;xcdg:DataGridItemProperty Name="ShipAddress" SortComparer="{StaticResource addressComparer}" /&amp;gt;&lt;BR&gt;&amp;lt;/xcdg:DataGridCollectionViewSource.ItemProperties&amp;gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;You'll notice that the AddressComparer class is located in the "local" namespace. This namespace&amp;nbsp;must be declared in order to be able to use the AddressComparer class. The class also needs to be declared in the resources of the Grid (not the &lt;A class="" href="http://doc.xceedsoft.com/products/XceedWpfDataGrid/Xceed.Wpf.DataGrid~Xceed.Wpf.DataGrid.DataGridControl.html" target=_blank&gt;DataGridControl&lt;/A&gt; class), above the declaration of the &lt;STRONG&gt;DataGridCollectionViewSource&lt;/STRONG&gt;.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;xmlns:local="clr-namespace:WinFormsToWPF"&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;B&gt;Knowing When Sorting and Grouping Change&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;A common question that has been asked by many clients is "How do I know when the grouping or sorting changes?". And many get frustrated when they don't find "group changed" or "sort changed" events. The solution, however, is easier than you might think!&lt;/P&gt;
&lt;P&gt;Both the &lt;STRONG&gt;GroupDescriptions&lt;/STRONG&gt; and &lt;STRONG&gt;SortDescriptions&lt;/STRONG&gt; collections exposed by the &lt;STRONG&gt;DataGridCollectionView&lt;/STRONG&gt; class implement the &lt;A class="" href="http://msdn.microsoft.com/en-us/library/system.collections.specialized.inotifycollectionchanged.aspx" target=_blank&gt;INotifyCollectionChanged &lt;/A&gt;event, which has a &lt;A class="" href="http://msdn.microsoft.com/en-us/library/system.collections.specialized.inotifycollectionchanged.collectionchanged.aspx" target=_blank&gt;CollectionChanged&lt;/A&gt; event that can be handled to know when either collection changes. First, in code:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;DataGridCollectionView view = new DataGridCollectionView( this.Orders.DefaultView );&lt;/P&gt;
&lt;P style="TEXT-ALIGN:left;"&gt;( ( INotifyCollectionChanged )view.GroupDescriptions ).CollectionChanged += new NotifyCollectionChangedEventHandler( GroupDescriptions_CollectionChanged );&lt;BR&gt;( ( INotifyCollectionChanged )view.SortDescriptions ).CollectionChanged += new NotifyCollectionChangedEventHandler( SortDescriptions_CollectionChanged );&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now, in XAML:&lt;/P&gt;
&lt;P&gt;Actually, this can only be done in code; however, when the grid and &lt;STRONG&gt;DataGridCollectionViewSource&lt;/STRONG&gt; are defined in XAML, the location where the events are subscribed to is not the same. In the code above, the &lt;STRONG&gt;CollectionChanged&lt;/STRONG&gt; events were subscribed to right after the &lt;STRONG&gt;DataGridCollectionView&lt;/STRONG&gt; was created. In the case where the collection view is defined in XAML, the events can only be subscribed to &lt;B&gt;after&lt;/B&gt; the grid and collection view have been created. The location I usually choose for this is the &lt;STRONG&gt;OnInitialized&lt;/STRONG&gt; override of my main window:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;DataGridCollectionView view = this.OrdersGrid.ItemsSource as DataGridCollectionView;&lt;/P&gt;
&lt;P style="TEXT-ALIGN:left;"&gt;if( view != null )&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; ( ( INotifyCollectionChanged )view.GroupDescriptions ).CollectionChanged += new NotifyCollectionChangedEventHandler( GroupDescriptions_CollectionChanged );&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;( ( INotifyCollectionChanged )view.SortDescriptions ).CollectionChanged += new NotifyCollectionChangedEventHandler( SortDescriptions_CollectionChanged );&lt;BR&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;B&gt;Conclusion&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;That's pretty much it! The next tutorial-and I promise to get it out much faster than it took me to get part 2 out-will deal with master-detail scenarios. &lt;/P&gt;
&lt;P&gt;Thanks for reading!&lt;/P&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=18455" width="1" height="1"&gt;</description><enclosure url="http://xceed.com/CS/blogs/dontpanic/attachment/18455.ashx" length="827558" type="application/x-zip-compressed" /><category domain="http://xceed.com/CS/blogs/dontpanic/archive/tags/Tutorial/default.aspx">Tutorial</category></item></channel></rss>