<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Manish Dalal's blog</title><link>http://weblogs.asp.net/manishdalal/default.aspx</link><description>Exploring .net!</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/ManishDalal" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>Silverlight 3 Custom Sorting with Paging Support</title><link>http://feedproxy.google.com/~r/ManishDalal/~3/x_U7dl8L4cg/silverlight-3-custom-sorting-with-paging-support.aspx</link><pubDate>Thu, 01 Oct 2009 17:10:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7221173</guid><dc:creator>manish.dalal</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/manishdalal/rsscomments.aspx?PostID=7221173</wfw:commentRss><comments>http://weblogs.asp.net/manishdalal/archive/2009/10/01/silverlight-3-custom-sorting-with-paging-support.aspx#comments</comments><description>&lt;p style="background: lightgray"&gt;This post updates the custom sorting technique I had originally &lt;a href="http://weblogs.asp.net/manishdalal/archive/2008/12/30/silverlight-datagrid-custom-sorting.aspx" target="_blank"&gt;posted&lt;/a&gt; for Silverlight 2 and adds paging support. &lt;img style="border-bottom: 0px; border-left: 0px; margin: 5px 5px 5px 10px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="right" src="http://weblogs.asp.net/blogs/manishdalal/image_02264763.png" width="170" height="200" /&gt;&lt;/p&gt;  &lt;h5&gt;Introduction&lt;/h5&gt;  &lt;p align="justify"&gt;Silverlight 3 includes PagedCollectionView class, which provides grouping, sorting, and paging functionality for any data source that implements the IEnumerable interface. This works as long as all the data that you need to sort (and/or page) is already fetched to the client. However when you are retrieving only a limited set of data from the server at a time, you need an alternative solution that does sorting on the server.&amp;#160; &lt;/p&gt;  &lt;p align="justify"&gt;One way to achieve this is to use .net RIA services. In particular, DomainDataSource control provides automatic server sorting and paging support. However, if you are not using .net RIA services, than you will need to implement ICollectionView to handle sorting and IPagedCollectionView to handle paging. This post updates the SortableCollectionView class that I had introduced in the previous custom sorting post and adds paging support by implementing IPagedCollectionView as PagedSortableCollectionView. I will assume that you have already read the &lt;a href="http://weblogs.asp.net/manishdalal/archive/2008/12/30/silverlight-datagrid-custom-sorting.aspx" target="_blank"&gt;previous article&lt;/a&gt;!&lt;/p&gt;  &lt;h5&gt;Custom Sorting&lt;/h5&gt;  &lt;p align="justify"&gt;SortableCollectionView class implements ICollectionView and provides custom sorting support. Sorting functionality encompasses CanSort and SortDescriptions properties. For custom sorting, we need to listen for changes to SortDescriptions collection, and in turn refresh the data for new sort options. (A SortDescription defines the direction and the property name to be used as the criteria for sorting a collection.)&lt;img style="border-right-width: 0px; margin: 5px 5px 5px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://weblogs.asp.net/blogs/manishdalal/image_0577B93E.png" width="192" height="80" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;For Silverlight 3, SortableCollectionView was updated to provide implementation for several methods that were previously not used. In addition, we no longer need the CustomSortDescription class as the framework will automatically call Refresh method any time there is a change in the SortDescriptions collection. This functionality is enabled by implementing DeferRefresh method and utilizing the DeferRefreshHelper class. As the name implies, DeferRefresh method just delays the automatic refresh of data till all the needed changes are completed and ready to process. When the DeferRefreshHelper object is disposed, we fire the OnRefresh event, which is our cue that we need new data from server. &lt;/p&gt;  &lt;div align="justify"&gt;Following code snippet shows the DeferRefresh method returning DeferRefreshHelper object with Refresh method passed as callback:&lt;/div&gt;  &lt;div&gt;&amp;#160;&lt;/div&gt;  &lt;div&gt;   &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; IDisposable DeferRefresh() {
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; DeferRefreshHelper(() =&amp;gt; Refresh());
}

&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; DeferRefreshHelper : IDisposable {
    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Action _callback;

    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; DeferRefreshHelper(Action callback) {
        _callback = callback;
    }

    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Dispose() {
        _callback();
    }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div align="justify"&gt;Refresh method fires OnRefresh event and passes in RefreshEventArgs, providing access to SortDescriptions collection. A call is made to the server to get new data, passing in proper sort descriptors information. In the callback, we clear existing data and load new sorted data. &lt;/div&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Refresh() {
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;null&lt;/span&gt; != OnRefresh) {
        OnRefresh(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RefreshEventArgs() { SortDescriptions = SortDescriptions });
    }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;h5&gt;&lt;img style="border-right-width: 0px; margin: 5px 5px 5px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://weblogs.asp.net/blogs/manishdalal/image_25269306.png" width="193" height="80" /&gt;Paging &lt;/h5&gt;

&lt;p align="justify"&gt;Silverlight 3 introduced a new interface IPagedCollectionView to support paging and the DataPager control that can utilize the IPagedCollectionView and provides UI to page the data. IPagedCollectionView includes method to navigate to different pages. PagedSortableCollectionView implements the IPagedCollectionView interface on the base SortableCollectionView. The main method that does paging is MoveToPage:&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; MoveToPage(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; pageIndex) {
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (pageIndex &amp;lt; -1) {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;
    }
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ((pageIndex == -1) &amp;amp;&amp;amp; (&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.PageSize &amp;gt; 0)) {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;
    }
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ((pageIndex &amp;gt;= &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.PageCount) || (&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;._pageIndex == pageIndex)) {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;
    }
    &lt;span style="color: #008000"&gt;//&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;try&lt;/span&gt; {
        IsPageChanging = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;null&lt;/span&gt; != PageChanging) {
            PageChangingEventArgs args = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PageChangingEventArgs(pageIndex);
            OnPageChanging(args);
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (args.Cancel) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;
        }
        &lt;span style="color: #008000"&gt;//&lt;/span&gt;
        _pageIndex = pageIndex;
        Refresh();
        IsPageChanging = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;
        OnPropertyChanged(&lt;span style="color: #006080"&gt;&amp;quot;PageIndex&amp;quot;&lt;/span&gt;);
        OnPageChanged(EventArgs.Empty);
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;
    } &lt;span style="color: #0000ff"&gt;finally&lt;/span&gt; {
        IsPageChanging = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;
    }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Whenever there is a change in paging, Refresh method is called, which in turn fires OnRefresh event and we get new data from server.&lt;/p&gt;

&lt;h5&gt;Sample Application&lt;img style="border-bottom: 0px; border-left: 0px; margin: 5px 5px 5px 10px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="right" src="http://weblogs.asp.net/blogs/manishdalal/image85_16E81A16.png" width="154" height="80" /&gt;&lt;/h5&gt;

&lt;p align="justify"&gt;Sample application is similar to the one from previous post. On the server side there is no change, I have used that same Person model that I had used earlier. Similarly I have used the same PeopleService to get data. PeopleService exposes a GetData method that build list of persons and then optionally sorts them and returns requested paged data back to the client. &lt;/p&gt;

&lt;p&gt;On the client side, PeopleViewModel exposes PagedSortableCollectionView as DataList for data biding. It also subscribes to the OnRefresh event and calls the server to get data. Following code snippet shows the client GetData method which is used to build paging and sorting parameters and subsequently fetch data from server using the PeopleService.GetData method.&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; GetData() {
    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; take = DataList.PageSize;
    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; skip = DataList.PageIndex * DataList.PageSize;
    &lt;span style="color: #008000"&gt;//&lt;/span&gt;
    Dictionary&amp;lt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;gt; sortBy = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;gt;();
    &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (SortDescription sortDesc &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; DataList.SortDescriptions) {
        sortBy.Add(sortDesc.PropertyName, (sortDesc.Direction == ListSortDirection.Ascending ? &lt;span style="color: #006080"&gt;&amp;quot;ASC&amp;quot;&lt;/span&gt; : &lt;span style="color: #006080"&gt;&amp;quot;DESC&amp;quot;&lt;/span&gt;));
    }
    &lt;span style="color: #008000"&gt;//&lt;/span&gt;
    PeopleServiceClient proxy = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PeopleServiceClient();
    proxy.GetDataCompleted +=&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; EventHandler&amp;lt;GetDataCompletedEventArgs&amp;gt;(proxy_GetDataCompleted);
    proxy.GetDataAsync(skip, take, sortBy);
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/manishdalal/image_1D9B2399.png" width="244" height="212" /&gt; &lt;/p&gt;

&lt;h5&gt;Steps to get started&lt;/h5&gt;

&lt;ol&gt;
  &lt;li&gt;Include PagedSortableCollectionView,&amp;#160; SortableCollectionView and RefreshEventArgs classes in your Silverlight client code. &lt;/li&gt;

  &lt;li&gt;Handle the OnRefresh event and call server with sorting and paging information. &lt;/li&gt;

  &lt;li&gt;Clear existing data and reload the results. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Source code: &lt;a href="http://cid-5e2cf1fe7786ab07.skydrive.live.com/self.aspx/BlogDemos/CustomSortingSL3.zip" target="_blank"&gt;CustomSortingSL3.zip&lt;/a&gt;&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c30e916c-0824-48c2-93b4-6df43013c6c5" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Silverlight" rel="tag"&gt;Silverlight&lt;/a&gt;&lt;/div&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by-sa/3.0/"&gt;Creative Commons Attribution Share Alike license.&lt;/a&gt;&lt;/div&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7221173" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ManishDalal/~4/x_U7dl8L4cg" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/manishdalal/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/.NET/default.aspx">.NET</category><feedburner:origLink>http://weblogs.asp.net/manishdalal/archive/2009/10/01/silverlight-3-custom-sorting-with-paging-support.aspx</feedburner:origLink></item><item><title>Silverlight 3 ComboBox Control</title><link>http://feedproxy.google.com/~r/ManishDalal/~3/CfmhnVzjIXU/silverlight-3-combobox-control.aspx</link><pubDate>Fri, 03 Jul 2009 17:11:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7139438</guid><dc:creator>manish.dalal</dc:creator><slash:comments>31</slash:comments><wfw:commentRss>http://weblogs.asp.net/manishdalal/rsscomments.aspx?PostID=7139438</wfw:commentRss><comments>http://weblogs.asp.net/manishdalal/archive/2009/07/03/silverlight-3-combobox-control.aspx#comments</comments><description>This post outlines technique for displaying ComboBox control with .net RIA services to handle Foreign Key scenarios....(&lt;a href="http://weblogs.asp.net/manishdalal/archive/2009/07/03/silverlight-3-combobox-control.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7139438" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ManishDalal/~4/CfmhnVzjIXU" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/manishdalal/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/.NET/default.aspx">.NET</category><feedburner:origLink>http://weblogs.asp.net/manishdalal/archive/2009/07/03/silverlight-3-combobox-control.aspx</feedburner:origLink></item><item><title>Silverlight ObjectDataSource</title><link>http://feedproxy.google.com/~r/ManishDalal/~3/aVFoKMJ8xQ8/silverlight-objectdatasource.aspx</link><pubDate>Tue, 21 Apr 2009 13:38:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7053199</guid><dc:creator>manish.dalal</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://weblogs.asp.net/manishdalal/rsscomments.aspx?PostID=7053199</wfw:commentRss><comments>http://weblogs.asp.net/manishdalal/archive/2009/04/21/silverlight-objectdatasource.aspx#comments</comments><description>A DataSource control represents a data object that acts as a data-interface for the data bound controls. In terms of MVVM pattern, it represents the ViewModel. Silverlight 3 introduces the DomainDataSource as part of .net RIA Data Services, that can be...(&lt;a href="http://weblogs.asp.net/manishdalal/archive/2009/04/21/silverlight-objectdatasource.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7053199" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ManishDalal/~4/aVFoKMJ8xQ8" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/manishdalal/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/.NET/default.aspx">.NET</category><feedburner:origLink>http://weblogs.asp.net/manishdalal/archive/2009/04/21/silverlight-objectdatasource.aspx</feedburner:origLink></item><item><title>Silverlight ServiceReferences.ClientConfig Alternatives</title><link>http://feedproxy.google.com/~r/ManishDalal/~3/NP59RbcOrgw/silverlight-servicereferences-clientconfig-alternatives.aspx</link><pubDate>Mon, 23 Feb 2009 20:30:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6924377</guid><dc:creator>manish.dalal</dc:creator><slash:comments>11</slash:comments><wfw:commentRss>http://weblogs.asp.net/manishdalal/rsscomments.aspx?PostID=6924377</wfw:commentRss><comments>http://weblogs.asp.net/manishdalal/archive/2009/02/23/silverlight-servicereferences-clientconfig-alternatives.aspx#comments</comments><description>Silverlight uses the ServiceReferences.ClientConfig file to store and lookup WCF related configuration. Since the ServiceReferences.ClientConfig file is packaged and deployed along with the application in a XAP file, you have to change it for QA, Production...(&lt;a href="http://weblogs.asp.net/manishdalal/archive/2009/02/23/silverlight-servicereferences-clientconfig-alternatives.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6924377" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ManishDalal/~4/NP59RbcOrgw" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/manishdalal/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/.NET/default.aspx">.NET</category><feedburner:origLink>http://weblogs.asp.net/manishdalal/archive/2009/02/23/silverlight-servicereferences-clientconfig-alternatives.aspx</feedburner:origLink></item><item><title>Silverlight DataGrid Custom Sorting</title><link>http://feedproxy.google.com/~r/ManishDalal/~3/KZMry7gfRac/silverlight-datagrid-custom-sorting.aspx</link><pubDate>Tue, 30 Dec 2008 17:30:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6808951</guid><dc:creator>manish.dalal</dc:creator><slash:comments>13</slash:comments><wfw:commentRss>http://weblogs.asp.net/manishdalal/rsscomments.aspx?PostID=6808951</wfw:commentRss><comments>http://weblogs.asp.net/manishdalal/archive/2008/12/30/silverlight-datagrid-custom-sorting.aspx#comments</comments><description>Silverlight DataGrid provides automatic sorting functionality for any data source that implements IList. It does this by internally wrapping the data source in a ListCollectionView. However there are many situations where it is desirable to alter the...(&lt;a href="http://weblogs.asp.net/manishdalal/archive/2008/12/30/silverlight-datagrid-custom-sorting.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6808951" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ManishDalal/~4/KZMry7gfRac" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/manishdalal/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/DataGrid/default.aspx">DataGrid</category><feedburner:origLink>http://weblogs.asp.net/manishdalal/archive/2008/12/30/silverlight-datagrid-custom-sorting.aspx</feedburner:origLink></item><item><title>Cross Browser Clipboard : DataGrid with Excel support – Part 2</title><link>http://feedproxy.google.com/~r/ManishDalal/~3/NaFPqUw9jow/cross-browser-clipboard-datagrid-with-excel-support-part-2.aspx</link><pubDate>Wed, 19 Nov 2008 16:43:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6746535</guid><dc:creator>manish.dalal</dc:creator><slash:comments>5</slash:comments><wfw:commentRss>http://weblogs.asp.net/manishdalal/rsscomments.aspx?PostID=6746535</wfw:commentRss><comments>http://weblogs.asp.net/manishdalal/archive/2008/11/19/cross-browser-clipboard-datagrid-with-excel-support-part-2.aspx#comments</comments><description>In the previous post we saw how to implement Copy and Paste clipboard operations, completely in Silverlight with cross browser support. In this post, we will extend the functionality to support multiple rows and introduce some Excel like enhancements...(&lt;a href="http://weblogs.asp.net/manishdalal/archive/2008/11/19/cross-browser-clipboard-datagrid-with-excel-support-part-2.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6746535" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ManishDalal/~4/NaFPqUw9jow" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/manishdalal/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/.NET/default.aspx">.NET</category><feedburner:origLink>http://weblogs.asp.net/manishdalal/archive/2008/11/19/cross-browser-clipboard-datagrid-with-excel-support-part-2.aspx</feedburner:origLink></item><item><title>Cross Browser Copy and Paste in DataGrid with Excel support – Part 1</title><link>http://feedproxy.google.com/~r/ManishDalal/~3/uNIxC3uz94o/cross-browser-copy-and-paste-in-datagrid-with-excel-support-part-1.aspx</link><pubDate>Wed, 12 Nov 2008 16:19:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6731119</guid><dc:creator>manish.dalal</dc:creator><slash:comments>8</slash:comments><wfw:commentRss>http://weblogs.asp.net/manishdalal/rsscomments.aspx?PostID=6731119</wfw:commentRss><comments>http://weblogs.asp.net/manishdalal/archive/2008/11/12/cross-browser-copy-and-paste-in-datagrid-with-excel-support-part-1.aspx#comments</comments><description>Silverlight 2 is a cross browser platform(plug-in), providing developers with a familiar .net programming model for building RIAs. However it is also a relatively young platform. This came to surface other day when a tester came to me complaining about...(&lt;a href="http://weblogs.asp.net/manishdalal/archive/2008/11/12/cross-browser-copy-and-paste-in-datagrid-with-excel-support-part-1.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6731119" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ManishDalal/~4/uNIxC3uz94o" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/manishdalal/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/.NET/default.aspx">.NET</category><feedburner:origLink>http://weblogs.asp.net/manishdalal/archive/2008/11/12/cross-browser-copy-and-paste-in-datagrid-with-excel-support-part-1.aspx</feedburner:origLink></item><item><title>ConfigSwitcher: ServiceReferences.ClientConfig Switcher Utility</title><link>http://feedproxy.google.com/~r/ManishDalal/~3/ycZTEnPT3LU/configswitcher-servicereferences-clientconfig-switcher-utility.aspx</link><pubDate>Tue, 04 Nov 2008 16:27:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6720076</guid><dc:creator>manish.dalal</dc:creator><slash:comments>5</slash:comments><wfw:commentRss>http://weblogs.asp.net/manishdalal/rsscomments.aspx?PostID=6720076</wfw:commentRss><comments>http://weblogs.asp.net/manishdalal/archive/2008/11/04/configswitcher-servicereferences-clientconfig-switcher-utility.aspx#comments</comments><description>Silverlight 2 uses ServiceReferences.ClientConfig to store WCF related configuration. It is packaged and deployed along with the application in XAP file. Since XAP is a compressed file container (similar to zip), it is possible to uncompress the XAP file...(&lt;a href="http://weblogs.asp.net/manishdalal/archive/2008/11/04/configswitcher-servicereferences-clientconfig-switcher-utility.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6720076" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ManishDalal/~4/ycZTEnPT3LU" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/manishdalal/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/.NET/default.aspx">.NET</category><feedburner:origLink>http://weblogs.asp.net/manishdalal/archive/2008/11/04/configswitcher-servicereferences-clientconfig-switcher-utility.aspx</feedburner:origLink></item><item><title>Cascading ComboBox</title><link>http://feedproxy.google.com/~r/ManishDalal/~3/gg6ln-QHHSg/cascading-combobox.aspx</link><pubDate>Wed, 22 Oct 2008 15:50:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6697945</guid><dc:creator>manish.dalal</dc:creator><slash:comments>12</slash:comments><wfw:commentRss>http://weblogs.asp.net/manishdalal/rsscomments.aspx?PostID=6697945</wfw:commentRss><comments>http://weblogs.asp.net/manishdalal/archive/2008/10/22/cascading-combobox.aspx#comments</comments><description>In the post ComboBox in DataGrid , we examined the usage of a simple ComboBox, displaying a fixed list of values. One of the scenario that is quite common in business applications is that of a dependent data selection, where data from one item is used...(&lt;a href="http://weblogs.asp.net/manishdalal/archive/2008/10/22/cascading-combobox.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6697945" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ManishDalal/~4/gg6ln-QHHSg" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/manishdalal/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/.NET/default.aspx">.NET</category><feedburner:origLink>http://weblogs.asp.net/manishdalal/archive/2008/10/22/cascading-combobox.aspx</feedburner:origLink></item><item><title>Updated Samples for Silverlight 2</title><link>http://feedproxy.google.com/~r/ManishDalal/~3/cuDuBRX_5WU/updated-samples-for-silverlight-2.aspx</link><pubDate>Thu, 16 Oct 2008 17:09:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6683126</guid><dc:creator>manish.dalal</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://weblogs.asp.net/manishdalal/rsscomments.aspx?PostID=6683126</wfw:commentRss><comments>http://weblogs.asp.net/manishdalal/archive/2008/10/16/updated-samples-for-silverlight-2.aspx#comments</comments><description>Now that Silverlight 2 has been released, I have updated all the samples. Conversion was mostly straight forward, with very few changes to code. Building Business Applications with Silverlight 2 Introduces the basic building blocks of a data centric application...(&lt;a href="http://weblogs.asp.net/manishdalal/archive/2008/10/16/updated-samples-for-silverlight-2.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6683126" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ManishDalal/~4/cuDuBRX_5WU" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/manishdalal/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/.NET/default.aspx">.NET</category><feedburner:origLink>http://weblogs.asp.net/manishdalal/archive/2008/10/16/updated-samples-for-silverlight-2.aspx</feedburner:origLink></item><item><title>Stealth Paging : DataGrid</title><link>http://feedproxy.google.com/~r/ManishDalal/~3/XcEkashURXU/stealth-paging-datagrid.aspx</link><pubDate>Thu, 09 Oct 2008 18:41:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6667422</guid><dc:creator>manish.dalal</dc:creator><slash:comments>14</slash:comments><wfw:commentRss>http://weblogs.asp.net/manishdalal/rsscomments.aspx?PostID=6667422</wfw:commentRss><comments>http://weblogs.asp.net/manishdalal/archive/2008/10/09/stealth-paging-datagrid.aspx#comments</comments><description>It is quite common to see paging of data in today’s web application. It allows developer to show only a fixed set of rows at a time and pulling next set of rows on demand, improving overall user experience. In a desktop application, user normally does...(&lt;a href="http://weblogs.asp.net/manishdalal/archive/2008/10/09/stealth-paging-datagrid.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6667422" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ManishDalal/~4/XcEkashURXU" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/manishdalal/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/.NET/default.aspx">.NET</category><feedburner:origLink>http://weblogs.asp.net/manishdalal/archive/2008/10/09/stealth-paging-datagrid.aspx</feedburner:origLink></item><item><title>ComboBox in DataGrid</title><link>http://feedproxy.google.com/~r/ManishDalal/~3/h8Fy_hkPNf4/combobox-in-datagrid.aspx</link><pubDate>Mon, 29 Sep 2008 01:45:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6646157</guid><dc:creator>manish.dalal</dc:creator><slash:comments>27</slash:comments><wfw:commentRss>http://weblogs.asp.net/manishdalal/rsscomments.aspx?PostID=6646157</wfw:commentRss><comments>http://weblogs.asp.net/manishdalal/archive/2008/09/28/combobox-in-datagrid.aspx#comments</comments><description>This post examines usage of ComboBox in DataGrid. In particular, it shows how to implement foreign key scenarios in lieu of missing SelectedValue property. It also highlights workaround for a bug in RC0 that causes ComboBox dropdown to close immediately...(&lt;a href="http://weblogs.asp.net/manishdalal/archive/2008/09/28/combobox-in-datagrid.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6646157" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ManishDalal/~4/h8Fy_hkPNf4" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/manishdalal/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/.NET/default.aspx">.NET</category><feedburner:origLink>http://weblogs.asp.net/manishdalal/archive/2008/09/28/combobox-in-datagrid.aspx</feedburner:origLink></item><item><title>Prevention : The first line of defense, with Attach Property Pixie dust!</title><link>http://feedproxy.google.com/~r/ManishDalal/~3/NIdLRAo3O5Q/prevention-the-first-line-of-defense-with-attach-property-pixie-dust.aspx</link><pubDate>Wed, 24 Sep 2008 15:30:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6640348</guid><dc:creator>manish.dalal</dc:creator><slash:comments>10</slash:comments><wfw:commentRss>http://weblogs.asp.net/manishdalal/rsscomments.aspx?PostID=6640348</wfw:commentRss><comments>http://weblogs.asp.net/manishdalal/archive/2008/09/24/prevention-the-first-line-of-defense-with-attach-property-pixie-dust.aspx#comments</comments><description>In the Building Business Application with Silverlight series we have seen how to validate data in various conditions. While it is necessary to validate data after user has entered it, it will be even better if we can prevent user from entering invalid...(&lt;a href="http://weblogs.asp.net/manishdalal/archive/2008/09/24/prevention-the-first-line-of-defense-with-attach-property-pixie-dust.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6640348" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ManishDalal/~4/NIdLRAo3O5Q" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/manishdalal/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/.NET/default.aspx">.NET</category><feedburner:origLink>http://weblogs.asp.net/manishdalal/archive/2008/09/24/prevention-the-first-line-of-defense-with-attach-property-pixie-dust.aspx</feedburner:origLink></item><item><title>Silverlight Business Application Part 6: IEditableobject and Add new item (Take 3!)</title><link>http://feedproxy.google.com/~r/ManishDalal/~3/rD52503vv54/silverlight-business-application-part-6-ieditableobject-and-add-new-time-take-3.aspx</link><pubDate>Wed, 17 Sep 2008 15:22:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6629825</guid><dc:creator>manish.dalal</dc:creator><slash:comments>10</slash:comments><wfw:commentRss>http://weblogs.asp.net/manishdalal/rsscomments.aspx?PostID=6629825</wfw:commentRss><comments>http://weblogs.asp.net/manishdalal/archive/2008/09/17/silverlight-business-application-part-6-ieditableobject-and-add-new-time-take-3.aspx#comments</comments><description>This is part six of Building Business Application with Silverlight series that showcases the basic building blocks of a data centric application. Series Link: Part 0 , Part 1 , Part 2 , Part 3 , Part 4 , Part 5 We have seen how to add new items, delete...(&lt;a href="http://weblogs.asp.net/manishdalal/archive/2008/09/17/silverlight-business-application-part-6-ieditableobject-and-add-new-time-take-3.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6629825" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ManishDalal/~4/rD52503vv54" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/manishdalal/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/.NET/default.aspx">.NET</category><feedburner:origLink>http://weblogs.asp.net/manishdalal/archive/2008/09/17/silverlight-business-application-part-6-ieditableobject-and-add-new-time-take-3.aspx</feedburner:origLink></item><item><title>Silverlight Business Application Part 5: Validation - Refactored!</title><link>http://feedproxy.google.com/~r/ManishDalal/~3/tkJ65LuxrnE/silverlight-business-application-part-5-validation-refactored.aspx</link><pubDate>Wed, 10 Sep 2008 15:27:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6616437</guid><dc:creator>manish.dalal</dc:creator><slash:comments>9</slash:comments><wfw:commentRss>http://weblogs.asp.net/manishdalal/rsscomments.aspx?PostID=6616437</wfw:commentRss><comments>http://weblogs.asp.net/manishdalal/archive/2008/09/10/silverlight-business-application-part-5-validation-refactored.aspx#comments</comments><description>This is part five of Building Business Application with Silverlight series that showcases the basic building blocks of a data centric application.   
So far we have seen how to validate data in sync and async fashion. We did validation in response to the changes to data, in setter of the fields. This works fine for doing individual field validation, but we also need a way to validate and track state of the entire object. 
Rather than crowding the domain model, the Person class with validation and error state management logic, we will factor out validation into a separate class, PersonValidator. PersonValidator will house logic to validate individual fields and also provide method to validate entire object on demand, not just in response to changes to the data field. It will also be responsible for maintaining overall state of the object....(&lt;a href="http://weblogs.asp.net/manishdalal/archive/2008/09/10/silverlight-business-application-part-5-validation-refactored.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6616437" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ManishDalal/~4/tkJ65LuxrnE" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/manishdalal/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/manishdalal/archive/tags/.NET/default.aspx">.NET</category><feedburner:origLink>http://weblogs.asp.net/manishdalal/archive/2008/09/10/silverlight-business-application-part-5-validation-refactored.aspx</feedburner:origLink></item></channel></rss>
