<?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>Component Insider : data virtualization, listbox</title><link>http://xceed.com/CS/blogs/componentinsider/archive/tags/data+virtualization/listbox/default.aspx</link><description>Tags: data virtualization, listbox</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Debug Build: 61120.2)</generator><item><title>Datagrid’s very capable little brother.</title><link>http://xceed.com/CS/blogs/componentinsider/archive/2010/12/06/datagrid-s-very-capable-little-brother.aspx</link><pubDate>Mon, 06 Dec 2010 16:54:00 GMT</pubDate><guid isPermaLink="false">14592c03-f9d0-4f6b-b4cd-71e0e1b1f679:29373</guid><dc:creator>Odi [Xceed]</dc:creator><slash:comments>0</slash:comments><comments>http://xceed.com/CS/blogs/componentinsider/comments/29373.aspx</comments><wfw:commentRss>http://xceed.com/CS/blogs/componentinsider/commentrss.aspx?PostID=29373</wfw:commentRss><description>&lt;P&gt;Datagrids are very flexible controls. They often contain a lot of information and provide tools to visually organize this information and sift through it.&lt;/P&gt;&lt;P&gt;Before WPF/Silverlight, you could not create a data template for items in a listbox or other data controls. It was not feasible to attempt to present tabular data (e.g., name, age, description, photo) beautifully in a listbox item. Datagrids and listviews were therefore a handy solution.&lt;/P&gt;&lt;P&gt;Now that you can template the elements of a listbox to incorporate the key information you want to display, the lowly listbox has gained superhero data visualization powers.&lt;/P&gt;&lt;P&gt;That’s where Xceed comes in. As datagrid experts, we were naturally concerned with the trends we have been observing in the industry. Trends towards simpler interfaces, the multiplication of smaller screens, and touch interfaces. We saw not only that datagrids would have to adapt but that the listbox has gained in importance in a world where developers are simplifying the experience and hiding extra data until the end-user specifically requests to see it.&lt;/P&gt;&lt;P&gt;The listbox is a wonderful control not only for desktop experiences, but for Windows Phone 7 and mobile devices. We just have a tough time visualizing end users using a datagrid on a 4” screen. Columns and rows, and editing data within the cells of those columns and rows, don’t seem to play well there.&lt;/P&gt;&lt;P&gt;Some say that listboxes are the new datagrids. Here's&amp;nbsp;one&amp;nbsp;&lt;A title="Scott Barnes DataGrid versus ListBox: FIGHT!" href="http://www.riagenic.com/archives/193"&gt;blog post&lt;/A&gt; that had given us some food for thought.&lt;/P&gt;&lt;P&gt;So we set out to improve the listbox. Today, we launched &lt;A title="Xceed Ultimate ListBox for Silverlight" href="http://xceed.com/ListBox_Silverlight_Intro.html"&gt;Xceed Ultimate ListBox for Silverlight&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&lt;IMG style="width:428px;height:172px;" title="Listbox screenshot 1" alt="Listbox screenshot 1" align="baseline" src="http://xceed.com/CS/photos/odi/images/29378/original.aspx" width="428" height="172"&gt;&lt;/P&gt;&lt;P&gt;&lt;IMG style="width:428px;height:172px;" title="Listbox screenshot 2" alt="Listbox screenshot 2" align="baseline" src="http://xceed.com/CS/photos/odi/images/29376/original.aspx" width="428" height="172"&gt;&lt;/P&gt;&lt;P&gt;It is the first control Xceed has made that mimics an existing API (the one for the standard Silverlight listbox) instead of providing an entirely new one. We wanted as little of a learning curve as possible. It is also the first control Xceed has ever launched at such a low price point ($89 per developer). We want the barrier to entry to be as low as possible as well.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Why a better listbox?&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;In the world of Silverlight clients, whether desktop ones or for mobile devices, a lot of the data loaded into listboxes comes over the air or wire. Listboxes aren’t just used to display 5-10 items from an array of objects in memory, they are also used to display hundreds or sometimes thousands of items from remote data sources.&lt;/P&gt;&lt;P&gt;But as the Silverlight listbox works today, it either has to load all of those remote items first, causing the end user to wait while that happens, or it will load only some of the data first, and load it on an as-needed basis. The latter technique is called data virtualization, or paging.&lt;/P&gt;&lt;P&gt;In practically all the implementations we’ve seen, listboxes implementing data virtualization always have usability problems. Some of them make the end user click a “load more” button and wait every time they want more data. Others load the data automatically when you reach the bottom, but still do so only just-in-time and make the end user wait. Most of them have scrollbar thumbs that jump around.&lt;/P&gt;&lt;P&gt;What if the listbox was built with the idea that end users should be able to have an effortless and snappy experience when data virtualization is being used, similar to when the entire data source has already been loaded into the listbox? That’s what Xceed has worked on. I want to call it “super data virtualization”, but on the web site it is simply called “advanced background record retrieval”. Here are the innovations we have put into our super data virtualization:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Automatic record retrieval.&lt;/STRONG&gt; No “load more” buttons.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Background record retrieval.&lt;/STRONG&gt; Listbox never freezes, always responds to end-user’s navigation commands.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Passive pre-fetching.&lt;/STRONG&gt; More than what appears in the listbox gets retrieved, but not more than is needed.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Active pre-fetching.&lt;/STRONG&gt; When the listbox UI is not scrolling, the listbox actively retrieves more records to fill its cache.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Fluid UI.&lt;/STRONG&gt; Without smooth scrolling, the perceived response time to load more data is that of the complete round-trip of request/response to the server. With smooth scrolling animating for about 0.8s and items that fade in when they arrive, the perceived response time begins only after the animation has completed if items still have not arrived.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Discovery-less start up.&lt;/STRONG&gt; To avoid scrollbar thumbs jumping around, or to support grouping, a data-virtualized listbox typically would need to know the total row count, number and size of groups, or other information about the data source. Not this listbox, allowing it to start up faster than any other can.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Optimized navigation.&lt;/STRONG&gt; The listbox requests data from the data source using relative queries instead of absolute index-based queries. Such queries execute faster on the server so navigating through the listbox is snappier. We know of no other listbox that works this way.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Query grouping and throttling.&lt;/STRONG&gt; During scrolling, queries to the server for more data rows are grouped together when possible. This works because queries are asynchronous and are typically obtaining data not currently in view. During heavy scrolling, queries that are no longer needed are canceled, thereby reducing the load on the server as well as the listbox’s own CPU use.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;The goal is to provide lightning fast display of remote data in a listbox. See &lt;A title="'Impress Me' demo with Netflix ODATA catalog" href="http://demo.xceed.com/ListBox_Silverlight/Demo/#/ImpressMe/ImpressMe/ImpressMe"&gt;what we’ve accomplished&lt;/A&gt; with Netflix’s online catalog of 130,000+ movies thanks to the listbox connected via ODATA / WCF Data Services.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;What else does Xceed Ultimate ListBox for Silverlight bring to the table?&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Built-in search box, of course it works with the data virtualization.&lt;/LI&gt;&lt;LI&gt;Completely fluid UI throughout. Slick and fast smooth scrolling, insert/delete items, etc.&lt;BR&gt;6 beautiful themes.&lt;/LI&gt;&lt;LI&gt;Deep built-in support for WCF Data Services / ODATA and WCF Ria Services.&lt;/LI&gt;&lt;LI&gt;Complete grouping support. Displays group headers between items in different groups.&lt;/LI&gt;&lt;LI&gt;Group headers are “sticky” just like with the iOS listbox. They are always visible.&lt;/LI&gt;&lt;LI&gt;Group navigation (prev/next) and WP7-like pop-up index to jump to specific groups.&lt;/LI&gt;&lt;LI&gt;Very little learning curve, simply replace your current listbox and turn on new features.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;There’s more, see the &lt;A title="Features of Xceed Ultimate ListBox for Silverlight" href="http://xceed.xcd/Listbox_Silverlight_Features.html"&gt;complete feature list&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;We hope you love this new control as much as we do and help us spread the word about it! Tweet it, Facebook it, blog it, show it to colleagues... it's all good!&lt;/P&gt;&lt;P&gt;Thanks,&lt;BR&gt;Odi&lt;BR&gt;&lt;/P&gt;&lt;img src="http://xceed.com/CS/aggbug.aspx?PostID=29373" width="1" height="1"&gt;</description><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/Smooth+scrolling/default.aspx">Smooth scrolling</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/list+box/default.aspx">list box</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/longlistselector/default.aspx">longlistselector</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/listbox/default.aspx">listbox</category><category domain="http://xceed.com/CS/blogs/componentinsider/archive/tags/paging/default.aspx">paging</category></item></channel></rss>