<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Intersoft Solutions Corporate Blog &#187; UX</title>
	<atom:link href="http://blog.intersoftsolutions.com/tag/ux/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.intersoftsolutions.com</link>
	<description>All about development productivity – ASP.NET, Silverlight, WPF, iOS, Android, Windows Phone, Windows 8</description>
	<lastBuildDate>Sat, 21 Apr 2018 06:57:13 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.33</generator>
	<item>
		<title>WebUI Studio Designer Reimagined</title>
		<link>http://blog.intersoftsolutions.com/2012/08/webui-studio-designer-reimagined/</link>
		<comments>http://blog.intersoftsolutions.com/2012/08/webui-studio-designer-reimagined/#comments</comments>
		<pubDate>Wed, 22 Aug 2012 19:38:48 +0000</pubDate>
		<dc:creator><![CDATA[Jimmy Petrus]]></dc:creator>
				<category><![CDATA[2012 R1]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[Component Designer]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[UI Design]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Visual Studio 2012]]></category>
		<category><![CDATA[WebUI Studio]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/?p=2802</guid>
		<description><![CDATA[Last week, Microsoft has finally released its long awaited Visual Studio 2012 to the MSDN subscribers. As VSIP partners, we had the RTM bits several weeks earlier and started testing our component designer features for the new Visual Studio. Just in timely fashion, we’ve recently [...]]]></description>
				<content:encoded><![CDATA[<img width="466" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/designer6_thumb1-604x350.png" class="attachment-post-thumbnail wp-post-image" alt="Introducing WebUI Studio Designer for Visual Studio 2012" style="float:right; margin:0 0 10px 10px;" /><p>Last week, Microsoft has finally released its long awaited Visual Studio 2012 to the MSDN subscribers. As VSIP partners, we had the RTM bits several weeks earlier and started testing our component designer features for the new Visual Studio.</p>
<p>Just in timely fashion, we’ve recently completed the development and testing milestones for our new component designer – rebuilt entirely from the scratch to provide the best support for Visual Studio 2012. In this blog post, I’ll share some of the design experiences while remaking our component designer. Read on.</p>
<h2>The Visual Studio 2012 UX Guidelines</h2>
<p>Since the invention of “Metro” design language, Microsoft has been redesigning all its software products toward the modern UI design, including the recently released Visual Studio 2012. As a result of the redesign, Microsoft has now introduced the so-called “Visual Studio 2012 UX Guidelines” which has to be adhered by its development ecosystem partners. We’re thrilled to be among the first who have adhered to the UX guidelines, and will release our new version at the same time of the official Visual Studio 2012 launch.</p>
<p>To adhere to the UX guidelines, our designer team have redesigned nearly 200+ toolbox icons to the Metro style. Furthermore, we decided to remake the component designer to support the new look and feel of Visual Studio 2012, and more importantly, to support the philosophy of the user experiences which essentially emphasizes on content with reduced decorators.</p>
<p>Meet the new Component Designer for Visual Studio 2012. It’s rebuilt entirely from the scratch to resemble the Visual Studio 2012 interface. The all-new designer is now built on the WPF 4 platform and leveraging our own ClientUI for WPF controls – thanks to the comprehensive and easily style-able controls, we managed to remake the component designer ahead of the expected schedule. </p>
<p>The following screenshot shows the new WebUI Studio component designer with much cleaner design and Metro’s iconography.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/08/designer6.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="Introducing WebUI Studio Designer for Visual Studio 2012" border="0" alt="Introducing WebUI Studio Designer for Visual Studio 2012" src="http://intersoftpt.files.wordpress.com/2012/08/designer6_thumb.png" width="639" height="482"></a></p>
<p>It’s important to note that previous version of Visual Studio will continue to be supported. The WebUI Studio component designer launches the new WPF-based designer only when it’s running inside Visual Studio 2012. This is made possible thanks to the loosely-coupled architecture in the component designer framework.</p>
<p>So, when you’re working with WebUI Studio components in Visual Studio 2008 or 2010, you’ll get the old, clunky component designer with sea of colors. And when you’re in Visual Studio 2012, it automatically launches the new modern-styled component designer. Keep in mind that the control assemblies are identical regardless of the Visual Studio version.</p>
<p>The shots below show the designer comparison between the Visual Studio 2010 and 2012.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/08/olddesignerfull1.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="Designer support in older version of Visual Studio" border="0" alt="Designer support in older version of Visual Studio" src="http://intersoftpt.files.wordpress.com/2012/08/olddesignerfull1_thumb.png" width="642" height="433"></a><a href="http://intersoftpt.files.wordpress.com/2012/08/designerfull1.png"></p>
<p><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="Intersoft Component Designer for Visual Studio 2012" border="0" alt="Intersoft Component Designer for Visual Studio 2012" src="http://intersoftpt.files.wordpress.com/2012/08/designerfull1_thumb.png" width="642" height="430"></a></p>
<p>One of the most useful benefits with the migration to WPF is that you get automatic support for the screen resolution and font scaling. This means that if your Windows is set to use 125% larger font, the component designer will automatically reflect the control and layout to fit to the desired scale. The WinForms layout didn’t have that luxury, and it’s extremely difficult to manage the auto scaling settings. This is why you’ll find many inappropriately truncated text and graphics in the old designer when using larger font scaling.</p>
<p>Furthermore, the WPF designer has much better performance compared to WinForms in terms of initial loading, rendering, animation and navigation. This allows us to achieve the “fast and fluid” user experiences.</p>
<p>Back to the main subject, we actually reimagine all aspects of the designer – whether it’s the functionality or the design. For examples, compared to the previous version, the new Layout Manager has much cleaner surface, and eventually makes it more intuitive and easier-to-use at a glance. The art of this design language is that it focuses on the content and brings the functionality back to where it supposed to be. Take a look at the screenshot below.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/08/designer3.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="Layout Manager" border="0" alt="Layout Manager" src="http://intersoftpt.files.wordpress.com/2012/08/designer3_thumb.png" width="639" height="482"></a></p>
<p>We also pay attention on the user experience details where message boxes should be avoided whenever possible. In this remake, we’re now displaying important messages in the accented status bar.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/08/designer5.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="Component Designer with Accented Status Bar" border="0" alt="Component Designer with Accented Status Bar" src="http://intersoftpt.files.wordpress.com/2012/08/designer5_thumb.png" width="639" height="482"></a></p>
<p>Meanwhile, the Structure Manager is also redesigned with the identical aesthetic and consistent layout, enabling users to understand the user interface with less learning curves.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/08/designer4.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="Structure Manager" border="0" alt="Structure Manager" src="http://intersoftpt.files.wordpress.com/2012/08/designer4_thumb.png" width="639" height="482"></a></p>
<h2>Simplified and Smarter User Experiences</h2>
<p>One thing that we learnt about Metro design language is that it’s not only about the user interface, i.e., the colors, themes or shapes. The true essences behind the philosophy is the simplified user experiences. But, the “simplified” here doesn’t necessary mean removing features, it’s more to making user experiences smarter which allows users to perform a task or function in less time, and more efficiently.</p>
<p>We have a number of interesting stories about making user experiences simpler yet smarter while remaking the component designer for WebGrid. </p>
<p>With hundreds of features, it’s quite challenging to find a particular setting or feature in the property window. So we introduced a component designer to address this challenge that looks like the following shot.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/08/olddesigner4.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="Pre VS 2012 designer for WebGrid" border="0" alt="Pre VS 2012 designer for WebGrid" src="http://intersoftpt.files.wordpress.com/2012/08/olddesigner4_thumb.png" width="619" height="482"></a></p>
<p>I personally think that the idea and purpose of such designer is good, although the existing design may now look cluttered. At a glance, the settings are spreading everywhere. Notice that we have numerous in the left-side navigation vertically, and also some tabs in the top arranged horizontally.</p>
<p>In the WebGrid designer remake, we managed to put everything back to where it should through a deep category rearrange that is based on content and function similarity. Tabs such as Advanced, Localization Manager and Pivot Charting are now removed from the top since they are now part of the Properties. Redundant navigation items are merged into a content that makes more sense. See the shots below to get a closer look.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/08/designer11.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="WebGrid Designer for Visual Studio 2012" border="0" alt="WebGrid Designer for Visual Studio 2012" src="http://intersoftpt.files.wordpress.com/2012/08/designer11_thumb.png" width="639" height="482"></a></p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/08/designer7.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="WebGrid Designer for Visual Studio 2012" border="0" alt="WebGrid Designer for Visual Studio 2012" src="http://intersoftpt.files.wordpress.com/2012/08/designer7_thumb.png" width="639" height="482"></a></p>
<p>With the designs shown above, you’re no longer served with massive user interface elements that present the same function. So the Properties tab basically means that “come here for all settings-related tasks”. This allows us to keep the design ideal with balanced functionality. Lessons learned.</p>
<p>Similarly, we simplify the Caching and Performance Tuning tabs such as shown below…</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/08/olddesigner5.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="Pre VS 2012 WebGrid designer" border="0" alt="Pre VS 2012 WebGrid designer" src="http://intersoftpt.files.wordpress.com/2012/08/olddesigner5_thumb.png" width="619" height="482"></a></p>
<p>… into just a single Advanced tab shown below.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/08/designer9.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="WebGrid designer with smarter user experiences" border="0" alt="WebGrid designer with smarter user experiences" src="http://intersoftpt.files.wordpress.com/2012/08/designer9_thumb.png" width="639" height="482"></a></p>
<p>We designed smarter user experiences by categorizing them into expandable groups styled with lightly-shaded accent and Metro colors. </p>
<p>Furthermore, the new designer is not simply a remaking effort, we actually added a number of new options that makes performance tuning a breeze. Notice the red highlighted area in the shot above, you can now enable the built-in resources compression with a single click. This feature actually existed since the 2009 release, but not easily discoverable as you need to manually make changes to the web.config file.</p>
<p>More options are now added to the Common Settings view which includes the new features introduced in the recent releases. For instances, enabling HTML5 rendering mode across the application is simply a tick away.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/08/designer8.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="WebGrid designer with smarter user experiences" border="0" alt="WebGrid designer with smarter user experiences" src="http://intersoftpt.files.wordpress.com/2012/08/designer8_thumb.png" width="639" height="482"></a></p>
<h2>All 40+ Component Designer Redesigned</h2>
<p>In this blog post, I’ve only scratched the surface of our new component designer for Visual Studio 2012. In addition to flagship products such as WebGrid, we also update the designer of entire WebUI Studio family, including WebCombo, WebInput, WebScheduler, WebTextEditor and the rest of components resembled in WebDesktop and WebEssentials.</p>
<p>As far as I can say, we’re making WebUI Studio the first-class citizen of Visual Studio 2012 which enables both products to work best together for the ultimate application development experiences.</p>
<p>We’re expecting to deliver all these new exciting features in the upcoming WebUI Studio service pack release by next week – and hopefully faster. The service pack will also include many <a href="http://intersoftpt.wordpress.com/2012/07/24/coming-up-visual-studio-2012-windows-8-and-ie-10-support/">new enhancements</a> for Windows 8 and Internet Explorer 10, all-new project templates for Visual Studio 2012, as well as reliability improvements to all Silverlight and WPF components. Stay tuned for the release announcement!</p>
<p>Best,<br />Jimmy</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2012/08/webui-studio-designer-reimagined/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First Look: Intersoft Ribbon UI for Silverlight, WPF and ASP.NET</title>
		<link>http://blog.intersoftsolutions.com/2011/10/first-look-intersoft-ribbon-ui-for-silverlight-wpf-and-asp-net/</link>
		<comments>http://blog.intersoftsolutions.com/2011/10/first-look-intersoft-ribbon-ui-for-silverlight-wpf-and-asp-net/#comments</comments>
		<pubDate>Sat, 22 Oct 2011 16:19:26 +0000</pubDate>
		<dc:creator><![CDATA[Jimmy Petrus]]></dc:creator>
				<category><![CDATA[2011 R2]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[Ribbon UI]]></category>
		<category><![CDATA[Rich UI]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[UI Components]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[WebUI Studio]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/2011/10/22/first-look-intersoft-ribbon-ui-for-silverlight-wpf-and-asp-net/</guid>
		<description><![CDATA[Last month, I blogged about some new windowing controls that we will ship in our upcoming release. In that post, I’ve also mentioned about the new ribbon controls which turns out to be one of the key highlights in the release. In this post, I’ll [...]]]></description>
				<content:encoded><![CDATA[<img width="466" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/uxribbon_sl_thumb1-604x350.png" class="attachment-post-thumbnail wp-post-image" alt="UXRibbon for Silverlight" style="float:right; margin:0 0 10px 10px;" /><p>Last month, I blogged about some <a href="http://intersoftpt.wordpress.com/2011/09/24/coming-in-clientui-6-new-window-controls-for-wpf/" target="_blank">new windowing controls</a> that we will ship in our upcoming release. In that post, I’ve also mentioned about the new ribbon controls which turns out to be one of the key highlights in the release. In this post, I’ll share our excitement about this particular control, its key features and benefits, and more importantly, why does it matter to you.</p>
<p>Ever since Microsoft enhanced its Ribbon UI in Office 2010 and expanded the use of Ribbon in its Windows 7, more and more developers have begun to adopt the Ribbon UI in their line-of-business applications today – regardless of whether it’s running on the web or on the desktop. On the web, you can find numerous business apps that are now Ribbon-friendly, including Microsoft’s latest Office web apps, SharePoint 2010 and its new Dynamics business solutions lineup.</p>
<p>As a leading UI component vendor, we recognized developer’s needs very well on the Ribbon control, particularly the ones that fully conform to the Office’s Fluent User Interface specification. Our goal is to create feature-rich Ribbon control that pay very detailed attention to the user experiences, yet incredibly easy-to-use. Today, I’m pleased to introduce you our latest masterpiece, Intersoft Ribbon UI for All-platform.</p>
<p>That said, no matter which platform your applications were built on – whether it’s on Silverlight, WPF, ASP.NET, or even HTML 5 – we’ve got you covered. With shared key features and design across different platforms, you can now build immersive Ribbon-friendly apps with your platform of choice without trading off the existing infrastructure and technology investments. </p>
<p>Next, I’ll highlight our Ribbon’s key features implemented in each platform. Read on.</p>
<h2>For Silverlight</h2>
<p>Among the three platforms, Silverlight is arguably the most appealing platform for developers to build their business apps on. The reasons are obvious – it’s a rich GUI framework that runs on all major browsers and supports both Windows &amp; Mac (unlike the recently announced WinRT which runs only on Win8 but that’ll be another story) – and not to mention its compact runtime that weight only about 6MB. Adding the IE 64 bit support in Silverlight 5 makes it even more appealing as the LoB platform of choice.</p>
<p>So it’s not surprising that our Ribbon for Silverlight (further called <strong>UXRibbon</strong>) receives the most attention in terms of the design, features, and many user experience aspects. UXRibbon has many features, like in other ribbons, from fluid resizing to dozens of button variants – which I’m not interested to cover in this post. The point of interests that I will share today in this post are mostly the user experience aspects of UXRibbon which aren’t available in the other ribbons.</p>
<p>Let’s start with a quick question, if you have used other ribbons before, have you ever noticed that those ribbons always steal the control focus when you do something on the ribbon? This means that you have to spent an extra click to get back to what you worked on previously. Thankfully, you won’t get such issue in UXRibbon as it’s taken care automatically. This is just an example of a small yet important detail that we implemented as part of our compliance to the ISO standards user experiences.</p>
<p>Furthermore, we designed UXRibbon to be incredibly easy to use. For example, when you define a contextual tab group, you don’t need extra code to show which tab to be shown. It’ll intuitively show the first tab of the contextual group when it’s the first-time selected, and smartly reselect the last selected tab when applicable – just like the way it works in Office apps.</p>
<p>To minimize learning curves, we’ve created numerous reference samples so you can easily explore all the features in one place. While the easiest way to demonstrate Ribbon is through the Word sample, I eventually found it to be quite boring. And even worse, it’s an inspiration killer. Why? Because it leads many developers to believe that Ribbon is only ideal in a text processing application. I often asked by our clients this way “So, if you think Ribbon can be used in business apps, show me!”. Well, that motivates us to come up with several business-inspiring reference samples which we’ll ship in the upcoming release.</p>
<p>One of my favorite LoB samples is the Ribbon usage in a CRM application. As you can see in the following figure, Ribbon enforces a neat organization of commands where related functions are grouped together. Commands that are applicable on certain context can be grouped in contextual tabs which are naturally shown on demand. Trust me, users will praise you to make their work life so much easier.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/10/uxribbon_sl.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="UXRibbon for Silverlight" border="0" alt="UXRibbon for Silverlight" src="http://intersoftpt.files.wordpress.com/2011/10/uxribbon_sl_thumb.png" width="742" height="532"></a></p>
<p>Built from the ground up to create Office’s latest fluent user experiences, UXRibbon employs modern API and design that directly refers to the Office 2010 specifications – unlike many other ribbon solutions that simply “patch” their ribbons which were originally built with Office 2007 design. As the results, UXRibbon is more sophisticated in terms of design, yet fully customizable in terms of usage.</p>
<p>Take an example from the UXRibbon’s application menu and backstage feature. With the ease of property sets, you can quickly define the background of the application menu which doesn’t only apply to the menu’s header, but also consistently throughout the entire backstage interface such as the header line and the active backstage menu. See the following illustration for a closer preview.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/10/uxribbon_backstage.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Backstage Menu in Intersoft UXRibbon" border="0" alt="Backstage Menu in Intersoft UXRibbon" src="http://intersoftpt.files.wordpress.com/2011/10/uxribbon_backstage_thumb.png" width="742" height="594"></a></p>
<p>To wrap up this section, I would like to share two more unique features that I haven’t seen in any ribbons in the market yet. It’s again the user experience aspects of the Ribbon. </p>
<p>The first one is the state-of-the-art text wrapping feature, which smartly detect when it should wrap the exceeding text to the second line. It also merges with the dropdown arrow in the case of dropdown and split button. This small yet important detail makes more sense to the whole Ribbon concept, otherwise the Ribbon layout will be further increased by 18 pixels. </p>
<p>Out of dozens of Ribbon-specific controls, the Gallery List is the most sophisticated Ribbon element which participates with the fluid resizing process. UXRibbon’s Gallery List is so meticulously designed so that it feels sleeker and slightly better compared to the original Office design. </p>
<p>Both features are better visualized in the following illustration.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/10/uxribbon_unique.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="UXRibbon - Superior User Experiences" border="0" alt="UXRibbon - Superior User Experiences" src="http://intersoftpt.files.wordpress.com/2011/10/uxribbon_unique_thumb.png" width="742" height="677"></a></p>
<h2>For WPF</h2>
<p><strong>UXRibbon for WPF</strong> shares very much the same features with Silverlight, so I won’t repeat them again here. Although the functionality is identical, many of the user experience aspects have been specifically optimized for the WPF platform behind the scene. This includes the special integration with <strong>UXRibbonGlassWindow</strong> which enables the ribbon to appear in non-client area of the window. With the window entirely “glassified” and combined with the pixel-perfect contextual tab design, you can now easily create your own Office 2010 style desktop applications.</p>
<p>The following figure shows the UXRibbon control in the CRM scenario running on WPF. Notice that all styling details and user experience aspects are equally identical with the Silverlight version.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/10/webribbon_wpf.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="UXRibbon for WPF" border="0" alt="UXRibbon for WPF" src="http://intersoftpt.files.wordpress.com/2011/10/webribbon_wpf_thumb.png" width="742" height="562"></a></p>
<h2>For ASP.NET</h2>
<p>You might have heard that we are all for the Silverlight and WPF tools in the next release, that’s not wrong – but keep reminded that we’re fully committed to continue supporting and adding new tools for the ASP.NET platform. That said, the next release will include dozens of enhancements to the existing flagship components such as the new data transfer format for WebGrid, removed dependencies to ActiveX, and enhanced AJAX security to prevent XSS issues.</p>
<p>In addition, the next release will introduce a new member, <strong>WebRibbonBar</strong>, joining the <strong>WebEssentials</strong> family. Similar to the Silverlight and WPF version, the RibbonBar for ASP.NET also supports rich UI elements such as contextual tabs and application menu, as well as several button variants like dropdown, split button, and toggle button. It also implements fluent resizing with smooth user experiences that conforms to the Office Ribbon specifications.</p>
<p>Despite of the rich features, WebRibbonBar is designed to be extremely lightweight and strongly focused on line-of-business scenarios. As the results, WebRibbonBar delivers blazing-fast performance particularly when the fluent resizing takes place. See the following figure demonstrating the ASP.NET ribbon control used in the same CRM sample scenario.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/10/webribbon_asp.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="WebRibbon for ASP.NET/HTML5" border="0" alt="WebRibbon for ASP.NET/HTML5" src="http://intersoftpt.files.wordpress.com/2011/10/webribbon_asp_thumb.png" width="742" height="548"></a></p>
<p>In conclusion, the “Ribbon Initiatives” is one of the important milestones in our product roadmap. We’re particularly delighted to deliver the Ribbon control supporting all the three platforms in a single release. With the rich features and fluent user experiences concept, get ready to take your business apps to the next level. Be sure to check it out when it’s released in the coming week. Stay tuned!</p>
<p>Best,<br />Jimmy </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2011/10/first-look-intersoft-ribbon-ui-for-silverlight-wpf-and-asp-net/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Coming in ClientUI 6: New Window Controls for WPF</title>
		<link>http://blog.intersoftsolutions.com/2011/09/coming-in-clientui-6-new-window-controls-for-wpf/</link>
		<comments>http://blog.intersoftsolutions.com/2011/09/coming-in-clientui-6-new-window-controls-for-wpf/#comments</comments>
		<pubDate>Sat, 24 Sep 2011 11:05:37 +0000</pubDate>
		<dc:creator><![CDATA[Jimmy Petrus]]></dc:creator>
				<category><![CDATA[2011 R2]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[UI Components]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/2011/09/24/coming-in-clientui-6-new-window-controls-for-wpf/</guid>
		<description><![CDATA[The upcoming volume release of WebUI Studio will include a major version of ClientUI, Intersoft’s flagship UI suite for Silverlight and WPF development. I’ve shared some details of the new controls which you can read in my previous post here. In addition to many Silverlight [...]]]></description>
				<content:encoded><![CDATA[<img width="466" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/uxglasswindow_thumb1-604x350.png" class="attachment-post-thumbnail wp-post-image" alt="Transparent glass window with cover flow" style="float:right; margin:0 0 10px 10px;" /><p>The upcoming volume release of WebUI Studio will include a major version of ClientUI, Intersoft’s flagship UI suite for Silverlight and WPF development. I’ve shared some details of the new controls which you can read in my previous post <a href="http://intersoftpt.wordpress.com/2011/08/19/clientui-vnext-roadmap-unveiled/" target="_blank">here</a>. In addition to many Silverlight and data-centric controls, ClientUI 6 is also strongly focused in new user interface controls for WPF development. Among the new WPF stuff are some cool windowing controls which I’ll cover in this blog post.</p>
<p>With its fast user adoption and exponential growth, Windows 7 is a platform too hard to ignore for developers – despite of all the recent buzz in web and cloud platform. This is further supported by the recent announcement that Microsoft has sold <a href="http://techcrunch.com/2011/09/13/microsoft-sold-450-million-copies-of-windows-7/" target="_blank">450 million copies</a> of Windows 7, which makes it “still” the world’s most popular operating system. </p>
<p>So what does this all mean to you? If you’re building Windows apps, I’d say that it’s now the right time to upgrade your desktop apps and take advantage of many new user interface features in Windows 7 – which will surely welcomed by Windows’ large consumer base. The first step that you can do for a quick start, for example, is to change the classic window interface to Windows 7’s new Aero-glass.</p>
<p>Our upcoming tools for WPF will include a new window control that takes advantage of Windows 7’s enhanced Aero-glass user experience. With just a single markup declaration, UXGlassWindow transforms your existing classic desktop apps into beautifully-looking apps with Windows 7’s slick Aero-glass user experience. UXGlassWindow is unique in the way it handles transparency and custom drawing which enables truly impressive glass interface with borderless content area, yet delivers great performance.</p>
<p>In our recent lab test, we used the graphic intensive control such as UXFlow to test the performance when hosted in the UXGlassWindow. Even with the 3D perspective, reflection and all sort of cool effects enabled, the UXFlow experiences remain swift and fluid. This enables you to design rich apps with UXGlassWindow without have to worry a bit on the overall performance. See the screenshot below for a sneak preview.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/09/uxglasswindow.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Transparent glass window with cover flow" border="0" alt="Transparent glass window with cover flow" src="http://intersoftpt.files.wordpress.com/2011/09/uxglasswindow_thumb.png" width="642" height="410"></a></p>
<p>Furthermore, the upcoming release will also include a special glass window that integrates to ribbon bar. As you may already aware, the next release will ship a feature-complete ribbon control which offers pixel-perfect rendering, blazing-fast performance and granular control definition. I will blog more about ribbon in the next post.</p>
<p>UXRibbonGlassWindow features true ribbon integration to the client window area, unlike other similar solutions which simply offer a generic glass window. In addition, this special window will be rendered borderless and allows the ribbon to extend perfectly to the edge of the glass window which delivers Office 2010 identical user experiences. See the illustration below.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/09/uxribbonglasswindow3.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Ribbon integrated to glass window" border="0" alt="Ribbon integrated to glass window" src="http://intersoftpt.files.wordpress.com/2011/09/uxribbonglasswindow3_thumb.png" width="642" height="333"></a></p>
<p>In conclusion, we have a wide range of exciting tools coming in the next release that enable you to build rich applications faster – whether it’s for the web or for the desktop. The upcoming new Aero-glass window controls, wonderful ribbon bar, and awe-inspiring user experiences are the key components for building powerful, <em>user-centric </em>business apps.</p>
<p>I hope this post gives you some ideas about what we’re working on and what you can expect in the upcoming release. As usual, feedback and questions are warmly welcomed.</p>
<p>Best,<br />Jimmy</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2011/09/coming-in-clientui-6-new-window-controls-for-wpf/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Coming in ClientUI 5: Smooth Content Transition and Enhanced UX</title>
		<link>http://blog.intersoftsolutions.com/2011/04/coming-in-clientui-5-smooth-content-transition-and-enhanced-ux/</link>
		<comments>http://blog.intersoftsolutions.com/2011/04/coming-in-clientui-5-smooth-content-transition-and-enhanced-ux/#comments</comments>
		<pubDate>Mon, 04 Apr 2011 18:20:12 +0000</pubDate>
		<dc:creator><![CDATA[Jimmy Petrus]]></dc:creator>
				<category><![CDATA[2011 R1]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/2011/04/04/coming-in-clientui-5-smooth-content-transition-and-enhanced-ux/</guid>
		<description><![CDATA[Our upcoming flagship toolset for the Silverlight and WPF development, ClientUI 5, will include numerous significant enhancements in addition to many new controls – thanks to all customers and partners who contributed valuable feedback through the satisfaction survey that we ran couple months ago. The [...]]]></description>
				<content:encoded><![CDATA[<img width="465" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/image_thumb30-603x350.png" class="attachment-post-thumbnail wp-post-image" alt="ContentTransition with default strategy" style="float:right; margin:0 0 10px 10px;" /><p>Our upcoming flagship toolset for the Silverlight and WPF development, ClientUI 5, will include numerous significant enhancements in addition to many new controls – thanks to all customers and partners who contributed valuable feedback through the satisfaction survey that we ran couple months ago. </p>
<p>The survey’s results were both surprising and incredible – 82% of participants stated they are highly satisfied with Intersoft’s products in overall, while nearly 75% of participants provide great feedback to further enhance the products’ quality. The survey yielded three winners with $50 amazon certificate each, announced <a href="http://intersoftpt.wordpress.com/2011/03/01/2011-survey-winner/">here</a>.</p>
<p>In this post, I’m pleased to announce that our development team has managed to implement three of the most received feedback particularly on ClientUI for the Silverlight &amp; WPF lineups. The enhancements include a new transition strategy that uses advanced double buffering algorithm for ultra-smooth transition, significant improvements on the memory and resources management, as well as fluid user experiences in the UXDesktop lineup. These enhancements will be included in the upcoming release due later this month.</p>
<h2>Ultra-smooth Content Transition</h2>
<p>Silverlight, like many other graphical frameworks, used frame-based mechanism for its animation and rendering subsystem. The frame-based animation means that there are a number of simultaneous frames being rendered in a sequence of time. By default, Silverlight runs on an average of 50-70 fps depending on your computer configuration.</p>
<p>One of the limitations with the frame-based rendering is the significant degradation of overall user experiences when the fps rate drops. This results in transition being chopped as some of our customers might have experienced in our transition controls. This is particularly true in rich applications with heavy content, for instances, loading a page with few data grids that are bound to hundreds of records. In such situation, you can consider redesigning your page to include fewer data. Or resort to the last option, turn off the transition.</p>
<p>It sounds to be the end of story – until our development team found a simple, yet brilliant idea. Before we explore further, let’s see the background of the actual issue and how it occurred. </p>
<p>Consider that you have a ContentTransition control in your page which perform sliding transition in 5ms duration. When the content changed due to page navigation, the transition is immediately started by default. In the case that the loaded page is heavy due to data controls and a series of asynchronous calls, the transition will be most likely interrupted. As the results, you will see a chopped transition which perhaps renders only the few frames in the last milliseconds. See the following illustration to get a better picture.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/04/image.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="ContentTransition with default strategy" border="0" alt="ContentTransition with default strategy" src="http://intersoftpt.files.wordpress.com/2011/04/image_thumb.png" width="603" height="516"></a></p>
<p>In the above illustration, pay attention to the red-marked lines. Notice that the transition might get interrupted as soon as the content is being constructed. Depending on the complexity of the content being loaded, the interruption can occur within 2-3ms and leave only a few milliseconds for the transition. At the worst, you’ll simply see the results directly without the transition getting its chance to render.</p>
<p>The technique that I mentioned earlier, which we hope to completely address this issue, is called double-buffering rendering algorithm. The idea is to buffer the rendering results before the transition is started. This is actually the similar technique employed in many advanced graphical frameworks, such as the one used in high-end mobile devices like iPad and Galaxy Tab.</p>
<p>The ContentTransition control in the upcoming release will include this advanced transition strategy, which allows for an ultra-smooth transition regardless of the page load overhead. See the improved process in the following illustration, then compare the process with the default one shown above.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/04/image1.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="ContentTransition with advanced transition strategy" border="0" alt="ContentTransition with advanced transition strategy" src="http://intersoftpt.files.wordpress.com/2011/04/image_thumb1.png" width="655" height="511"></a></p>
<p>The implementation of advanced transition strategy answers one of the most received feedback in our recent survey. It elegantly addresses the limitation of Silverlight’s default frame animation, while at the same dramatically enhancing your application’s user experiences.</p>
<h2>Enhanced Cursor Manager and Fluid Window Resizing</h2>
<p>The next major release doesn’t only introduce brand-new controls, but also adding significant enhancements to the existing lineup. Based on the recent survey, many of you requested improvements to the windowing controls, mainly the UXDesktop and UXWindow control.</p>
<p>The UXWindow control is perhaps one of the most visually appealing user interface in the ClientUI suite. You can style it to any looks that you desire – a Windows 7-style translucent glass window, or perhaps a minimalistic, Apple-style window. However, in the existing release, you have to be careful to not using too much transparency effect which might cause a number of performance issues, for instances, the resize cursor and window resizing might not working as responsive as expected.</p>
<p>In the next release, we’ve further fine-tuning the user experiences of the entire windowing controls. The cursor manager and window resizing have been dramatically enhanced, delivering highly responsive user experiences that your users are expecting – plus all those beautiful, translucent window effects they loved. See the following illustration.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/04/image2.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="Smooth window resizing" border="0" alt="Smooth window resizing" src="http://intersoftpt.files.wordpress.com/2011/04/image_thumb2.png" width="642" height="432"></a></p>
<p>Last but not least, we’ve also done a great job on improving the memory management of the entire ClientUI lineup which I will share in my next blog post. Please stay tuned while we’re collecting interesting facts and charts.</p>
<p>Best,<br />Jimmy</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2011/04/coming-in-clientui-5-smooth-content-transition-and-enhanced-ux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use UXSliderBar to Simplify Data Entry</title>
		<link>http://blog.intersoftsolutions.com/2011/03/use-uxsliderbar-to-simplify-data-entry/</link>
		<comments>http://blog.intersoftsolutions.com/2011/03/use-uxsliderbar-to-simplify-data-entry/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 19:17:40 +0000</pubDate>
		<dc:creator><![CDATA[martinlie]]></dc:creator>
				<category><![CDATA[2010 R2]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[MVVM]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[UXSliderBar]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://intersoftpt.wordpress.com/?p=2233</guid>
		<description><![CDATA[One of the powerful controls introduced in ClientUI 4 is UXSliderBar, an input control that enables users to select a value or range of values by sliding the UXThumb along the slider track through drag and drop operation in the thumb. In this post, I [...]]]></description>
				<content:encoded><![CDATA[<img width="507" height="48" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/UXSliderBar11.png" class="attachment-post-thumbnail wp-post-image" alt="" style="float:right; margin:0 0 10px 10px;" /><p>One of the powerful controls introduced in ClientUI 4 is <strong>UXSliderBar</strong>, an input control that enables users to select a value or range of values by sliding the UXThumb along the slider track through drag and drop operation in the thumb.</p>
<p>In this post, I will share how to use UXSliderBar to create a simple application to input grade for student.</p>
<h2>Configuring the UXSliderBar</h2>
<p>The scenario that I want to achieve is, create a sliderbar and set the value from 0 to 100. When user selects a value in the slider (let&#8217;s say 60, 85), the grade (A, B, C, D) will be displayed in the TextBox based on the selected value.</p>
<p>First of all, drag a UXSliderBar control from Visual Studio Toolbox. You need to configure its basic settings, such as <strong>Maximum</strong>, <strong>Minimum</strong>, <strong>SmallChange</strong>, and <strong>LargeChange</strong>.</p>
<p>Minimum and Maximum property indicates the possible lowet and highest value in the slider bar. SmallChange and LargeChange indicates the value to be added or subtracted from the value of UXSliderBar.</p><pre class="crayon-plain-tag">&lt;Intersoft:UXSliderBar Minimum="0" Maximum="100" LargeChange="10"
                       SmallChange="1" TickPlacement="BottomRight"
                       HandlesVisibility="Visible"/&gt;</pre><p><img src="http://www.intersoftpt.com/tdn/downloads/UXSliderBar1.png" alt="UXSliderBar1" /></p>
<p>As you can see, the value becomes crowded because I want to display the value range from 0 to 100. This is where Ticks property is very useful. It is used to represent the position of the tick bar items displayed in the tick bar.</p>
<p>I’m going to set the ticks to 0, 55, 65, 75, 85. Therefore, the UXSliderBar will display something like following:</p><pre class="crayon-plain-tag">&lt;Intersoft:UXSliderBar Minimum="0" Maximum="100" LargeChange="1"
                       SmallChange="0.1" TickPlacement="BottomRight"
                       HandlesVisibility="Visible" Ticks="0 55 65 75 85"/&gt;</pre><p><img src="http://www.intersoftpt.com/tdn/downloads/UXSliderBar2.png" alt="UXSliderBar2" /></p>
<p>In the case where the ticks are only displayed in specific positions, it is difficult to select a specific value, for example 79, in the slider bar. Using <strong>AutoTooltipVisibility </strong>property, you can display a tooltip containing the selected value when you drag the thumb. In addition, <strong>AutoTooltipFormat </strong>is used to set the format string applied to the content of the tooltip.</p><pre class="crayon-plain-tag">&lt;Intersoft:UXSliderBar Minimum="0" Maximum="100" LargeChange="1"
                       SmallChange="1" TickPlacement="BottomRight"
                       HandlesVisibility="Visible" Ticks="0 55 65 75 85"
                       AutoTooltipVisibility="Visible"
                       AutoTooltipFormat="F0"/&gt;</pre><p><img src="http://www.intersoftpt.com/tdn/downloads/UXSliderBar3.png" alt="UXSliderBar3" /></p>
<p>Initially, when you bind the value from UXSliderBar into the Textbox control, it will only display the number. In this case, I want to show the Grade instead. Means that I need to add a converter in order to achieve this scenario.</p>
<h2>Creating Grade Converter</h2>
<p>In order to show the grade in Textbox, we need to bind slider’s value to Textbox and use data conversion to convert the grade into string.</p>
<p>Here is the code on how to bind the slider’s value to Textbox.</p><pre class="crayon-plain-tag">&lt;TextBox Text="{Binding Value, ElementName=UXSliderBar1}" /&gt;</pre><p>Now, you have successfully bound slider’s value to Textbox. But, in order to convert the number into string, you need to add a converter.</p>
<p>For more information on how to use a converter, please refer to <a title="Data Binding Overview" href="http://www.intersoftpt.com/Support/ClientUI/Documentation/ClientUIControls.html#url=Databinding.html" target="_blank">Data Binding Overview</a> on Data Conversion topic.</p>
<p>I create a class called <strong>GradeConverter.cs</strong>. In this class, I will create a converter by creating a class that inherits from IValueConverter and put a validation to convert the grade value into a string.</p>
<p>The GradeConverter.cs looks like the following:</p><pre class="crayon-plain-tag">using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Data;

namespace ClientUIMVVMBlogApp.Converters
{
    public class GradeConverter : IValueConverter
    {
        public object Convert(object value, Type targetType,
                              object parameter,
                              System.Globalization.CultureInfo culture)
        {
            Double grade = (Double)value;
            String result = value.ToString();

            if (grade &lt; 55)
            {
                result = "E";
            }

            else if (grade &gt;= 55 &amp;&amp; grade &lt; 65)
            {
                result = "D";
            }

            else if (grade &gt;= 65 &amp;&amp; grade &lt; 75)
            {
                result = "C";
            }

            else if (grade &gt;= 75 &amp;&amp; grade &lt; 85)
            {
                result = "B";
            }

            else
            {
                result = "A";
            }
            return result;
        }

        public object ConvertBack(object value, Type targetType,
                                  object parameter,
                                  System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}</pre><p>Now, add the converter to the Textbox control that has been bound to the slider’s value:</p><pre class="crayon-plain-tag">&lt;TextBox Text="{Binding Value, ElementName=UXSliderBar1,
                Converter={StaticResource GradeConverter}}"/&gt;</pre><p>There are some properties that you can optionally add to the UXSliderBar such ValueRangeVisibility and IsMoveToPointEnabled. <strong>ValueRangeVisibility </strong>is used to get/set whether the value range visual element is visible. You can see the value range visual element is in blue color.<br />
<img src="http://www.intersoftpt.com/tdn/downloads/UXSliderBar2.png" alt="" /></p>
<p><strong>IsMoveToPointEnabled </strong>is used to get/set a value that indicates whether the UXThumb moves immediately to the location of the mouse click that occurs while the mouse pointer pauses on the slider bar track.</p>
<p>Hence, the final code will look like following:</p><pre class="crayon-plain-tag">&lt;StackPanel&gt;
   &lt;Intersoft:FieldLabel&gt;
      &lt;Intersoft:FieldLabel.Header&gt;
         &lt;TextBlock Text="Name :"/&gt;
      &lt;/Intersoft:FieldLabel.Header&gt;
      &lt;TextBox Width="200" Text="John Doe"&gt;&lt;/TextBox&gt;
   &lt;/Intersoft:FieldLabel&gt;
   &lt;Intersoft:FieldLabel&gt;
      &lt;Intersoft:FieldLabel.Header&gt;
         &lt;TextBlock Text="Grade :"/&gt;
      &lt;/Intersoft:FieldLabel.Header&gt;
      &lt;StackPanel Orientation="Horizontal"&gt;
         &lt;Intersoft:UXSliderBar Name="UXSliderBar1" Width="517"
                                Minimum="0" Maximum="100" LargeChange="1"
                                SmallChange="0.1" TickPlacement="BottomRight"
                                HandlesVisibility="Visible"
                                ValueRangeVisibility="Visible" Value="55"
                                AutoTooltipVisibility="Visible"
                                AutoTooltipFormat="F0" Ticks="0 55 65 75 85"
                                IsMoveToPointEnabled="True" Height="50" /&gt;
         &lt;TextBox Height="27" Width="33" HorizontalAlignment="Left"
                  Text="{Binding Value, ElementName=UXSliderBar1,
                         Converter={StaticResource GradeConverter}}"/&gt;
      &lt;/StackPanel&gt;
   &lt;/Intersoft:FieldLabel&gt;
&lt;/StackPanel&gt;</pre><p>When you run the project, the final results will look like the following illustration.<br />
<img src="http://www.intersoftpt.com/tdn/downloads/UXSliderBar4.png" alt="UXSliderBar control" /></p>
<p>When you drag the slider bar to determine the value, it will automatically convert the value into string, and place the grade into the Textbox.</p>
<h2>Summary</h2>
<p>In this post, you have learned how to initially create UXSliderBar and configure its basic settings. You also have been guided on how to create data conversion and bind it to a Textbox control.</p>
<p>For more information about the scenario, you can download the sample <a title="Reference sample for UXSliderBar" href="http://www.intersoftpt.com/tdn/downloads/ClientUIMVVMBlogApp.zip">here</a>. To see all available features, see <a title="UXSliderBar Overview" href="http://www.intersoftpt.com/Support/ClientUI/Documentation/#url=UXSliderBar.html" target="_blank">UXSliderBar Overview</a>. If you have questions or feedback about UXSliderBar or other ClientUI controls, please feel free to post them to our <a title="Intersoft Community" href="http://www.intersoftpt.com/Community" target="_blank">Community Forum</a>.</p>
<p>Regards,</p>
<p>-Martin-</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2011/03/use-uxsliderbar-to-simplify-data-entry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coming in ClientUI 5: Versatile Resizable Control for Silverlight &amp; WPF</title>
		<link>http://blog.intersoftsolutions.com/2011/03/coming-in-clientui-5-versatile-resizable-control-for-silverlight-wpf/</link>
		<comments>http://blog.intersoftsolutions.com/2011/03/coming-in-clientui-5-versatile-resizable-control-for-silverlight-wpf/#comments</comments>
		<pubDate>Fri, 11 Mar 2011 11:54:58 +0000</pubDate>
		<dc:creator><![CDATA[Jimmy Petrus]]></dc:creator>
				<category><![CDATA[2011 R1]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[Resizable Layout]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/2011/03/11/coming-in-clientui-5-versatile-resizable-control-for-silverlight-wpf/</guid>
		<description><![CDATA[In addition to many new data-centric controls that we will deliver in the upcoming 2011 volume release, ClientUI 5 will also pack-in a handful of new user interface controls. One of the most important additions to the UI lineups is a versatile resizable layout control, [...]]]></description>
				<content:encoded><![CDATA[<img width="466" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/image_thumb52-604x350.png" class="attachment-post-thumbnail wp-post-image" alt="Standard Layout" style="float:right; margin:0 0 10px 10px;" /><p>In addition to many new data-centric controls that we will deliver in the <a href="http://intersoftpt.wordpress.com/2011/02/18/announcing-webui-studio-2011-roadmap/">upcoming 2011 volume release</a>, ClientUI 5 will also pack-in a handful of new user interface controls. One of the most important additions to the UI lineups is a versatile resizable layout control, powerful enough to cover a range of common layout scenarios.</p>
<p>A resizable layout control is an essential user interface in today’s modern applications, allowing users to resize a certain section of the interface, or even collapse it entirely to increase screen real estate. Whether you realized it or not, most of the applications you used everyday incorporate a resizable layout, from Windows Explorer, Outlook, to Visual Studio and iTunes. The importance of such fundamental interface motivates us to add a resizable layout control in the next major release of ClientUI, which is also used in a number of upcoming high-end controls such as scheduler, document viewer and more.</p>
<p>Although seems simple, a resizable layout control can be hard-to-use if not thoughtfully architected. In this blog post, I will detail some of the key features of our upcoming UXResizablePane control and its architectural design.</p>
<h2>Plug-n-play Resizable Control</h2>
<p>There aren’t so many resizable layout control designed for the Silverlight/WPF platform. Some that I found require a layout manager for the resizing to work. This means that you need to revamp your entire layout even if you want to apply the resizing behavior only to one section of the layout. I found this architecture design to be less-than-ideal as it requires extra learning curves and a major overhaul to the existing layout.</p>
<p>Our resizable control is designed to be completely manager-less, which is probably one of its key strengths. Say that you have an existing page that uses a DockPanel layout similar to the following screenshot, and you would like to make the navigation pane resizable. How easy could that be done, you might ask.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/03/image5.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Standard Layout" border="0" alt="Standard Layout" src="http://intersoftpt.files.wordpress.com/2011/03/image_thumb5.png" width="630" height="482" /></a></p>
<p>In the above scenario, making the left-side navigation resizable is as easy as wrapping it into a UXResizablePane control, no need for a complete layout revamp. See the code example and the results below.</p>
<p>  </p><pre class="crayon-plain-tag"><strong>Existing Layout:</strong>

&lt;Intersoft:DockPanel&gt;

    &lt;Border Background=&quot;{StaticResource NavBackground}&quot; 
            BorderBrush=&quot;Gray&quot; BorderThickness=&quot;1&quot;&gt;
         &lt;Grid&gt;
              &lt;Intersoft:UXItemsControl x:Name=&quot;NavigationItemsContainer&quot; 
                ItemContainerStyle=&quot;{StaticResource NavigationButtonStyle}&quot;&gt;
                   ...
              &lt;/Intersoft:UXItemsControl&gt;
         &lt;/Grid&gt;
    &lt;/Border&gt;

    ...

&lt;/Intersoft:DockPanel&gt;

<strong>Resizable Layout:</strong>

&lt;Intersoft:DockPanel&gt;

    &lt;<strong>Intersoft:UXResizablePane</strong> Background=&quot;{StaticResource NavBackground}&quot; 
            BorderBrush=&quot;Gray&quot; BorderThickness=&quot;1&quot;&gt;
         &lt;Grid&gt;
              &lt;Intersoft:UXItemsControl x:Name=&quot;NavigationItemsContainer&quot; 
                ItemContainerStyle=&quot;{StaticResource NavigationButtonStyle}&quot;&gt;
                   ...
              &lt;/Intersoft:UXItemsControl&gt;
         &lt;/Grid&gt;
    &lt;/<strong>Intersoft:UXResizablePane</strong>&gt;

    ...

&lt;/Intersoft:DockPanel&gt;</pre><p></p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/03/image6.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Resizable layout using UXResizablePane" border="0" alt="Resizable layout using UXResizablePane" src="http://intersoftpt.files.wordpress.com/2011/03/image_thumb6.png" width="642" height="439" /></a></p>
<p>As seen in the above illustration, the left-side navigation pane is now resizable through the provided thumb in the right-edge of the control. As in common desktop applications, users simply drag the resize thumb (indicated by the resize cursor) to start resizing.</p>
<p>Since the UXResizablePane manages the layout by its own, it doesn’t require a specific external controller to know its existence. One of the benefits of such design is that the UXResizablePane can work flawlessly with any built-in Silverlight/WPF panels, whether it’s a StackPanel, WrapPanel, or a Grid.</p>
<p>Another benefit of “manager-less” layout architecture is that developers can use the control without extra learning curves. You can use the same layout properties that you’ve accustomed to, such as applying MinWidth and MaxWidth to the control. When MaxWidth is set, users cannot resize the control larger than the specified MaxWidth value.</p>
<h2>Expandable/Collapsible Layout</h2>
<p>In addition to the resizing feature, UXResizablePane also sports a built-in expand/collapse user interface located in the header section of the control. Derived from the headered content model, you can completely customize the header element of the control through style or template.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/03/image7.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Collapsible panel" border="0" alt="Collapsible panel" src="http://intersoftpt.files.wordpress.com/2011/03/image_thumb7.png" width="521" height="338" /></a></p>
<p>When collapsed, only the Expand button element of the control is visible, which can be customized through the MinWidth property. The appearance of both the header and button element are fully customizable.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/03/image8.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" border="0" alt="image" src="http://intersoftpt.files.wordpress.com/2011/03/image_thumb8.png" width="539" height="316" /></a></p>
<h2>Flexible 4-Edge Resize Docking</h2>
<p>Another great feature of the UXResizablePane is its flexibility to support resize docking in either vertical or horizontal direction. You can actually place the resize thumb in any of the four-edge of the layout: Left, Top, Bottom or Right. For example, if you wish to make the details content vertically resizable, then you set the <strong>ResizeDock</strong> property to <strong>Top</strong>.</p>
<p>In the following illustration, the UXResizablePane is applied to the details content of the Products page. Notice that the expand and collapse button will automatically adjust itself to the appropriate direction based on the <strong>ResizeDock</strong> property.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/03/image9.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Vertical resizable layout" border="0" alt="Vertical resizable layout" src="http://intersoftpt.files.wordpress.com/2011/03/image_thumb9.png" width="642" height="437" /></a></p>
<h2>Bi-directional Resizing Mode</h2>
<p>When we say versatile, we really meant it. Not only it can be used with any inline panels like DockPanel, StackPanel, or Grid; UXResizablePane can also be used to resize non-inline panels such as floating popup, or the dropdown list of a combo box.</p>
<p>The following code example shows how to customize the dropdown list of UXComboBox, which turns a static popup into a resizable popup. Thanks to the loosely-coupled UI design in all ClientUI controls, customization has never been this easy!</p>
<p></p><pre class="crayon-plain-tag">&lt;Intersoft:UXPopup x:Name=&quot;PopupElement&quot; 
           BoundaryOffset=&quot;{TemplateBinding BoundaryOffset}&quot; ...&gt;

    &lt;<strong>Intersoft:UXResizablePane</strong> AllowExpandCollapse=&quot;False&quot; HeaderVisibility=&quot;Collapsed&quot; 
          ResizeThumbVisibility=&quot;Collapsed&quot; CornerThumbVisibility=&quot;Visible&quot; 
          CornerThumbResizeMode=&quot;VerticalAndHorizontal&quot;&gt;

            &lt;Intersoft:UXScrollViewer x:Name=&quot;ScrollElement&quot; Padding=&quot;2&quot;&gt;
                        &lt;ItemsPresenter x:Name=&quot;ItemsPresenter&quot;/&gt;
            &lt;/Intersoft:UXScrollViewer&gt;

       &lt;/<strong>Intersoft:UXResizablePane</strong>&gt;
&lt;/Intersoft:UXPopup&gt;</pre><p></p>
<p>The results look like the following.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/03/image10.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Resizable combo box" border="0" alt="Resizable combo box" src="http://intersoftpt.files.wordpress.com/2011/03/image_thumb10.png" width="365" height="264" /></a></p>
<p>With the <strong>CornerThumbResizeMode</strong> property set to <strong>VerticalAndHorizontal</strong>, users can drag the corner thumb to resize the popup in both vertical and horizontal direction.</p>
<p>There are still a lot possibilities that you can do with UXResizablePane, hopefully this blog post gives you some cool ideas and insight. The next blog posts would be focused on new exciting tools that we’ll ship in 2011 R1. Stay tuned!</p>
<p>Best,<br />
  <br />Jimmy</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2011/03/coming-in-clientui-5-versatile-resizable-control-for-silverlight-wpf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UXGridView CTP3: Feature-complete Grid for Silverlight &amp; WPF</title>
		<link>http://blog.intersoftsolutions.com/2011/03/uxgridview-ctp3-feature-complete-grid-for-silverlight-wpf/</link>
		<comments>http://blog.intersoftsolutions.com/2011/03/uxgridview-ctp3-feature-complete-grid-for-silverlight-wpf/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 18:03:35 +0000</pubDate>
		<dc:creator><![CDATA[Jimmy Petrus]]></dc:creator>
				<category><![CDATA[2011 R1]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[CTP]]></category>
		<category><![CDATA[QueryDescriptor]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[UXGridView]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/2011/03/03/uxgridview-ctp3-feature-complete-grid-for-silverlight-wpf/</guid>
		<description><![CDATA[I hope you’ve enjoyed the second CTP of our upcoming data controls released a couple weeks ago, which includes MVVM-ready data validation and data editing capabilities, as well as customizable editing control architecture. Make sure you also check out Andry’s blog posts covering the editing [...]]]></description>
				<content:encoded><![CDATA[<img width="558" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/image_thumb29-604x292.png" class="attachment-post-thumbnail wp-post-image" alt="Row details with expand button" style="float:right; margin:0 0 10px 10px;" /><p>I hope you’ve enjoyed the <a href="http://intersoftpt.wordpress.com/2011/02/21/uxgridview-ctp2-mvvm-data-editing/" target="_blank">second CTP</a> of our upcoming data controls released a couple weeks ago, which includes MVVM-ready data validation and data editing capabilities, as well as customizable editing control architecture. Make sure you also check out Andry’s blog posts covering the editing features in-depth <a href="http://intersoftpt.wordpress.com/2011/02/25/uxgridview-part-4-data-editing-the-mvvm-way-with-commands/" target="_blank">here</a> and <a href="http://intersoftpt.wordpress.com/2011/03/01/uxgridview-part-5-using-custom-editing-controls/" target="_blank">here</a>. </p>
<p>Today, I’m excited to announce the third CTP release of our forthcoming UXGridView control. The release includes the expected feature sets according to the CTP milestone described in my earlier post <a href="http://intersoftpt.wordpress.com/2011/02/07/introducing-uxgridview-the-mvvm-ready-grid-for-silverlight-and-wpf/" target="_blank">here</a>, plus a handful of nice additions such as enhanced row details, new expander column, and a sophisticated Gmail-style column checker.</p>
<p>Some of the key highlights in this new CTP are discussed in the following.</p>
<h2>QueryDescriptor Enhancement</h2>
<p>The QueryDescriptor now includes RaiseQueryChanged() method, thanks to <a href="http://www.linkedin.com/groupItem?view=&amp;gid=124074&amp;type=member&amp;item=43411780&amp;commentID=32173627&amp;qid=a9e3f27f-2329-48ca-b6b4-faf03595aac4&amp;goback=.gmp_124074#commentID_32173627" target="_blank">Werner Grift</a> for the nice feedback in the LinkedIn group discussion. With the new method, you can programmatically raise the QueryChanged event in your ViewModel, such as when a related view has changed, or when the view needs to be refreshed due to user interaction like button click (called through the delegate command).</p>
<h2>Improved Row Details and Hierarchical Grid</h2>
<p>The row details feature receives major update in this new CTP release, which now works with the new expander column. The expander column contains a toggle button which is convenient for users to expand or collapse the row details at runtime, see the illustration below.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/03/image.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Row details with expand button" border="0" alt="Row details with expand button" src="http://intersoftpt.files.wordpress.com/2011/03/image_thumb.png" width="642" height="292" /></a></p>
<p>With the new expander column, it’s now possible to use the row details for more advanced business scenarios, for instances, implementing a hierarchical/nested grid such as in Customer-Orders scenario. </p>
<p>Another interesting scenario is the support to load the child data “on demand” based on the expanded item. UXGridView now includes a new property called ExpandedItem, making it possible for you to bind the child data on demand in the ViewModel. Both WCF RIA and DevForce samples are provided to demonstrate how to achieve such scenario.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/03/image1.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Nested UXGridView" border="0" alt="Nested UXGridView" src="http://intersoftpt.files.wordpress.com/2011/03/image_thumb1.png" width="621" height="482" /></a></p>
<p>Notice that the paging and other settings can be applied individually in the child grid for best performance and results.</p>
<h2>New Select Column</h2>
<p>When I got the CTP build fresh from the lab, this particular new feature looks to be the most impressive. It’s one of my favorite features, and certainly deserves to be one of yours. Take a look at the screenshot below.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/03/image2.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Select column with row checker" border="0" alt="Select column with row checker" src="http://intersoftpt.files.wordpress.com/2011/03/image_thumb2.png" width="622" height="544" /></a></p>
<p>Although seems common, the select column feature is not available in any other Silverlight/WPF grids in the market – not the one with correct implementation.</p>
<p>The interesting point about this feature is its automatic checked items persistence capability. This means that if you check all the rows in page 1, then go to page 2, the previously checked items will remain persisted. This behavior also applies consistently in all the grid operations such as sorting and grouping. In the above example, we verified the persistence concept by binding the CheckedItems property to a list box which shows all the checked items regardless of the paged view scope.</p>
<p>With the feature correctly implemented along with the MVVM support, it will be useful in many scenarios in business applications – think of web-based mail applications such as Gmail or Hotmail for examples.</p>
<h2>Deferred Scrolling Mode</h2>
<p>Another nice feature that we managed to include in this CTP release is the deferred scrolling mode. When enabled, dragging the thumb of the vertical scrollbar will not update the view immediately. Instead, an intuitive visual hint will appear near the scrollbar indicating the target row of the scroll position. See the screenshot below for details.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/03/image3.png"><img style="padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Deferred scrolling with customizable visual hint" border="0" alt="Deferred scrolling with customizable visual hint" src="http://intersoftpt.files.wordpress.com/2011/03/image_thumb3.png" width="642" height="405" /></a></p>
<p>This scrolling mode is particularly useful when you have relatively large amount of rows, and also allowing users to quickly scan the information as they scroll through the viewport.</p>
<h2>Standards-Compliant User Experiences</h2>
<p>As in our good tradition of development, all Intersoft’s UI controls are designed with the best user experiences that conform to the ISO Standards 9241, including the focus and unfocused behavior, keyboard&#160; navigation using arrow keys, and many more.</p>
<p>In this new CTP release, the UXGridView now shows a dimmed focus visual style when the control doesn’t have focus. This enables users to intuitively responding to the user interface based on the visual state presented in the application. The following illustration shows the unfocused visual state of the UXGridView.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/03/image4.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="ISO-standards UX" border="0" alt="ISO-standards UX" src="http://intersoftpt.files.wordpress.com/2011/03/image_thumb4.png" width="632" height="575" /></a></p>
<h2>Download the CTP3 Bits</h2>
<p>In summary, the CTP3 release includes nearly-complete feature sets of UXGridView planned for final release later this month. So far, the latest CTP includes full MVVM support for server data access, server paging and filtering, data validation, editing, customizable edit controls, row details, multiple selection, checker column, deferred scroll mode, flexible appearance and layout settings, and much more. The final release will include more advanced features such as data exporting, data virtualization, and an advanced column filter interface.</p>
<p>Click <a href="http://www.intersoftpt.com/ClientUI/Intersoft.ClientUI.Data.CTP3.zip">here</a> to download the CTP3 bits and test-drive the new UXGridView features today. The download package includes latest ClientUI assemblies as well as updated and new samples for both Silverlight and WPF platforms.</p>
<p>Enjoy the new CTP bits! We’d love to hear what you think about the new features available in CTP3, please post your feedback, questions or issues to our <a href="http://www.intersoftpt.com/Community/ClientUI">community forum</a>.</p>
<p>All the best,    <br />Jimmy</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2011/03/uxgridview-ctp3-feature-complete-grid-for-silverlight-wpf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enhanced ClientUI Navigation Framework for WPF</title>
		<link>http://blog.intersoftsolutions.com/2011/01/enhanced-clientui-navigation-framework-for-wpf/</link>
		<comments>http://blog.intersoftsolutions.com/2011/01/enhanced-clientui-navigation-framework-for-wpf/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 04:48:52 +0000</pubDate>
		<dc:creator><![CDATA[Jimmy Petrus]]></dc:creator>
				<category><![CDATA[2010 R2]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[Enhancements]]></category>
		<category><![CDATA[Update]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/2011/01/27/enhanced-clientui-navigation-framework-for-wpf/</guid>
		<description><![CDATA[In my ClientUI blog series last year, I have covered the importance of navigation infrastructure which makes the application’s overall user experiences. There were many other details that I described in the blog post, including our support for nested navigation, easy role-based security configuration and [...]]]></description>
				<content:encoded><![CDATA[<img width="466" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/image_thumb122-604x350.png" class="attachment-post-thumbnail wp-post-image" alt="Windows 7 Control Panel" style="float:right; margin:0 0 10px 10px;" /><p>In my ClientUI blog series last year, I have covered the importance of navigation infrastructure which makes the application’s overall user experiences. There were many other details that I described in the blog post, including our support for nested navigation, easy role-based security configuration and more. You can read about them in my blog post <a href="http://intersoftpt.wordpress.com/2010/06/29/clientui-part-5-the-supercharged-silverlight-navigation/">here</a>.</p>
<p>While the previous blog post gave impressions that the navigation framework was designed only for Silverlight, I would like to clarify that it is not. The ClientUI navigation framework supports both WPF browser and WPF desktop application very well since its initial release last year. </p>
<p>In this blog post, I will explain the essence of creating navigable desktop application, and tour the ClientUI navigation framework in WPF.</p>
<h2>Navigation in Desktop Applications</h2>
<p>When you hear about the ‘navigation’ term, what’s quickly popped up in your mind would be it’s a browser application. That’s true, navigation has always been always associated to the browser and the web. Unfortunately, many developers today disregards navigation infrastructure in desktop applications, and thought that the navigation is irrelevant in the desktop context.</p>
<p>As much as developers talk about desktop-style web applications, the fact is that desktop applications are revolutionizing toward web-style user interface. And one of the most prominent aspects in a web-style interface is always the navigation – it exactly means that content must be easily navigable. Surprisingly, you can easily find the kind of navigable desktop applications almost anywhere in your daily computing life, from Windows 7’s Control Panel and IIS Manager, to Windows Media Player, iTunes, and more.</p>
<p>Let’s take a look at Windows 7’s control panel interface for a clear picture of a navigable desktop application.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/01/image12.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Windows 7 Control Panel" border="0" alt="Windows 7 Control Panel" src="http://intersoftpt.files.wordpress.com/2011/01/image_thumb12.png" width="642" height="392" /></a></p>
<p>Based on the above illustration, there are at least five great benefits for building navigable desktop applications:</p>
<ol>
<li>Journal management.      <br />When you see Back and Forward (also known as Journal) buttons, you can quickly tell that it is a navigable application. The journal management allows users to easily navigate back and forth to the previously visited content.       <br />&#160; </li>
<li>Direct content access.      <br />One of the best things about navigable interface is that it allows users to navigate a specific content directly. This is usually done through a simple breadcrumb, or a menu address bar such as introduced in latter version of Windows.       <br />&#160; </li>
<li>Multiple content source.      <br />In a navigable-designed application, you can facilitate users with easy navigation from multiple sources, be it the address bar in the top, the hyperlink in the left pane, or just about anywhere else. This allows users to navigate the applications in the way they accustomed to.       <br />&#160; </li>
<li>Searchable content.      <br />By designing your application to support navigation, it is easy to provide a search interface, allowing users to quickly finding the content they desire. Most traditional applications that don’t support navigation would face technical difficulties and limitations since there are no consistent interface that manages the entire navigation processes.       <br />&#160; </li>
<li>Reusable content.      <br />Last but not least, a well-designed navigation application will refactor each navigable content into a reusable form, allowing the content to be easily accessible directly, to be linked from multiple sources, and to be searchable. In development terms, the reusable content means easier to extend and better maintainability. </li>
</ol>
<h2>Creating WPF Navigation Application with ClientUI</h2>
<p>Now, I hope that I have well pointed out the main reasons why navigation is crucial for making a great user experience, regardless of whether it’s browser-based apps or desktop apps.</p>
<p>One of the features that set ClientUI apart is its powerful, thoughtfully-designed navigation framework. The main building block of the navigation framework such as the UXFrame and UXPage, implements unified API between Silverlight and WPF. This allows you to use the identical XAML markup between both platforms, which greatly minimizes the learning curves. Learn more about the fundamental of ClientUI navigation framework <a href="http://www.intersoftpt.com/Support/ClientUI/Docs/NavigationOverview.html">here</a>.</p>
<p>You might be wondering what it means with unified API in my previous statement. The easiest way to understand it is to take a piece of Silverlight’s XAML code and paste it to the WPF. In this case, try to copy the Silverlight’s built-in <strong>Frame </strong>element and use it in WPF, then see if you can run the project without errors. Clearly, the compiler will stop you as soon as you pressed F5.</p>
<p>The biggest challenges we faced in the WPF counterpart of ClientUI’s navigation framework is to come up with features to match the Silverlight’s counterpart, such as the URI mapping and mapped navigation source mechanism. URI mapping is a very nice feature that allows you to navigate to a content via a short and friendly address, instead of a lengthy one, for instance, navigating to a customers page can be done with a /Customers identifier instead of /Views/Customers.xaml.</p>
<p>The <strong>UXFrame</strong> element, which is the core of ClentUI’s navigation building block, supports URI mapping, thus enabling you to define the XAML such as the following.</p>
<p>  </p><pre class="crayon-plain-tag">&lt;Intersoft:UXFrame Name=&quot;ContentFrame&quot;&gt;
       &lt;Intersoft:UXFrame.UriMapper&gt;
             &lt;Intersoft:UriMapper&gt;
                  &lt;Intersoft:UriMapping Uri=&quot;&quot; 
                             MappedUri=&quot;/Views/Home.xaml&quot;/&gt;

                  &lt;Intersoft:UriMapping Uri=&quot;/{page}&quot;
                             MappedUri=&quot;/Views/{page}.xaml&quot;/&gt;
              &lt;/Intersoft:UriMapper&gt;
       &lt;/Intersoft:UXFrame.UriMapper&gt;
&lt;/Intersoft:UXFrame&gt;</pre><p></p>
<p>But, the URI mapping support doesn’t happen overnight. The main process of the mapping itself needs to be enhanced at the core framework level, because the navigation can be initiated through hyperlinks, buttons, toolbar buttons, or programmatically through APIs. For a quick illustration, the navigation framework should understand the mapped navigation request from a hyperlink such as shown below.</p>
<p></p><pre class="crayon-plain-tag">&lt;Intersoft:UXHyperlinkButton NavigateUri=&quot;/Customers&quot; /&gt;</pre><p></p>
<p>In summary, the ClientUI navigation framework for WPF does not only include an enhanced navigation Frame, but a whole new navigation framework that spans from the core architecture to navigation sources and other advanced navigation features.</p>
<p>To help you quickly getting started with ClientUI navigation framework, I have created a simple WPF navigation application that you can use as a template. See the following illustration.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/01/image13.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="ClientUI navigation application for WPF" border="0" alt="ClientUI navigation application for WPF" src="http://intersoftpt.files.wordpress.com/2011/01/image_thumb13.png" width="642" height="450" /></a></p>
<p>As seen in the above illustration, ClientUI navigation framework provides all the tools you need to create rich navigation user interface, including the journal button, navigation button, direct content access through hyperlink and other navigation sources, and more.</p>
<p>The navigation application sample above also demonstrates a number of unique features, such as page transition and automatic navigation direction. You will notice that new navigation would apply a fading transition effect, navigating backward would apply a fly-in effect, while navigating forward would apply a fly-out effect.</p>
<p>The navigation sample project consisted of the start up page, and three pages that represent the content for Home, Settings and About. The ViewModels classes are also included for your convenience.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/01/image14.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="ClientUI navigation project" border="0" alt="ClientUI navigation project" src="http://intersoftpt.files.wordpress.com/2011/01/image_thumb14.png" width="615" height="482" /></a></p>
<p>Download the sample project <a href="http://www.intersoftpt.com/ClientUI/ClientUINavApp_WPF.zip">here</a>, feel free to play around and enhance it, and use it to start your next WPF navigation application. Note that you will need the latest ClientUI build (4.0.5000.3), more about the hotfix in the later section below.</p>
<h2>Silverlight Out-of-Browser, Well Supported</h2>
<p>One of the area in Silverlight that cross the desktop boundary is its out-of-browser application support. Along with the coverage for navigation in WPF desktop application, I’m pleased to share that the ClientUI navigation framework also supports Silverlight’s out-of-browser in all its glory – the URI mapping, visual transitions, automatic navigation detection, role-based security, and more. Here’s a snapshot of the OOB support.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/01/image15.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" border="0" alt="image" src="http://intersoftpt.files.wordpress.com/2011/01/image_thumb15.png" width="593" height="482" /></a></p>
<p>Best of all, download the Silverlight OOB project sample <a href="http://www.intersoftpt.com/ClientUI/ClientUINavApp_OOB.zip">here</a>. Have fun with it!</p>
<h2>Get the Free Update</h2>
<p>In case you haven’t aware, we recently posted the January ‘11 hotfix for ClientUI, which includes significant enhancements to WPF navigation and other stability fixes. </p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/01/image16.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" border="0" alt="image" src="http://intersoftpt.files.wordpress.com/2011/01/image_thumb16.png" width="573" height="245" /></a></p>
<p>To see the complete list, please head to <a href="http://intersoftpt.com/Support/ClientUI/VersionHistory/4.0.5000/">Intersoft Support Center – Version History</a>.</p>
<p>The hotfix is free for existing customers, which can be easily downloaded and installed via Intersoft Update Manager. If you haven’t used Update Manager before, make sure you check out this <a href="http://intersoftpt.com/Build/ApplyHotfix">article</a>.</p>
<p>In the next post, I will detail more about “nested navigation” and “global navigation state” in desktop applications, which explains the design decisions why URI mapping has to existed in the first place. For now, enjoy the latest hotfix, download the project samples and happy navigating!</p>
<p>All the best,<br />
  <br />Jimmy Petrus </p>
<p>Chief Software Architect</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2011/01/enhanced-clientui-navigation-framework-for-wpf/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>New Year Goodies: Mac &amp; Metro-style Tab Controls, Updated Samples, and more</title>
		<link>http://blog.intersoftsolutions.com/2011/01/new-year-goodies-mac-metro-style-tab-controls-updated-samples-and-more/</link>
		<comments>http://blog.intersoftsolutions.com/2011/01/new-year-goodies-mac-metro-style-tab-controls-updated-samples-and-more/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 06:17:27 +0000</pubDate>
		<dc:creator><![CDATA[Jimmy Petrus]]></dc:creator>
				<category><![CDATA[2010 R2]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Style]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/2011/01/05/new-year-goodies-mac-metro-style-tab-controls-updated-samples-and-more/</guid>
		<description><![CDATA[2010 was a big, important year to Intersoft. We closed the year with a total of 240 new and quality controls across all .NET development platforms: ASP.NET, Silverlight 3, Silverlight 4 and WPF 4. And best of all,&#160; our overall position in the market share [...]]]></description>
				<content:encoded><![CDATA[<img width="432" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/uxtabcontrol1-560x350.png" class="attachment-post-thumbnail wp-post-image" alt="Built-in Aero style" style="float:right; margin:0 0 10px 10px;" /><p>2010 was a big, important year to Intersoft. We closed the year with a total of 240 new and quality controls across all .NET development platforms: ASP.NET, Silverlight 3, Silverlight 4 and WPF 4. And best of all,&#160; our overall position in the market share has increased by nearly 300%, positioning us as one of the most preferred component vendors in the world. You can read more about our news <a href="http://intersoftpt.com/Corporate/News">here</a>, and press releases <a href="http://intersoftpt.com/Corporate/PressRelease">here</a>.</p>
<p>To kick off the new year, I’d like to share with you a number of exciting goodies that we have prepared exclusively for you. Here they are.</p>
<h2>Mac-style Tab Control</h2>
<p>The recent 2010 R2 release features a sleek tab control, one of the 60 new controls introduced in the release. The tab control sports a clean, Aero-style theme, shown in the following image.</p>
<p><img title="Built-in Aero style" alt="Built-in Aero style" src="http://intersoftpt.files.wordpress.com/2010/12/uxtabcontrol.png" /></p>
<p>While the predefined Aero-style is clearly nice, you may want to achieve a different visual style, particularly to the one ideal in Mac-style applications. The good news is that our tab control is fully customizable, allowing us to revamp the style completely without affecting the functionality.</p>
<p>Here’s a shot for the Mac-style tab control, with all its elegant look and feel in pixel details.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/01/image.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Mac style tab control" border="0" alt="Mac style tab control" src="http://intersoftpt.files.wordpress.com/2011/01/image_thumb.png" width="579" height="334" /></a></p>
<p>And yes, the theme source is provided! See next.</p>
<h2>Metro-style Tab Control</h2>
<p>One of the designs that often requested is the Metro UI style navigation control. Metro UI is introduced by Microsoft, originally in its Zune software, and recently popularized in its Windows Phone 7 software. The concept is fundamentally based on clean and minimalist design and guidelines, avoiding glossy and gradients.</p>
<p>We thought you’d love a Metro-style tab control, thus we designed one for you. Here’s the screen shot.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/01/image1.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Metro UI style tab control" border="0" alt="Metro UI style tab control" src="http://intersoftpt.files.wordpress.com/2011/01/image_thumb1.png" width="525" height="383" /></a></p>
<p>Looks modern and clean, isn’t it? I’d surely love to hear your thought about it!</p>
<p>Metro UI, apparently, is not only about static interface, it’s all about authentic user experiences. In addition to the clean look, Metro style emphasizes on subtle animation during navigation. The animation should also be applied differently based on the navigation direction. For instances, applying a SlideLeft transition when users switched to the previous tab, and a SlideRight transition for the next tab.</p>
<p>The new tab control allows you to achieve this so-called Metro user experience in just few clicks. Simply set the <strong>EnablePageTransition</strong> and <strong>AutoDetectNavigationDirection </strong>property to true, it’s that easy! Thanks to the ClientUI’s solid content transition architecture and navigation framework that made this possible. You can learn more about it <a href="http://www.intersoftpt.com/Support/ClientUI/Docs/UXTabControl.html">here</a>.</p>
<p>And finally, grab the source for the Mac and Metro style <a href="http://www.intersoftpt.com/ClientUI/UXTabControl_Styles.zip">here</a>.</p>
<p>Note: Each new style is nicely refactored in a single XAML file, which you can find in the /Assets/Styles folder. To use it in your project, simply copy the desired XAML file and paste it in your project, then add it as a resource in your App.xaml.</p>
<h2>Enhanced Currency Editor</h2>
<p>The ClientUI live sample has been recently updated with latest bits that include a number of enhancements, particularly on the currency editor released last week.</p>
<p>What’s really cool about the new currency editor is its intuitive editing experiences that were specifically designed for currency input. For instances, pressing minus key will turn toggle the value to positive or negative. The negative value may have its own visual presentation, such as showing the value in red. See the following illustration.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/01/image2.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Currency Editor" border="0" alt="Currency Editor" src="http://intersoftpt.files.wordpress.com/2011/01/image_thumb2.png" width="624" height="338" /></a></p>
<p>Another interesting feature is the culture-aware decimal input, particularly to enter the minor number. In the U.S. culture, users press the period key to input minor number, while users with France culture press the comma key.</p>
<p>The latest version further improves the currency editing experiences with a smart minor number insertion, a result of our consultation with a group of accounting experts! You can now place the keyboard cursor anywhere in the minor number areas and type a number to insert at that position, while pressing backspace naturally delete the previous number and shift the entire minor number back to the left.</p>
<p>You can try many of the currency editor’s capabilities in the Various Format sample, which you can access online <a href="http://live.clientui.com/#/UXInput/UXCurrencyEditor/VariousCurrencyEditor">here</a>.</p>
<p>These new enhancements, along with other minor issues fix, will be accumulated into a “RTM refresh” installer due next week. Stay tuned for the next announcement.</p>
<h2>Localization Manager Sample</h2>
<p>In my previous <a href="http://intersoftpt.wordpress.com/2010/12/16/coming-in-r2-mvvm-localization-manager-multi-bindings/">post</a>, I have touched the surface about Localization Manager, a new framework in ClientUI 4 that allows you to localize your Silverlight/WPF application using MVVM pattern and dynamic resource.</p>
<p>You can learn more about localization manager <a href="http://www.intersoftpt.com/Support/ClientUI/Docs/LocalizationOverview.html">here</a>, and download the sample bits <a href="http://www.intersoftpt.com/ClientUI/ClientUILocalizationManager.zip">here</a>.</p>
<p><img src="http://intersoftpt.files.wordpress.com/2010/12/image1.png" width="500" height="361" /></p>
<h2>Offline ClientUI 4 Documentation</h2>
<p>ClientUI 4 offline documentation in CHM format is now available. Download it <a href="http://www.intersoftpt.com/Support/ClientUI/ClientUI.chm">here</a>. Note that you may need to unblock the CHM if you cannot open the file after downloaded.</p>
<p>If you preferred an online experience, you can browse the documentation <a href="http://www.intersoftpt.com/Support/ClientUI/Documentation">here</a>.</p>
<hr />
<p>Once again, happy 2011! And enjoy the exclusive goodies. </p>
<p>PS: Make sure you’ve installed 2010 R2 to find the new controls. You can download the free trial <a href="http://www.clientui.com/download">here</a>.</p>
<p>All the best,    <br />Jimmy Petrus</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2011/01/new-year-goodies-mac-metro-style-tab-controls-updated-samples-and-more/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Create a Rich Silverlight Message Board using MVVM Pattern and WCF RIA Services</title>
		<link>http://blog.intersoftsolutions.com/2010/09/create-a-rich-silverlight-message-board-using-mvvm-pattern-and-wcf-ria-services/</link>
		<comments>http://blog.intersoftsolutions.com/2010/09/create-a-rich-silverlight-message-board-using-mvvm-pattern-and-wcf-ria-services/#comments</comments>
		<pubDate>Sat, 11 Sep 2010 03:40:02 +0000</pubDate>
		<dc:creator><![CDATA[Jimmy Petrus]]></dc:creator>
				<category><![CDATA[2010 R1]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[ClientUI 2010]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[MVVM]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[WCF RIA Services]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/2010/09/11/create-a-rich-silverlight-message-board-using-mvvm-pattern-and-wcf-ria-services/</guid>
		<description><![CDATA[In the past several months, I’ve been actively blogging about our next-generation user interface library for the Silverlight and WPF development, which has just been RTM-ed three weeks ago. I hope you’ve enjoyed playing around with the new controls and exciting features that we delivered. [...]]]></description>
				<content:encoded><![CDATA[<img width="466" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/image_thumb25-604x350.png" class="attachment-post-thumbnail wp-post-image" alt="Rich Silverlight Message Board Objectives" style="float:right; margin:0 0 10px 10px;" /><p>In the past several months, I’ve been actively <a href="http://en.wordpress.com/tag/clientui-2010/" target="_blank">blogging</a> about our next-generation user interface library for the Silverlight and WPF development, which has just been RTM-ed three weeks ago. I hope you’ve enjoyed playing around with the new controls and exciting features that we delivered. In case you haven’t got your copy, click <a href="http://www.clientui.com/getstarted" target="_blank">here</a> to get started.</p>
<p>While we’ve shipped hundreds of great samples that you can learn, or experience directly <a href="http://www.clientui.com/showcase" target="_blank">online</a>, you may have realized there wasn’t a single blog post yet that guides you through creating basic Silverlight application using the ClientUI controls from front-to-back. The reason for that is because we’re still in progress preparing a comprehensive set of learning resources for you. Eventually we will have around 40-50 new videos, walkthroughs, and how-to articles available by the next week or two at the latest. So, stay tuned for our announcement in this blog site.</p>
<p>Not too long after I posted my blog about <a href="http://intersoftpt.wordpress.com/2010/08/30/top-10-must-see-clientui-samples/" target="_blank">Top 10 Must-See Samples</a> last week, I received several emails from customers that asked for a quick walkthrough to use the ClientUI controls in a real-world scenario, that is, retrieving data from the server-side database via WCF RIA Services and apply MVVM pattern on the top of that!</p>
<p>At the same time, we were migrating the message board from an earlier version of our Silverlight demo (known as Sirius which is now discontinued and completely replaced with the new ClientUI Showcase) to the new ClientUI library. The new message board happened to use the MVVM pattern, and it connects to the database via WCF RIA Services too. Just perfect, that’s an ideal topic to be blogged about!</p>
<p>In this blog post, I will share the key techniques that we used to build a richer Silverlight message board using the ClientUI library. Instead of writing a lengthy walkthrough from the ground zero, this blog post will be more focused on the key challenges and common obstacles found while building rich user interface using MVVM pattern in the combination with WCF RIA Services, Entity Framework and Domain Service. So, to effectively follow this post, you’re required to have basic understanding in the MVVM pattern and WCF RIA Services at the minimum. To learn more about MVVM pattern, read my previous post <a href="http://intersoftpt.wordpress.com/2010/04/24/clientui-part-3-comprehensive-mvvm-framework-for-silverlight-development/" target="_blank">MVVM Framework in Silverlight</a>.</p>
<h1>Setting The Goal</h1>
<p>Before we delved deeper into the project discussion, it’s important to set the preliminary goals and objectives of the project – outlining the general features, modules, presentation pattern, data access and connectivity and the application pattern.</p>
<p>The message board project that we want to achieve using ClientUI was planned to have the following objectives:</p>
<ul>
<li>An elegant and clean user interface that emphasizes on ease-of-use and appealing experience.</li>
<li>High performance and responsive UI. Load only initial chunk of data at first load, then allow users to load more data on demand.</li>
<li>Customizable layout and appearance that is completely data-driven. I.e, callout style corresponds to the color that user selects.</li>
<li>Data access and connectivity to server-side SQL database through WCF RIA Services.</li>
<li>Use MVVM pattern for rapid and consistent application development.</li>
<li>Use Entity Framework and Domain Service for data query and operation.</li>
</ul>
<p>The following illustration shows the user interface and basic message board functionality that we want to achieve in this project.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2010/09/image.png"><img style="display:inline;border-width:0;" title="Rich Silverlight Message Board Objectives" src="http://intersoftpt.files.wordpress.com/2010/09/image_thumb.png" border="0" alt="Rich Silverlight Message Board Objectives" width="752" height="596" /></a></p>
<h1>Project Overview</h1>
<p>Our Silverlight message board project is consisted of two projects. The first is a Silverlight project that contains all the Silverlight assets, such as XAML, styles, converters, view models, and more. See the following illustration.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2010/09/image1.png"><img style="display:inline;border-width:0;" title="Silverlight Project" src="http://intersoftpt.files.wordpress.com/2010/09/image_thumb1.png" border="0" alt="Silverlight Project" width="436" height="787" /></a></p>
<p>Some base classes such as the <strong>ModelBase</strong>, <strong>ViewModelBase</strong> and many of the ViewModels are already provided by the templates shipped in the ClientUI, thus makes it easier and faster for you to get started and work on the MVVM classes. This message board project itself is based on the <strong>Intersoft ClientUI MVVM Application</strong> Project Template.</p>
<p>The other project is an ASP.NET Web Application project that contains server-side business object, entity framework, and data access layer to access the SQL database. The Web project is also used to host the Silverlight application which typically delivered in the form of XAP. See the following illustration.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2010/09/image2.png"><img style="display:inline;border-width:0;" title="ASP.NET Web Project" src="http://intersoftpt.files.wordpress.com/2010/09/image_thumb2.png" border="0" alt="ASP.NET Web Project" width="435" height="532" /></a></p>
<h1>UI (View) Challenges</h1>
<p>One of the biggest advantages of modern client development – such as the Silverlight or WPF – is that it enables a complete separation on the application engineering process. Our team of designers and developers firstly agreed on the main layout, structure and the navigation part of the project – and then each division can work on the project in parallel, which means that designers can go on creating the styles and assets, while developers can go ahead with the codes, MVVM and other business requirements.</p>
<p>Many Silverlight projects that we built recently were significantly accelerated with the efficient collaboration process. Take this message board project as an example. When the designer team delivers the style assets, the overall UI can be dramatically transformed, from plain white to stunning wooden-warm look and feel, while did not affect any of the application features and behaviors being worked by the developers.</p>
<p>In this post, I won’t be covering the styling and beautifying process of the project. Let’s focus on the technical difficulties in the UI (View) part.</p>
<h2>Building the Feedback Items List</h2>
<p>In most app dev, you typically start with the data presentation part. In Silverlight, there are a number of presentation patterns that you can use to display a list of data, such as grid view, list box, items control and more. The items control is the most ideal presentation for this project as we wanted to show the list of messages in nicely arranged callouts which doesn’t require selection or other advanced features.</p>
<p>Using the user interface library that we have in ClientUI, we can quickly achieve our goal to display the feedback list using an <strong>UXItemsControl</strong> that contains a list of callouts. The <strong>ItemsPanel</strong> of the UXItemsControl can be flexibly changed to <strong>WrapPanel</strong> to provide automatic wrapping layout.</p>
<p>The implementation is quite straightforward, see the following XAML code snippet.</p><pre class="crayon-plain-tag"><span class="kwrd">&lt;</span><span class="html">Intersoft:UXScrollViewer</span> <span class="attr">VerticalScrollBarVisibility</span><span class="kwrd">="Auto"</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">Grid</span><span class="kwrd">&gt;</span>
                 <span class="kwrd">&lt;</span><span class="html">Intersoft:UXItemsControl</span> <span class="attr">HorizontalAlignment</span><span class="kwrd">="Center"</span> <span class="attr">MaxWidth</span><span class="kwrd">="1024"</span>
                                           <span class="attr">ItemsSource</span><span class="kwrd">="{Binding Path=Feedbacks}"</span><span class="kwrd">&gt;</span></pre><p></p><pre class="crayon-plain-tag"><span class="kwrd"> </span>                         <span class="kwrd">&lt;</span><span class="html">Intersoft:UXItemsControl.ItemsPanel</span><span class="kwrd">&gt;</span>
                               <span class="kwrd">&lt;</span><span class="html">ItemsPanelTemplate</span><span class="kwrd">&gt;</span>
                                     <span class="kwrd">&lt;</span><span class="html">Intersoft:WrapPanel</span><span class="kwrd">/&gt;</span>
                               <span class="kwrd">&lt;/</span><span class="html">ItemsPanelTemplate</span><span class="kwrd">&gt;</span>
                        <span class="kwrd">&lt;/</span><span class="html">Intersoft:UXItemsControl.ItemsPanel</span><span class="kwrd">&gt;</span></pre><p></p><pre class="crayon-plain-tag"><span class="kwrd"> </span>                         <span class="kwrd">&lt;</span><span class="html">Intersoft:UXItemsControl.ItemTemplate</span><span class="kwrd">&gt;</span></pre><p></p><pre class="crayon-plain-tag"><span class="kwrd">&lt;</span><span class="html">StackPanel</span> <span class="attr">HorizontalAlignment</span><span class="kwrd">="Center"</span><span class="kwrd">&gt;</span>
                                     <span class="kwrd">&lt;</span><span class="html">Intersoft:CallOut</span><span class="kwrd">&gt;</span></pre><p></p><pre class="crayon-plain-tag"><span class="kwrd">&lt;</span><span class="html">TextBlock</span> <span class="attr">Text</span><span class="kwrd">="{Binding Quote}"</span><span class="kwrd">/&gt;</span>
                                     <span class="kwrd">&lt;/</span><span class="html">Intersoft:CallOut</span><span class="kwrd">&gt;</span></pre><p></p><pre class="crayon-plain-tag"><span class="kwrd">&lt;</span><span class="html">TextBlock</span> <span class="attr">Name</span><span class="kwrd">="IdentityText"</span><span class="kwrd">&gt;</span>
                                           <span class="kwrd">&lt;</span><span class="html">Run</span> <span class="attr">Text</span><span class="kwrd">="{Binding DisplayName}"</span><span class="kwrd">/&gt;</span></pre><p></p><pre class="crayon-plain-tag"><span class="kwrd">&lt;</span><span class="html">LineBreak</span><span class="kwrd">/&gt;&lt;</span><span class="html">Run</span> <span class="attr">Text</span><span class="kwrd">="{Binding Title}"</span><span class="kwrd">/&gt;</span>
                                     <span class="kwrd">&lt;/</span><span class="html">TextBlock</span><span class="kwrd">&gt;</span>
                              <span class="kwrd">&lt;/</span><span class="html">StackPanel</span><span class="kwrd">&gt;</span></pre><p></p><pre class="crayon-plain-tag"><span class="kwrd">&lt;/</span><span class="html">Intersoft:UXItemsControl.ItemTemplate</span><span class="kwrd">&gt;</span></pre><p></p><pre class="crayon-plain-tag"><span class="kwrd">&lt;/</span><span class="html">Intersoft:UXItemsControl</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;/</span><span class="html">Grid</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">Intersoft:UXScrollViewer</span><span class="kwrd">&gt;</span></pre><p>Now we’ve got the feedback items listed in plain callout that arranged using wrapping layout.</p>
<h2>Using ItemTemplateSelector to Set Template Based on Data</h2>
<p>Our next objective is to customize the callout style based on the color that user selected when posting a message. In ASP.NET, this process is normally handled in the codes by handling the OnDataBound or InitializeRow event, then check against the data and then set the desired properties or styles accordingly.</p>
<p>That’s not the case in WPF or Silverlight. Our approach would be using WPF-style data binding technique where the actual templating can be entirely defined in the XAML. Thanks to all our items control lineups, we provide the <strong>ItemTemplateSelector</strong> and <strong>ItemContainerStyleSelector</strong> to address this challenges elegantly. This also complies with the MVVM pattern where separation of concern is prioritized.</p>
<p>As the name implies, the <strong>ItemTemplateSelector</strong> enables the items control to select which item template to use based on the condition evaluated in the <strong>DataTemplateSelector</strong> class. We can create our own class that implement <strong>DataTemplateSelector</strong> class, and then overrides the <strong>SelectTemplate</strong> method to provide our own logic to determine the item template selection process.</p>
<p>The following C# code snippet shows the <strong>CalloutTemplateSelector</strong> class to process the callout template selection based on the data.</p><pre class="crayon-plain-tag">[ContentProperty(<span class="str">"CalloutTemplates"</span>)]
<span class="kwrd">public</span> <span class="kwrd">class</span> CalloutTemplateSelector : DataTemplateSelector
{
    <span class="kwrd">public</span> CalloutTemplates CalloutTemplates { get; set; }

    <span class="kwrd">public</span> CalloutTemplateSelector()
    {
        <span class="kwrd">this</span>.CalloutTemplates = <span class="kwrd">new</span> CalloutTemplates();
    }

    <span class="kwrd">public</span> <span class="kwrd">override</span> DataTemplate SelectTemplate(<span class="kwrd">object</span> item, DependencyObject container)
    {
        Feedback data = item <span class="kwrd">as</span> Feedback;
        CalloutItemTemplate template =</pre><p></p><pre class="crayon-plain-tag"><span class="kwrd">this</span>.CalloutTemplates.SingleOrDefault(</pre><p></p><pre class="crayon-plain-tag">c =&gt; c.Color.ToLower() == data.FavoriteColor.ToLower());

        <span class="kwrd">if</span> (template == <span class="kwrd">null</span>)
            template = <span class="kwrd">this</span>.CalloutTemplates[0];

        <span class="kwrd">return</span> template.Template;
    }
}</pre><p>The following XAML code snippet shows the <strong>ItemTemplateSelector</strong> implementation that uses the <strong>CalloutTemplateSelector</strong> class shown above to display different style of callout according to the data.</p><pre class="crayon-plain-tag"><span class="kwrd">&lt;</span><span class="html">Intersoft:UXItemsControl</span> <span class="attr">ItemsSource</span><span class="kwrd">="{Binding Path=Feedbacks}"</span><span class="kwrd">&gt;</span>
          ...
          <span class="kwrd">&lt;</span><span class="html">Intersoft:UXItemsControl.ItemTemplateSelector</span><span class="kwrd">&gt;</span>
                  <span class="kwrd">&lt;</span><span class="html">local:CalloutTemplateSelector</span><span class="kwrd">&gt;</span>
                         <span class="kwrd">&lt;</span><span class="html">local:CalloutItemTemplate</span> <span class="attr">Color</span><span class="kwrd">="Natural"</span> <span class="attr">Template</span><span class="kwrd">="{StaticResource Callout_Natural}"</span><span class="kwrd">/&gt;</span>
                         <span class="kwrd">&lt;</span><span class="html">local:CalloutItemTemplate</span> <span class="attr">Color</span><span class="kwrd">="Wood"</span> <span class="attr">Template</span><span class="kwrd">="{StaticResource Callout_Wood}"</span><span class="kwrd">/&gt;</span>
                         <span class="kwrd">&lt;</span><span class="html">local:CalloutItemTemplate</span> <span class="attr">Color</span><span class="kwrd">="DarkBrown"</span> <span class="attr">Template</span><span class="kwrd">="{StaticResource Callout_DarkBrown}"</span><span class="kwrd">/&gt;</span>
                         <span class="kwrd">&lt;</span><span class="html">local:CalloutItemTemplate</span> <span class="attr">Color</span><span class="kwrd">="Black"</span> <span class="attr">Template</span><span class="kwrd">="{StaticResource Callout_Black}"</span><span class="kwrd">/&gt;</span>
                  <span class="kwrd">&lt;/</span><span class="html">local:CalloutTemplateSelector</span><span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;/</span><span class="html">Intersoft:UXItemsControl.ItemTemplateSelector</span><span class="kwrd">&gt;</span>
         ...
<span class="kwrd">&lt;/</span><span class="html">Intersoft:UXItemsControl</span><span class="kwrd">&gt;</span></pre><p>The <strong>ItemTemplateSelector</strong> and <strong>ItemContainerStyleSelector</strong> are two of the most commonly used data binding techniques in WPF – which we bring to the Silverlight platform through ClientUI.</p>
<h2>Setting the Callout Pointer Target</h2>
<p>Since we’re using a nice Callout shape to represent a message in this project, we quickly realize that we wanted to show the callout pointer to target the user name element beneath it.</p>
<p>As you can see the “red lines” in the following illustration, each message has different pointer target location since each message has different length based on the text that users provide.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2010/09/image3.png"><img style="display:inline;border-width:0;" title="Callout Pointer" src="http://intersoftpt.files.wordpress.com/2010/09/image_thumb3.png" border="0" alt="Callout Pointer" width="605" height="318" /></a></p>
<p>Although our <strong>UXCallout</strong> has complete customization over the pointer location – such as the <strong>PointerOffset</strong>, <strong>PointerPoint1</strong>, etc – it could be a tedious task to calculate the pointer offset manually. Furthermore, the manual calculation won’t be a perfect solution as we aren’t allowed to access the “UI element” from within the view model.</p>
<p>Fortunately, our <strong>UXCallout</strong> is equipped with a nice feature called <strong>TargetElement</strong>. By simply setting the <strong>TargetElement</strong> to the desired element, the pointer of the Callout will be automatically pointing to the center offset of the specified target element. And since <strong>TargetElement</strong> is a dependency property, that means you can easily specify it in your template or binding.</p>
<p>To achieve our UI objective such as shown in the above illustration, we can set the <strong>TargetElement</strong> of our callout to target the user name element through Binding. See the following XAML code snippet.</p><pre class="crayon-plain-tag">...
 <span class="kwrd">&lt;</span><span class="html">Intersoft:CallOut</span> <span class="attr">Style</span><span class="kwrd">="{StaticResource CalloutStyle}"</span>
                    <span class="attr">Background</span><span class="kwrd">="{StaticResource DarkBrownGradient}"</span>
                    <span class="attr">BorderBrush</span><span class="kwrd">="{StaticResource DarkBrownBorder}"</span>
                    <span class="attr">TargetElement</span><span class="kwrd">="{Binding ElementName=IdentityText}"</span> <span class="attr">Foreground</span><span class="kwrd">="White"</span><span class="kwrd">&gt;</span></pre><p></p><pre class="crayon-plain-tag">...</pre><p></p><pre class="crayon-plain-tag"><span class="kwrd">&lt;/</span><span class="html">Intersoft:CallOut</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">TextBlock</span> <span class="attr">Name</span><span class="kwrd">="IdentityText"</span> <span class="attr">Style</span><span class="kwrd">="{StaticResource IdentityStyle}"</span><span class="kwrd">&gt;</span>
...</pre><p>So far, we’ve addressed numerous key challenges related to the UI (View). Although we haven’t covered all view issues entirely in this topic, you should get sufficient ideas on how to solve the other UI challenges using similar pattern.</p>
<h1>MVVM Challenges</h1>
<p>As we’re building the project to be entirely based on the MVVM pattern, it becomes obvious that most challenges and issues would arise as you designed the user experiences for your application.</p>
<p>In this project, two of the major MVVM challenges are: calling asynchronous data retrieval from within the view model and how to deal with the view model separation for the “New Post”.</p>
<p>The following illustration shows the view models required in this project.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2010/09/image4.png"><img style="display:inline;border-width:0;" title="ViewModels Overview" src="http://intersoftpt.files.wordpress.com/2010/09/image_thumb4.png" border="0" alt="ViewModels Overview" width="752" height="607" /></a></p>
<p>As seen in the above illustration, the message board project is mainly comprised of two view models, named <strong>FeedbackListViewModel</strong> and <strong>NewFeedbackViewModel</strong>.</p>
<h2>The FeedbackListViewModel Overview</h2>
<p>The <strong>FeedbackListViewModel</strong> encapsulates the logic for the feedback list, such as retrieving the feedback list, getting the total count of the feedback, loading more feedback and managing the busy state for the data operation.</p>
<p>The following illustration shows the overview of FeedbackListViewModel.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2010/09/image5.png"><img style="display:inline;border-width:0;" title="FeedbackListViewModel Overview" src="http://intersoftpt.files.wordpress.com/2010/09/image_thumb5.png" border="0" alt="FeedbackListViewModel Overview" width="752" height="452" /></a></p>
<p><strong>Binding the Feedback List to View Model</strong></p>
<p>The data binding for the items control to the view model is quite straightforward. It can be achieved by defining the Binding expression to the Feedbacks property available in the view model. The FeedbackListViewModel itself is defined directly as the DataContext of the UXPage in the XAML.</p>
<p>The following code shows how the feedback view model and the items source is defined. When the data context is set, it will automatically become available to the children in the tree. That enables the UXItemsControl to be notified with the available data context, then take its Feedbacks collection as the items source.</p><pre class="crayon-plain-tag"><span class="kwrd">&lt;</span><span class="html">Intersoft:UXPage</span><span class="kwrd">&gt;</span>
     ...
    <span class="kwrd">&lt;</span><span class="html">Intersoft:UXPage.DataContext</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ViewModels:FeedbackListViewModel</span><span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">Intersoft:UXPage.DataContext</span><span class="kwrd">&gt;</span>
     ...

     <span class="kwrd">&lt;</span><span class="html">Intersoft:UXItemsControl</span> <span class="attr">ItemsSource</span><span class="kwrd">="{Binding Path=Feedbacks}"</span> <span class="kwrd">/&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">Intersoft:UXPage</span><span class="kwrd">&gt;</span></pre><p><strong>Load More Command</strong></p>
<p>In the main view, we loaded only a chunk of initial records for highly responsive user experience. When you scroll down to the bottom edge of the list, you’ll notice the Load More Data button. This button will remain enabled when there’s more data to be loaded. To achieve this function, we’ll define the <strong>DelegateCommand</strong> in the view model, and then bind it to the hyperlink button through <strong>Command</strong> property.</p>
<p>The <strong>DelegateCommand</strong>, which is available in ClientUI Framework library, exposes <strong>CanExecute</strong> and <strong>Executed</strong> delegate which can be easily defined in the view model. The <strong>CanExecute</strong> result, interestingly, will automatically reflect the user interface elements that bound to it. In this case, the <strong>CanExecute</strong> result will automatically disable or enable the Load More button. This is an ideal solution for the MVVM pattern, all we need to do is to define the condition when the command can be executed, and the actual logic that will be processed when executed.</p>
<p>The following C# code shows the <strong>DelegateCommand</strong> initialization and the methods that handle its <strong>CanExecute</strong> and <strong>Executed</strong> delegate.</p><pre class="crayon-plain-tag"><span class="kwrd">public</span> FeedbackListViewModel()
{
      LoadMoreCommand = <span class="kwrd">new</span> DelegateCommand(ExecuteLoadMore, CanLoadMore);
}

<span class="kwrd">private</span> <span class="kwrd">bool</span> CanLoadMore(<span class="kwrd">object</span> parameter)
{
      <span class="kwrd">return</span> (<span class="kwrd">this</span>.LoadedPage &lt; <span class="kwrd">this</span>.TotalPages);
}

<span class="kwrd">private</span> <span class="kwrd">void</span> ExecuteLoadMore(<span class="kwrd">object</span> parameter)
{
      LoadFeedback();
}</pre><p>The following code shows how the delegate command is bound to the hyperlink button in the XAML.</p><pre class="crayon-plain-tag"><span class="kwrd">&lt;</span><span class="html">Intersoft:UXHyperlinkButton</span> <span class="attr">VerticalAlignment</span><span class="kwrd">="Bottom"</span> <span class="attr">IsToggleButton</span><span class="kwrd">="False"</span>
                             <span class="attr">Command</span><span class="kwrd">="{Binding LoadMoreCommand}"</span>
                             <span class="attr">CommandCannotExecute</span><span class="kwrd">="Collapsed"</span><span class="kwrd">&gt;</span>

            ...

<span class="kwrd">&lt;/</span><span class="html">Intersoft:UXHyperlinkButton</span><span class="kwrd">&gt;</span></pre><p><strong>Managing Busy State</strong></p>
<p>In my <a href="http://intersoftpt.wordpress.com/2010/06/29/clientui-part-5-the-supercharged-silverlight-navigation/" target="_blank">previous blog post</a>, I’ve briefly discussed about the busy management support in certain ClientUI controls, specifically in the navigation frame and page.</p>
<p>The busy state management is particularly useful in this project as we’re retrieving data from the server asynchronously. Fortunately, ClientUI already include built-in features to manage the busy state directly in the navigation frame level. This eliminates the needs to define busy indicator in every page which could be a tedious task.</p>
<p>The busy state management feature in navigation frame is beyond the “classic” busy indicator. In addition to showing the “busy” indicator, it will also block the entire screen from user interaction. Furthermore, all commands-nature elements such as hyperlinks and buttons, will be automatically disabled to prevent users to inadvertently execute the command. See the following illustration to get a clearer picture.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2010/09/image6.png"><img style="display:inline;border-width:0;" title="Busy State Management" src="http://intersoftpt.files.wordpress.com/2010/09/image_thumb6.png" border="0" alt="Busy State Management" width="752" height="596" /></a></p>
<p>Now, let’s take a look how we can elegantly implement the feature in the view model to comply with our MVVM pattern architecture.</p>
<p>First, we define a property named <strong>IsBusy</strong> in the view model such as shown below:</p><pre class="crayon-plain-tag"><span class="kwrd">public</span> <span class="kwrd">bool</span> IsBusy
{
     get
     {
         <span class="kwrd">return</span> _isBusy;
     }
     set
     {
         <span class="kwrd">if</span> (_isBusy != <span class="kwrd">value</span>)
         {
             _isBusy = <span class="kwrd">value</span>;
             OnPropertyChanged(<span class="str">"IsBusy"</span>);
         }
     }
 }</pre><p>Second, we can bind this property to the <strong>IsBusy</strong> property available in the <strong>UXPage</strong>. This property automatically notifies the navigation frame that hosted it to manage the busy state according to the given value.</p><pre class="crayon-plain-tag"><span class="kwrd">&lt;</span><span class="html">Intersoft:UXPage</span>
    <span class="attr">Title</span><span class="kwrd">="ClientUI Message Board"</span>
    <span class="attr">BlockUIOnBusy</span><span class="kwrd">="True"</span>
    <span class="attr">IsBusy</span><span class="kwrd">="{Binding IsBusy}"</span><span class="kwrd">&gt;</span>
   ...
<span class="kwrd">&lt;/</span><span class="html">Intersoft.UXPage</span><span class="kwrd">&gt;</span></pre><p>Note that the UXPage has <strong>BlockUIOnBusy </strong>property, which indicates whether the UI (User Interface) should be blocked when <strong>IsBusy </strong>is true.</p>
<p>Finally, we can now easily control the busy state from by simply setting the <strong>IsBusy</strong> property in the view model. The following code snippet shows an example that sets the busy state when retrieving data.</p><pre class="crayon-plain-tag"><span class="kwrd">private</span> <span class="kwrd">void</span> LoadFeedback()
{
    <span class="rem">// Indicates that the view model is processing something</span>
    <span class="rem">// It will automatically reflect the state in the UI (View)</span>
    IsBusy = <span class="kwrd">true</span>;

    _context.Load(_context.GetFeedbacksQuery(<span class="kwrd">this</span>.LoadedPage + 1),
                    (o) =&gt;
                    {
                        <span class="kwrd">if</span> (o.IsComplete)
                        {
                            ...
                            <span class="rem">// Sets the state back to normal</span>
                            IsBusy = <span class="kwrd">false</span>;
                        }
                    }
                , <span class="kwrd">true</span>);
}</pre><p>Pretty cool, isn’t it? Feel free to let me know if you’ve feedback or found other ways to implement the busy state management in your apps.</p>
<p><strong>Showing the Status Window</strong></p>
<p>When a data operation is completed, it’s nice to show a quick status that lets users aware of the request status. In this project, we’re going to use a lightweight window such as <strong>UXWindowChrome</strong> to show the status.</p>
<p>The challenge here is how we can efficiently control the status window (UI element) from the view model. There are a number of ways to implement this.</p>
<p>First, if you want to control the status window from within view model, you can dedicate a status window for each operation, then bind its <strong>IsClientVisible</strong> to your view model to control its visibility.</p>
<p>In our case, we would like to have only one instance of status window which is reused for multiple data operations, such as retrieving data, add new, and so on. In such scenario, the best practice is to handle this in the UI (View) level because all operations are mostly UI-related.</p>
<p>The good thing with this approach is that it shows the benefits of the view model that implements <strong>INotifyPropertyChanged</strong> which can be useful in a number of scenarios. Let’s take a look at the following example.</p><pre class="crayon-plain-tag"><span class="rem">// Executes when the user navigates to this page.</span>
<span class="kwrd">protected</span> <span class="kwrd">override</span> <span class="kwrd">void</span> OnNavigatedTo(NavigationEventArgs e)
{
    <span class="rem">// We can easily access to the view model from view through the DataContext</span>
    FeedbackListViewModel viewModel = <span class="kwrd">this</span>.DataContext <span class="kwrd">as</span> FeedbackListViewModel;

    <span class="rem">// Handle the view model's PropertyChanged </span>
    <span class="rem">// Remember to detach it in OnNavigatingFrom override to avoid memory leak.</span>
    viewModel.PropertyChanged += <span class="kwrd">new</span> PropertyChangedEventHandler(ViewModel_PropertyChanged);
}

<span class="kwrd">private</span> <span class="kwrd">void</span> ViewModel_PropertyChanged(<span class="kwrd">object</span> sender, PropertyChangedEventArgs e)
{
    FeedbackListViewModel viewModel = <span class="kwrd">this</span>.DataContext <span class="kwrd">as</span> FeedbackListViewModel;

    <span class="kwrd">if</span> (e.PropertyName == <span class="str">"LoadedPage"</span>)
    {
          <span class="kwrd">if</span> (viewModel.LoadedPage &gt; 1)
          {
               <span class="rem">// Set the required status, i.e, the label text and visibility. </span></pre><p></p><pre class="crayon-plain-tag"><span class="kwrd">this</span>.StatusLabel.Text = <span class="str">"10 more posts loaded"</span>;
               <span class="kwrd">this</span>.StatusWindow.IsClientVisible = <span class="kwrd">true</span>;</pre><p></p><pre class="crayon-plain-tag"><span class="rem">// Hide the status after 2 seconds. </span>
               Utility.ExecuteTimeOut(2,
                        () =&gt;
                        {
                            <span class="kwrd">this</span>.StatusWindow.IsClientVisible = <span class="kwrd">false</span>;
                        });
          }
    }
}</pre><p>Here’s what the result looks like:</p>
<p><a href="http://intersoftpt.files.wordpress.com/2010/09/image7.png"><img style="display:inline;border-width:0;" title="Showing Status Window" src="http://intersoftpt.files.wordpress.com/2010/09/image_thumb7.png" border="0" alt="Showing Status Window" width="463" height="200" /></a></p>
<h2>The NewFeedbackViewModel Overview</h2>
<p>The <strong>NewFeedbackViewModel</strong> implementation is unique in a way that it is actually a children UI control that reside in the FeedbackList page. To enable the Callout and its entire children to use a different view model, we can set the <strong>DataContext</strong> of the Callout to the <strong>NewFeedbackViewModel</strong> which can be directly defined in the XAML code.</p>
<p>See the following illustration for the view model overview.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2010/09/image8.png"><img style="display:inline;border-width:0;" title="NewFeedbackViewModel Overview" src="http://intersoftpt.files.wordpress.com/2010/09/image_thumb8.png" border="0" alt="NewFeedbackViewModel Overview" width="752" height="491" /></a></p>
<p><strong>Showing the Callout in View Model</strong></p>
<p>One of the most challenging difficulties in MVVM is how a modern user interface such as callout can be efficiently managed using the MVVM pattern. In this project, we’re using the <strong>UXCallout</strong> control to display an iPad-style ‘Pop Over’, allowing users to conveniently write a new message in compelling user experience.</p>
<p>Since the <strong>UXCallout</strong> is built using the ClientUI’s popup architecture that complies with <a href="http://intersoftpt.wordpress.com/2010/05/21/clientui-part-4-rich-ui-meets-iso-standards/" target="_blank">ISO-standards</a> in usability, we can easily control its visibility through the <strong>IsOpen</strong> property.</p>
<p>The following code shows how the two-way binding is done.</p><pre class="crayon-plain-tag"><span class="kwrd">&lt;</span><span class="html">Intersoft:UXCallOut</span> <span class="attr">x:Name</span><span class="kwrd">="Write_Callout"</span> <span class="attr">HorizontalAlignment</span><span class="kwrd">="Right"</span> <span class="attr">Width</span><span class="kwrd">="0"</span></pre><p></p><pre class="crayon-plain-tag"><span class="attr">PreferredPosition</span><span class="kwrd">="Bottom"</span>
                     <span class="attr">IsOpen</span><span class="kwrd">="{Binding IsAdding, Mode=TwoWay}"</span><span class="kwrd">&gt;</span>
                     ...
<span class="kwrd">&lt;/</span><span class="html">Intersoft:UXCallOut</span><span class="kwrd">&gt;</span></pre><p>While we’re now able to control the UXCallout’s visibility from the view model, the state is not synchronized with the “Write” button. Fortunately, all button lineups in ClientUI include toggle functionality. This way, we can make the button to use toggle behavior and bind its <strong>IsChecked</strong> to the <strong>IsOpen</strong> of the <strong>UXCallout</strong> using two-way binding.</p>
<p>See the code snippet below that shows the XAML definition for the toolbar button.</p><pre class="crayon-plain-tag"><span class="kwrd">&lt;</span><span class="html">Intersoft:UXToolBarButton</span> <span class="attr">x:Name</span><span class="kwrd">="Button_Write"</span> <span class="attr">Content</span><span class="kwrd">="Write"</span>
                           <span class="attr">IsToggleButton</span><span class="kwrd">="True"</span>
                           <span class="attr">IsChecked</span><span class="kwrd">="{Binding IsOpen, ElementName=Write_Callout, Mode=TwoWay}"</span>
                           <span class="attr">IsCheckedChanged</span><span class="kwrd">="Button_Write_IsCheckedChanged"</span></pre><p></p><pre class="crayon-plain-tag"><span class="kwrd">                           ...</span></pre><p></p><pre class="crayon-plain-tag"><span class="kwrd">/&gt;</span>
<strong></strong></pre><p><strong>Binding the Input Controls</strong></p>
<p>Next, the input controls can be bound directly to the Feedback entity which we have defined in the view model. This process is quite basic and straightforward as we’ve covered it in previous posts.</p>
<p>The following XAML code shows the input controls binding.</p><pre class="crayon-plain-tag"><span class="kwrd">&lt;</span><span class="html">Intersoft:UXItemsControl</span> <span class="attr">CornerRadius</span><span class="kwrd">="4"</span> <span class="attr">ItemContainerStyle</span><span class="kwrd">="{StaticResource CalloutInputStyle}"</span><span class="kwrd">&gt;</span>

           <span class="kwrd">&lt;</span><span class="html">Intersoft:UXTextBox</span> <span class="attr">x:Name</span><span class="kwrd">="Quote_Input"</span> <span class="attr">Height</span><span class="kwrd">="80"</span> <span class="attr">WatermarkText</span><span class="kwrd">="What do you think about ClientUI?"</span>
                                <span class="attr">Text</span><span class="kwrd">="{Binding Feedback.Quote, Mode=TwoWay}"</span> <span class="attr">AcceptsReturn</span><span class="kwrd">="True"</span></pre><p></p><pre class="crayon-plain-tag"><span class="attr">VerticalScrollBarVisibility</span><span class="kwrd">="Auto"</span> <span class="kwrd">/&gt;</span></pre><p></p><pre class="crayon-plain-tag"><span class="kwrd">&lt;</span><span class="html">Intersoft:UXTextBox</span> <span class="attr">x:Name</span><span class="kwrd">="Name_Input"</span> <span class="attr">WatermarkText</span><span class="kwrd">="Your name"</span>
                                <span class="attr">Text</span><span class="kwrd">="{Binding Feedback.Name, Mode=TwoWay, ValidatesOnDataErrors=True}"</span>
                                <span class="attr">Intersoft:DataBinding</span>.<span class="attr">ClearErrorOnTextInput</span><span class="kwrd">="True"</span><span class="kwrd">/&gt;</span>
               ...
<span class="kwrd">&lt;/</span><span class="html">Intersoft:UXItemsControl</span><span class="kwrd">&gt;</span></pre><p><strong>Using CommandParameter in Radio Button</strong></p>
<p>One of the interesting scenarios in the UI for the new form is how we can design the user interface that allows users to select their preferred color. In our previous demo, this is done using view logic since the MVVM pattern has not existed yet at that time.</p>
<p>In this project, we’re migrating the color selection from the non-standard controls to button controls. The radio button is the most ideal user interface to achieve this objective.</p>
<p>However, since radio button is not a selection control, we can’t easily manage the selection in the same way as in UXListBox. Fortunately,we have the full-blown <strong>Commanding</strong> support in all button lineups. You got the idea, we can bind the radio button to a delegate command, then assign the <strong>CommandParameter</strong> in each radio button to be passed in the delegate command.</p>
<p>The following XAML snippet code shows how the binding is done in XAML.</p><pre class="crayon-plain-tag"><span class="kwrd">&lt;</span><span class="html">Intersoft:UXItemsControl</span> <span class="attr">Orientation</span><span class="kwrd">="Horizontal"</span> <span class="attr">ItemContainerStyle</span><span class="kwrd">="{StaticResource ColorSelectionStyle}"</span><span class="kwrd">&gt;</span>
           <span class="kwrd">&lt;</span><span class="html">Intersoft:UXRadioButton</span> <span class="attr">Background</span><span class="kwrd">="#FFD9D9D9"</span> <span class="attr">ToolTipService</span>.<span class="attr">ToolTip</span><span class="kwrd">="Silver"</span>
                      <span class="attr">Command</span><span class="kwrd">="{Binding SelectColorCommand}"</span> <span class="attr">CommandParameter</span><span class="kwrd">="Silver"</span><span class="kwrd">/&gt;</span>
           <span class="kwrd">&lt;</span><span class="html">Intersoft:UXRadioButton</span> <span class="attr">Name</span><span class="kwrd">="NaturalColor_Input"</span>  <span class="attr">Background</span><span class="kwrd">="#FFFDE6B8"</span> <span class="attr">ToolTipService</span>.<span class="attr">ToolTip</span><span class="kwrd">="Natural"</span>
                      <span class="attr">Command</span><span class="kwrd">="{Binding SelectColorCommand}"</span> <span class="attr">CommandParameter</span><span class="kwrd">="Natural"</span><span class="kwrd">/&gt;</span>
          ...
<span class="kwrd">&lt;/</span><span class="html">Intersoft:UXItemsControl</span><span class="kwrd">&gt;</span></pre><p>And the corresponding view model code in C# here.</p><pre class="crayon-plain-tag"><span class="kwrd">public</span> NewFeedbackViewModel()
{
      <span class="kwrd">this</span>.SelectColorCommand = <span class="kwrd">new</span> DelegateCommand(ExecuteSelectColorCommand);
            ...
}

<span class="kwrd">private</span> <span class="kwrd">void</span> ExecuteSelectColorCommand(<span class="kwrd">object</span> parameter)
{
      <span class="kwrd">this</span>.Feedback.FavoriteColor = parameter.ToString();
}</pre><p>As you become more familiar and fond with the MVVM pattern, you would be able to easily address numerous UI challenges in consistent manner. It also helps you to maintain the codes clean, readable and easy to extend.</p>
<p><strong>Submitting Changes via Domain Context in View Model</strong></p>
<p>Once we’re done with the UI, MVVM and binding, the final step is to perform the real database changes when the “Post” button is clicked. Again, this is done using the same MVVM pattern through Commanding.</p>
<p>Since the logic and data operation is encapsulated in the view model, we did not use the declarative DomainDataSource like in the old demo. Instead, the operation is called in the view model level through method call that automatically generated from the WCF domain service.</p>
<p>Consequently, the domain context is created only once at the <strong>FeedbackListViewModel</strong> level, which can be easily referenced through ParentViewModel in the <strong>NewFeedbackViewModel</strong>. This enables the new record operation to use the same domain context, which properly maintains the current state of the loaded data.</p>
<p>The following code snippet shows how the data operation is implemented.</p><pre class="crayon-plain-tag"><span class="kwrd">private</span> <span class="kwrd">void</span> ExecuteSaveCommand(<span class="kwrd">object</span> parameter)
{
        <span class="kwrd">if</span> (ValidateInput())
        {
                <span class="rem">// set busy to block user interaction</span>
                <span class="kwrd">this</span>.ParentViewModel.IsBusy = <span class="kwrd">true</span>;
                <span class="kwrd">this</span>.ParentViewModel.DomainContext.Feedbacks.Add(<span class="kwrd">this</span>.Feedback);

                <span class="rem">// process changes to server-side through WCF RIA Services</span>
                <span class="kwrd">this</span>.ParentViewModel.DomainContext.SubmitChanges(
                    (o) =&gt;
                    {</pre><p></p><pre class="crayon-plain-tag">...
                    }
      }
}</pre><p><strong>Inserting the New Post to the Parent View Model</strong></p>
<p>Finally, after the data is saved to the server-side, we’re going to reflect the changes to the UI (View). There are a couple of options to do this. You can either refresh the entire list again to show the latest data, or insert only the new record to the current list (delta approach).</p>
<p>We’re going to use the latter approach because it delivers more responsive user interface by eliminating the client-server round trip. Since we have the reference to the parent view model, we can easily access the Feedbacks collection and perform insertion to the collection. As the Feedbacks collection is using <strong>ObservableCollection</strong> type and bound to the <strong>ItemsSource</strong> (see the earlier point above), any changes to the Feedbacks collection will automatically reflect the user interface elements that bound to it. Pretty nice, don’t you agree?</p>
<p>The following code shows the complete process in <strong>ExecuteSaveCommand</strong> which demonstrates how the new Feedback insertion is implemented.</p><pre class="crayon-plain-tag"><span class="kwrd">private</span> <span class="kwrd">void</span> ExecuteSaveCommand(<span class="kwrd">object</span> parameter)
{
      <span class="kwrd">if</span> (ValidateInput())
      {
            <span class="rem">// set busy to block user interaction</span>
            <span class="kwrd">this</span>.ParentViewModel.IsBusy = <span class="kwrd">true</span>;
            <span class="kwrd">this</span>.ParentViewModel.DomainContext.Feedbacks.Add(<span class="kwrd">this</span>.Feedback);

            <span class="rem">// process changes to server-side through WCF RIA Services</span>
            <span class="kwrd">this</span>.ParentViewModel.DomainContext.SubmitChanges(
                    (o) =&gt;
                    {
                        <span class="kwrd">this</span>.ParentViewModel.IsBusy = <span class="kwrd">false</span>;

                        <span class="kwrd">if</span> (!o.HasError)
                        {
                            <span class="rem">// reflect the newly added post to the View</span>
                            <span class="kwrd">this</span>.ParentViewModel.Feedbacks.Insert(0, <span class="kwrd">this</span>.Feedback);

                            <span class="rem">// tell the View that we're done with the saving process</span>
                            <span class="kwrd">this</span>.IsSaved = <span class="kwrd">true</span>;
                            <span class="kwrd">this</span>.IsAdding = <span class="kwrd">false</span>;
                        }
                        <span class="kwrd">else</span>
                        {
                            MessageBoxServiceProvider.ShowError(…);
                            o.MarkErrorAsHandled();
                        }
                    }
                    , <span class="kwrd">null</span>);
      }
      <span class="kwrd">else</span>
      {
           FocusErrorField();
      }
}</pre><p></p>
<h1>Download the Solution</h1>
<p>Want to create your own rich Silverlight message board? Go ahead, click <a href="http://labs.clientui.com/Intersoft.ClientUI.Samples.MessageBoard.zip" target="_blank">here</a> to download the C# project solution and modify it as you like. You can use this message board project as the base to quickly jump start your MVVM project.</p>
<p>The C# project solution includes all the codes mentioned in this blog such as the model, view models and converts, the XAML files, and a stripped-down SQL database to minimize download size. You can also find several nice design stuff in the solution such as the minimalist scroll viewer style, iPad callout style, glass button, a vector refresh symbol and much more.</p>
<p>Note that you will need <strong>SQL Server Express 2008</strong> installed to run the sample. The latest version of <strong>ClientUI</strong> is required as well. If you’re still using build 8 (initial RTM build), I highly suggest you to upgrade to the latest version (build 9) for the best stability and performance. Click <a href="http://www.clientui.com/download" target="_blank">here</a> to download the latest version, and <a href="http://www.intersoftpt.com/Community/ClientUI/Updated-WebUI-Studio-2010-Installer-Is-Now-Available/" target="_blank">here</a> to read the installer change log.</p>
<h1>Conclusion</h1>
<p>So far, you already have some ideas and insights of the key challenges in building Silverlight application using MVVM pattern and WCF RIA Services. Often times, you will deal with the user interface requirements demanded by your users and how you apply the MVVM pattern to address the user interface challenges. Hopefully this message board case study can be useful for you to learn and jump start on using the ClientUI controls with MVVM.</p>
<p>Click <a href="http://live.intersoftpt.com/#/HaveYourSay" target="_blank">here</a> to try the message board online. The following screenshot shows the message board sample that we studied in this post.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2010/09/image9.png"><img style="display:inline;border-width:0;" title="ClientUI Live Message Board" src="http://intersoftpt.files.wordpress.com/2010/09/image_thumb9.png" border="0" alt="ClientUI Live Message Board" width="802" height="603" /></a></p>
<p>Although it may look prettier when integrated into our live showcase (done through SAF and on-demand loading), it’s actually the same project that made available for download.</p>
<p>In the next blog post, I’ll do a quick blog discussing how a ClientUI application can be easily loaded and reused in another ClientUI application domain. For instance, I could load this message board application in a navigation frame of a more complex application, or load it as the content of a window.</p>
<p>For now, I hope you enjoyed the Silverlight message board sample! Let me know if you have any questions or feedback.</p>
<p>All the best,<br />
Jimmy<br />
Chief Software &amp; UX Architect</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2010/09/create-a-rich-silverlight-message-board-using-mvvm-pattern-and-wcf-ria-services/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>
