<?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; Products</title>
	<atom:link href="http://blog.intersoftsolutions.com/category/products/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>Premier Studio 2017 is here.</title>
		<link>http://blog.intersoftsolutions.com/2017/07/premier-studio-2017-is-here/</link>
		<comments>http://blog.intersoftsolutions.com/2017/07/premier-studio-2017-is-here/#comments</comments>
		<pubDate>Mon, 03 Jul 2017 13:03:55 +0000</pubDate>
		<dc:creator><![CDATA[Jimmy Petrus]]></dc:creator>
				<category><![CDATA[2017]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[Announcement]]></category>
		<category><![CDATA[New Release]]></category>
		<category><![CDATA[Premier Studio]]></category>

		<guid isPermaLink="false">http://blog.intersoftsolutions.com/?p=8216</guid>
		<description><![CDATA[Today we&#8217;re excited to announce the general availability of Premier Studio 2017, our latest and most advanced development toolset for web, desktop, and cross-platform mobile development. This release packed-in numerous important updates across all platform lineups since the last year&#8217;s release. One noteworthy milestone is [...]]]></description>
				<content:encoded><![CDATA[<p>Today we&#8217;re excited to announce the general availability of Premier Studio 2017, our latest and most advanced development toolset for web, desktop, and cross-platform mobile development.</p>
<p>This release packed-in numerous important updates across all platform lineups since the last year&#8217;s release. One noteworthy milestone is the full support for Visual Studio 2017 (all editions), bringing in the toolbox, project and item templates, designers and editors, extensions, and get started wizards.</p>
<p><img class="alignnone size-large wp-image-8223" src="http://blog.intersoftsolutions.com/wp-content/uploads/2017/07/WebUI-VS-2017-1024x733.png" alt="WebUI &amp; Visual Studio 2017" width="700" /></p>
<p>Furthermore, this release shipped cumulative updates for WebUI lineups, particularly improved standards compliance and support for latest major browsers such as Chrome 58, Firefox 54, and Safari 10. Several flagship components such as WebGrid Enterprise and WebCombo have received major improvements in client-side data access and templating. Specifically, a new extensible binding foundation has been built, allowing these data powerhorse to be used in conjunction with next-generation templating frameworks that we will introduce in the near future. Finally, with significant reliability updates committed so far, we made sure this release to be most stable Premier Studio release yet, perfectly balancing the major innovations we set forth in previous release.</p>
<p><img class="alignnone size-large wp-image-8226" src="http://blog.intersoftsolutions.com/wp-content/uploads/2017/07/live-samples-1024x698.png" alt="Live Samples" width="700"  /></p>
<p>As for the Crosslight lineup, we will be making it as a separate update through the NuGet channels, so you won&#8217;t find the latest bits in the 2017 installer. There are really a lot of exciting stuff that the team has worked on since the last release, with 1000+ commits and counting so far. It&#8217;s truly an over-delivery this time as we&#8217;re adding new scopes to <a href="http://developer.intersoftsolutions.com/display/crosslight/Crosslight+Roadmap">our roadmap</a> such as Nougat support, transition to Firebase Cloud Messaging, and more. We&#8217;ll keep you posted when the bits is available in NuGet.</p>
<p>Last but not least, the 2017 release is free to download for all customers with active subscriptions. Simply login to your <a href="http://intersoftsolutions.com/account">Intersoft account</a> to start downloading. Enjoy and have fun building your next big apps!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2017/07/premier-studio-2017-is-here/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Started with Premier Studio 2016</title>
		<link>http://blog.intersoftsolutions.com/2016/03/getting-started-with-premier-studio-2016/</link>
		<comments>http://blog.intersoftsolutions.com/2016/03/getting-started-with-premier-studio-2016/#comments</comments>
		<pubDate>Mon, 07 Mar 2016 11:52:18 +0000</pubDate>
		<dc:creator><![CDATA[Nicholas Lie]]></dc:creator>
				<category><![CDATA[2016 R1]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[Crosslight]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[Reference Samples]]></category>
		<category><![CDATA[WebUI]]></category>
		<category><![CDATA[Get Started]]></category>
		<category><![CDATA[Premier Studio 2016]]></category>
		<category><![CDATA[Samples]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[WebUI Studio]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://blog.intersoftsolutions.com/?p=5827</guid>
		<description><![CDATA[In our past releases, getting started with Intersoft Premier Studio was quite inconvenience and tedious. With tons of shortcuts to choose from, you can be easily confused where to start from. In this release, we think hard on what&#8217;s the best possible scenario for users [...]]]></description>
				<content:encoded><![CDATA[<img width="604" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2016/03/getting-started-604x270.png" class="attachment-post-thumbnail wp-post-image" alt="getting-started" style="float:right; margin:0 0 10px 10px;" /><p>In our past releases, getting started with Intersoft Premier Studio was quite inconvenience and tedious. With tons of shortcuts to choose from, you can be easily confused where to start from. In this release, we think hard on what&#8217;s the best possible scenario for users to get started quickly with our products. At the end, we came to a conclusion: <strong>samples</strong>.</p>
<p><img class="aligncenter" src="http://blog.intersoftsolutions.com/wp-content/uploads/2016/03/getting-started.png" alt="getting-started.png" width="700" align="middle" /></p>
<p>Samples provide a hands-on experience for developers as well as practical code for implementing the desired features to their applications. We&#8217;ve made it super easy for you to run the samples and opening the sample solution in Visual Studio, all right from a single web interface.</p>
<h1>Introducing the New Get Started Experience</h1>
<p>When you install Premier Studio, you&#8217;ll get the following dialog box.</p>
<p><img class="aligncenter" src="http://blog.intersoftsolutions.com/wp-content/uploads/2016/03/dialog-box.png" alt="dialog-box.png" width="700" align="middle" /></p>
<p>When you click Finish with the checkbox ticked, a new browser will be opened, this will lead you to a landing page that will help you get started with our products (assuming that you have a working internet connection).</p>
<p><img class="alignnone size-full wp-image-5967" src="http://blog.intersoftsolutions.com/wp-content/uploads/2016/03/getting-started2.png" alt="getting-started2.png" width="1326" height="814" /></p>
<p>Simply select one of the products you would like to get started with, you will be immediately presented with the available samples designed in stunning card view interface. Then hover on the samples you&#8217;re interested in to perform an action.</p>
<p>Note that the Get Started experience works only on Windows with Premier Studio (2016 and above) properly installed.</p>
<h1>Getting Started with WebUI</h1>
<p>Nothing explains better than a video. Here&#8217;s a 1-minute video experience on how to get started with WebUI through the new Get Started experience.</p>
<p><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='604' height='370' src='http://www.youtube.com/embed/FTLtFX4ZTsI?version=3&#038;rel=1&#038;fs=1&#038;autohide=2&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0' allowfullscreen='true'></iframe></span></p>
<p>The samples for WebUI is categorized according to its respective controls, so you can quickly jump to the controls you&#8217;re interested in.</p>
<p><img class="aligncenter" src="http://blog.intersoftsolutions.com/wp-content/uploads/2016/03/webui.png" alt="webui.png" width="700" align="middle" /></p>
<p>When you hover on a sample, you&#8217;ll get the following experience.</p>
<p><img class="aligncenter" src="http://blog.intersoftsolutions.com/wp-content/uploads/2016/03/webgrid-first-experience1.png" alt="webgrid-first-experience.png" width="500" align="middle" /></p>
<p>When you click on <strong>Open Solution</strong>, a new Visual Studio instance that contains the sample will be automatically opened. When you click on <strong>Run Sample</strong>, a locally-running sample for that particular sample will be launched. Clicking on Learn More takes you to the WebGrid documentation.</p>
<h1>Getting Started with Crosslight</h1>
<p>And here&#8217;s a minute-and-a-half video that shows the Get Started experience with Crosslight.</p>
<p><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='604' height='370' src='http://www.youtube.com/embed/2kwHgjbawqI?version=3&#038;rel=1&#038;fs=1&#038;autohide=2&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0' allowfullscreen='true'></iframe></span></p>
<p>The samples for Crosslight are categorized as follows:</p>
<p><img class="aligncenter" src="http://blog.intersoftsolutions.com/wp-content/uploads/2016/03/crosslight.png" alt="crosslight.png" width="700" align="middle" /></p>
<ul>
<li><strong>Basic Samples</strong>: These are the basic and recommended samples if you&#8217;re just starting out with Crosslight. It contains the basic fundamentals of Crosslight development, such as MVVM pattern, data binding, display data list, perform CRUD operation, and more.</li>
<li><strong>App Samples</strong>: These samples showcases small, working apps made with Crosslight.</li>
<li><strong>UI Samples</strong>: These samples showcases various UI components available in Crosslight, such as Crosslight Charting, Crosslight Material Design, Crosslight Signature Pad, Crosslight Maps, Crosslight View Slider and more.</li>
<li><strong>Services Samples</strong>: These samples demonstrates how you can work with Crosslight services which are built-in to the Crosslight ViewModel and other library extensions as well. For example, performing calls, scanning barcode, sending emails, sharing content to social media and more.</li>
<li><strong>Data Samples</strong>: These samples shows you how to work with data-related operations with the built-in repositories and how they work together in harmony with the open-source Crosslight App Framework.</li>
</ul>
<p>When you hover on an item, you&#8217;ll be presented with the following.</p>
<p><img class="aligncenter" src="http://blog.intersoftsolutions.com/wp-content/uploads/2016/03/mvvm-samples.png" alt="mvvm-samples.png" width="500" align="middle" /></p>
<p>When you click on <strong>Download</strong>, you&#8217;ll immediately get a zip file that is immediately runnable using Xamarin Studio or Visual Studio (works on either Mac or Windows). If you click on <strong>Learn More</strong>, you&#8217;ll be taken to the respective sample page in the Developer Center.</p>
<h1>Getting Started with ClientUI</h1>
<p>Last but not least, here&#8217;s another minute-and-a-half video that shows the Get Started experience with ClientUI.</p>
<p><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='604' height='370' src='http://www.youtube.com/embed/mgK21rwJkj0?version=3&#038;rel=1&#038;fs=1&#038;autohide=2&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0' allowfullscreen='true'></iframe></span></p>
<p>The samples for ClientUI are categorized as follows.</p>
<p><img class="aligncenter" src="http://blog.intersoftsolutions.com/wp-content/uploads/2016/03/clientui.png" alt="clientui.png" width="700" align="middle" /></p>
<p>The categorization follows the previous categories available in the <a href="http://live.clientui.com" target="_blank">ClientUI Live Samples</a>. When hovering to an item, you&#8217;ll be presented with the following experience.</p>
<p><img class="aligncenter" src="http://blog.intersoftsolutions.com/wp-content/uploads/2016/03/clientui-item.png" alt="clientui-item.png" width="700" align="middle" /></p>
<p>If the sample has a WPF counterpart, then an additional combo box will be displayed for WPF, as well as the <strong>Run Sample</strong> option. If the WPF counterpart is not available, then the combo box will not appear. When clicking on the <strong>Open Solution</strong>, then the Silverlight solution will be opened. Similarly, clicking on <strong>Run Sample</strong> will run the Silverlight sample locally on your computer.</p>
<h1>Conclusion</h1>
<p>We hope you enjoyed the new Getting Started experience available in this new release. Should you have any feedback with the Getting Started experience, feel free to <a href="http://www.intersoftsolutions.com/#livechat" target="_blank">initiate a chat with us</a>, and we’ll be more than happy to assist you for the best on-boarding experience.</p>
<p>Till next post,<br />
Nicholas Lie</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2016/03/getting-started-with-premier-studio-2016/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Premier Studio 2016 is here.</title>
		<link>http://blog.intersoftsolutions.com/2016/02/premier-studio-2016-is-here/</link>
		<comments>http://blog.intersoftsolutions.com/2016/02/premier-studio-2016-is-here/#comments</comments>
		<pubDate>Mon, 29 Feb 2016 05:21:36 +0000</pubDate>
		<dc:creator><![CDATA[Jimmy Petrus]]></dc:creator>
				<category><![CDATA[2016 R1]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[Crosslight]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[WebUI]]></category>
		<category><![CDATA[New Releases]]></category>
		<category><![CDATA[WebUI Studio]]></category>

		<guid isPermaLink="false">http://blog.intersoftsolutions.com/?p=5669</guid>
		<description><![CDATA[The wait is over! Premier Studio 2016 is here, our biggest and most revolutionary release since Intersoft was established. Our team worked very hard to ensure the best quality of the products delivered in this release. A big thanks to you all for your continuous [...]]]></description>
				<content:encoded><![CDATA[<img width="604" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2016/02/premier-studio-2016-604x270.png" class="attachment-post-thumbnail wp-post-image" alt="Premier Studio 2016" style="float:right; margin:0 0 10px 10px;" /><p>The wait is over! Premier Studio 2016 is here, our biggest and most revolutionary release since Intersoft was established. Our team worked very hard to ensure the best quality of the products delivered in this release. A big thanks to you all for your continuous support and feedback to make this great release a reality.</p>
<p><img class="alignnone size-large wp-image-5678" src="http://blog.intersoftsolutions.com/wp-content/uploads/2016/02/premier-studio-2016-1024x467.png" alt="Premier Studio 2016" width="700" /></p>
<p>This latest release brings major upgrades to all our toolset across 5 platforms, including ASP​.​NET, Silverlight, WPF, iOS, and Android. It reflects on our continuous commitment to create the most innovative and forward-thinking toolset that dramatically improve productivity and shorten development time. We&#8217;re very excited to have something new for everyone!</p>
<p>We started out by revamping our entire product lineups starting with WebUI, which includes 40+ web components, with Unified Theming support. The new feature now uses advanced SCSS in combination with Node SASS and Web Compiler to achieve a modern, unified look and feel across the lineup. It&#8217;s the best of both worlds: industry&#8217;s most advanced web components with beautiful and gorgeous design combined into a single, complete package. More importantly, all WebUI lineups have been reengineered with the latest and greatest web technologies, so you can expect responsive design and full support for latest major browsers like IE11, Edge, Safari 9, Chrome 48, Firefox 44.</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2016/02/webui-2016-banner.jpg"><img class="alignnone size-large wp-image-5673" src="http://blog.intersoftsolutions.com/wp-content/uploads/2016/02/webui-2016-banner-1024x574.jpg" alt="WebUI 2016" width="700" /></a></p>
<p>Next, the most anticipated improvement for Crosslight is here. Fully embracing Material Design, building gorgeous Material apps is no longer a chore. The new v7 library introduced in this release was built from the ground up, taking account the user experience and interaction covered in the new Material Design. With the new library and simplified APIs, you can now easily add Material Design elements and interactions such as Floating Action Buttons, Collapsing Toolbars with expand/collapse behaviors, parallax scrolling, Material Navigation Drawer, and so much more.</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2016/02/crosslight5-banner.png"><img class="alignnone size-large wp-image-5675" src="http://blog.intersoftsolutions.com/wp-content/uploads/2016/02/crosslight5-banner-1024x596.png" alt="crosslight5-banner" width="700" /></a></p>
<p>Another important milestone in this release, we&#8217;ve smoothened out the development experience by fully embracing NuGet package manager as the main delivery channel for future Crosslight builds, so you don&#8217;t have to worry about tedious packages references to ensure your Crosslight solution and samples work properly.</p>
<p>Introducing the new ClientUI Reporting for WPF, now you can easily author and build gorgeous enterprise reports from the convenience of your desktop. Fully optimized and fine-tuned for WPF, ClientUI Reporting for WPF ensures that your existing ClientUI reports will continue to work as it is, whether it&#8217;s on the desktop or on the web.</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2016/02/clientui12-banner1.png"><img class="alignnone wp-image-5681 size-large" src="http://blog.intersoftsolutions.com/wp-content/uploads/2016/02/clientui12-banner1-1024x545.png" alt="" width="604" height="321" /></a></p>
<p>Visualizing your data in your reports? We have something special in store for you. In this release, new charting support with over more than 20+ types of charts are now available in ClientUI Reporting, for both WPF and Silverlight platforms. Whether it&#8217;s doughnut, pie, line, bar, columns, anything. We&#8217;ve got it all covered. This new addition is sign of our enduring commitment towards ClientUI and continues to strengthen ClientUI&#8217;s position as the best toolset for enterprise development on Silverlight and WPF platforms.</p>
<h1>Download Now</h1>
<p>To begin enjoying this new release, simply <a href="http://intersoftsolutions.com/account" target="_blank">sign-in</a> to your account to download the latest release, or request a trial <a href="http://intersoftsolutions.com/RequestTrial" target="_blank">here</a>.</p>
<p>While waiting for downloads, please follow the links below to learn more what’s new in this latest release:</p>
<ul>
<li><a href="http://intersoftsolutions.com/Corporate/PressRelease/dca52020-15ed-4d59-891e-9dee63197e21" target="_blank">Press Release</a> — an official overview of the release</li>
<li><a href="http://intersoftsolutions.com/2016" target="_blank">2016 Tour</a> — a comprehensive details of each new component and new feature introduced in this release</li>
</ul>
<p>In addition to product bits, we&#8217;ve moved forward to a better direction which greatly enhance and simplify installation experience. The first thing you notice when downloading the new installer is its absolutely small size, 480MB, which is about half the size of previous installer. It&#8217;s made possible as we no longer ship offline documentation since we&#8217;re completely transitioning to agile workflow for all products (including WebUI and ClientUI now). This direction allows all our documentation to be updated online, whenever new features are added, instead of waiting for the next installer update. As the result, Intersoft Developer Center has been significantly updated to cover new documentation for all the three platforms. You can start exploring <a href="http://developer.intersoftsolutions.com">here</a>.</p>
<p>Finally, we hope you enjoy our latest release as much as we love building it. We look forward to see what you will build next!</p>
<p>Note: New licenses will be sent out to all active subscribers in 24 hours after this announcement. You’ll receive a notification email when your account is updated.</p>
<p>All the best,<br />
Jimmy</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2016/02/premier-studio-2016-is-here/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding Header and Footer for iOS TableView and Android ListView</title>
		<link>http://blog.intersoftsolutions.com/2015/11/adding-header-and-footer-for-ios-tableview-and-android-listview/</link>
		<comments>http://blog.intersoftsolutions.com/2015/11/adding-header-and-footer-for-ios-tableview-and-android-listview/#comments</comments>
		<pubDate>Wed, 18 Nov 2015 07:01:08 +0000</pubDate>
		<dc:creator><![CDATA[Nicholas Lie]]></dc:creator>
				<category><![CDATA[Crosslight]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[kb-how-to-article]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[custom view]]></category>
		<category><![CDATA[footer]]></category>
		<category><![CDATA[header]]></category>
		<category><![CDATA[listview]]></category>
		<category><![CDATA[tableview]]></category>

		<guid isPermaLink="false">http://blog.intersoftsolutions.com/?p=5159</guid>
		<description><![CDATA[Hi guys, I&#8217;m back with another blog post, this time covering how to use the a custom view for header and footer to be used alongside iOS TableView / Android TableView. You&#8217;ll see how you can easily create custom views and use them as headers and footers in [...]]]></description>
				<content:encoded><![CDATA[<img width="604" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-3.38.19-PM-604x270.png" class="attachment-post-thumbnail wp-post-image" alt="Screen Shot 2015-11-19 at 3.38.19 PM" style="float:right; margin:0 0 10px 10px;" /><p>Hi guys, I&#8217;m back with another blog post, this time covering how to use the a custom view for header and footer to be used alongside iOS TableView / Android TableView. You&#8217;ll see how you can easily create custom views and use them as headers and footers in your Crosslight apps.</p>
<p><img class="alignnone size-large wp-image-5164" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-3.38.19-PM-1024x787.png" alt="Screen Shot 2015-11-19 at 3.38.19 PM" width="604" height="464" /></p>
<p>After this project has completed, you&#8217;ll end up with a custom header and footer in your ListView/TableView. When you click on the Add Item button on the top, new item will be added to the list, and you can see how the header and footer is correctly persisted when the items collection is updated.</p>
<p>To complete this project, there are several steps need to be completed:</p>
<ul>
<li>Preparing the project</li>
<li>Creating custom views for iOS</li>
<li>Preparing the BIndingProvider</li>
<li>Preparing the ViewModel</li>
<li>Modify iOS ViewController and running the project</li>
<li>Creating custom views for Android</li>
<li>Modifying Android ListActivity and running the project</li>
</ul>
<p>Without further ado, let&#8217;s get started.</p>
<h1>Preparing the project</h1>
<p>For this sample, I&#8217;ll keep it nice and simple. This time, I&#8217;ll start from the Navigation template created using Crosslight Project Wizard. I&#8217;ll name this project: <strong>HeaderAndFooter</strong>.</p>
<h1>Creating custom views for iOS</h1>
<p>Let&#8217;s begin by creating a new custom header view for iOS, by right-clicking on the VIews folder in <strong>HeaderAndFooter.iOS/Views</strong> folder and choose <strong>Add</strong>, <strong>New File</strong>.</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-4.57.27-PM.png"><img class="alignnone size-large wp-image-5166" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-4.57.27-PM-1024x285.png" alt="Screen Shot 2015-11-19 at 4.57.27 PM" width="604" height="168" /></a></p>
<p>Then choose <strong>Crosslight</strong>, <strong>Crosslight iOS View for iPhone</strong>.</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-4.54.59-PM.png"><img class="alignnone size-large wp-image-5167" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-4.54.59-PM-1024x774.png" alt="Screen Shot 2015-11-19 at 4.54.59 PM" width="604" height="457" /></a></p>
<p>Give it a name of <strong>CustomHeader</strong>. This will generate two files, <em>CustomHeader.xib</em> and <em>CustomHeader.cs</em> for the designer files.</p>
<p>Then open the <em>CustomHeader.xib</em> using Xcode Interface Builder.</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-4.59.08-PM.png"><img class="alignnone size-large wp-image-5168" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-4.59.08-PM-1024x174.png" alt="Screen Shot 2015-11-19 at 4.59.08 PM" width="604" height="103" /></a></p>
<p>In Xcode Interface Builder, drag a Label and a button.</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-5.03.12-PM.png"><img class="alignnone size-large wp-image-5169" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-5.03.12-PM-1024x306.png" alt="Screen Shot 2015-11-19 at 5.03.12 PM" width="604" height="180" /></a></p>
<p>Set the label outlet as <strong>TxtHeader </strong>and the button as <strong>BtnHeader</strong>. I won&#8217;t go too much on the layouting details, but you can ensure the followings are set:</p>
<ul>
<li>Set the View size as Freeform, so you can adjust the view size freely.<br />
<a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-5.06.01-PM.png"><img class="alignnone  wp-image-5170" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-5.06.01-PM.png" alt="Screen Shot 2015-11-19 at 5.06.01 PM" width="321" height="89" /></a></li>
<li>Turn off Auto Layout.<br />
<a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-5.06.24-PM.png"><img class="alignnone  wp-image-5171" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-5.06.24-PM.png" alt="Screen Shot 2015-11-19 at 5.06.24 PM" width="318" height="183" /></a></li>
<li>Ensure that the View background is set to <strong>Default</strong> (no fill), this will avoid clipping issues when placed as the header view.<br />
<a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-5.07.15-PM.png"><img class="alignnone  wp-image-5172" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-5.07.15-PM.png" alt="Screen Shot 2015-11-19 at 5.07.15 PM" width="317" height="252" /></a></li>
</ul>
<p>Your custom header is now ready. Let&#8217;s move on to custom footer.</p>
<p>Basically, you&#8217;re going to perform the same tasks as adding a custom header, but the difference is that you&#8217;re going to give it a file name of <strong>CustomFooter</strong>, then provide a label with the outlet of <strong>TxtCopyright</strong>.</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-9.14.16-PM.png"><img class="alignnone size-large wp-image-5174" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-9.14.16-PM-1024x222.png" alt="Screen Shot 2015-11-19 at 9.14.16 PM" width="604" height="131" /></a></p>
<h1>Preparing the BindingProvider</h1>
<p>Since you&#8217;ve successfully created the custom views, let&#8217;s prepare the <strong>BindingProvider</strong> first to prepare the properties and commands you wish to bind to the View. Open up <strong>NavigationBindingProvider</strong> (I renamed this file to MainBindingProvider to avoid confusion) and add the highlighted lines.</p><pre class="crayon-plain-tag">using Intersoft.Crosslight;

namespace HeaderAndFooter
{
    public class MainBindingProvider : BindingProvider
    {
        #region Constructors

        public MainBindingProvider()
        {
            ItemBindingDescription itemBinding = new ItemBindingDescription()
            {
                DisplayMemberPath = "Title",
                NavigateMemberPath = "Target"
            };

            this.AddBinding("TableView", BindableProperties.ItemsSourceProperty, "Items");
            this.AddBinding("TableView", BindableProperties.ItemTemplateBindingProperty, itemBinding, true);
            this.AddBinding("TableView", BindableProperties.SelectedItemProperty, "SelectedItem", BindingMode.TwoWay);
            
            this.AddBinding("BtnHeader", BindableProperties.TextProperty, "ButtonText");
            this.AddBinding("BtnHeader", BindableProperties.CommandProperty, "AddCommand");
            this.AddBinding("TxtCopyright", BindableProperties.TextProperty, "CopyrightText");
            this.AddBinding("TxtHeader", BindableProperties.TextProperty, "HeaderText");
        }

        #endregion
    }
}</pre><p>From the added lines, notice that we&#8217;re going to do the following:</p>
<ul>
<li>Bind <strong>ButtonText</strong> property in the ViewModel to the <strong>BtnHeader</strong> button.</li>
<li>Bind the ViewModel&#8217;s built-in <strong>AddCommand</strong> to the <strong>BtnHeader</strong> button. This is available in the <em>EditableListViewModel</em> shipped in Crosslight.</li>
<li>Bind the <strong>HeaderText</strong> property in the ViewModel to the <strong>TxtHeader</strong> label.</li>
<li>Bind the <strong>CopyrightText</strong> property in the ViewModel to <strong>TxtCopyright</strong> label. This is for the footer.</li>
</ul>
<p>Since you&#8217;ve prepared everything in the BindingProvider, let&#8217;s modify the ViewModel.</p>
<h1>Modifying the ViewModel</h1>
<p>The  <strong>NavigationViewModel </strong>now looks like the following. It&#8217;s located inside the <strong>HeaderAndFooter.Core/ViewModels</strong> folder.</p><pre class="crayon-plain-tag">using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Linq;
using Intersoft.Crosslight;

namespace HeaderAndFooter.ViewModels
{
    public class NavigationViewModel : SampleListViewModelBase&lt;NavigationItem&gt;
    {
        #region Constructors

        public NavigationViewModel()
        {
            ObservableCollection&lt;NavigationItem&gt; items = new ObservableCollection&lt;NavigationItem&gt;();

            items.Add(new NavigationItem("Simple Page", "About", typeof(SimpleViewModel)));
            items.Add(new NavigationItem("About This App", "About", typeof(AboutNavigationViewModel)));

            this.SourceItems = items;

            this.ButtonText = "Add Item";
            this.CopyrightText = "Copyright © Intersoft Solutions";
        }

        #endregion

        #region Properties

        private string _aboutText { get; set; }
        private string _buttonText { get; set; }
        private string _copyrightText { get; set; }
        private string _headerText { get; set; }

        public string AboutText
        {
            get { return _aboutText; }
            set
            {
                if (_aboutText != value)
                {
                    _aboutText = value;
                    OnPropertyChanged("AboutText");
                }
            }
        }

        public string ButtonText
        {
            get { return _buttonText; }
            set
            {
                if (_buttonText != value)
                {
                    _buttonText = value;
                    OnPropertyChanged("ButtonText");
                }
            }
        }

        public string CopyrightText
        {
            get { return _copyrightText; }
            set
            {
                if (_copyrightText != value)
                {
                    _copyrightText = value;
                    OnPropertyChanged("CopyrightText");
                }
            }
        }

        public string HeaderText
        {
            get
            {
                _headerText = this.Items.Count() + " items.";
                return _headerText;
            }
            set
            {
                if (_headerText != value)
                {
                    _headerText = value;
                    OnPropertyChanged("HeaderText");
                }
            }
        }

        #endregion

        #region Methods

        protected override bool CanExecuteAdd(object parameter)
        {
            return true;
        }

        protected override void ExecuteAdd(object parameter)
        {
            base.ExecuteAdd(parameter);

            NavigationItem newItem = new NavigationItem("Simple Page", "About", typeof(SimpleViewModel));
            var items = this.SourceItems.ToObservable();
            items.Add(newItem);
        }

        protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
        {
            this.OnPropertyChanged("HeaderText");
        }

        #endregion
    }
}</pre><p>Let&#8217;s take a deeper look at this class, starting from the top. In the constructor, we&#8217;ve prepared our <strong>SourceItems</strong> with <strong>ObservableCollection</strong>. We then initialize the <strong>ButtonText</strong> property and the <strong>CopyrightText</strong> property. The <strong>ButtonText</strong> and <strong>CopyrightText</strong> property are all MVVM-ready properties. The <strong>HeaderText</strong> is also an MVVM-ready property, but in the property getter, the text is always updated according to the number of items which exists in the list.</p>
<p>Right after the properties, we then override the built-in <strong>CanExecuteAdd</strong> method to return true so that the AddCommand can be executed, as well as overriding the actions for the <strong>ExecuteAdd </strong>method. Here, we simply add a new <strong>NavigationItem</strong> to the list. Just right after the method, Crosslight has provided an elegant way to perform any additional changes to other properties or any other implementation by overriding the <strong>OnCollectionChanged</strong> method. In the method, we trigger the <strong>OnPropertyChanged</strong> of the <strong>HeaderText</strong>, so that the number of items is always updated in our custom header.</p>
<h1>Modify iOS ViewController and running the project</h1>
<p>Now that you got the Core project covered, let&#8217;s modify the <strong>MainViewController</strong> (located inside <strong>HeaderAndFooter.iOS/ViewControllers</strong>) a bit.</p><pre class="crayon-plain-tag">using CoreGraphics;
using Foundation;
using HeaderAndFooter.ViewModels;
using Intersoft.Crosslight;
using Intersoft.Crosslight.iOS;
using UIKit;

namespace HeaderAndFooter.iOS.ViewControllers
{
    [Register("MainViewController")]
    [ImportBinding(typeof(MainBindingProvider))]
    public class MainViewController : UITableViewController&lt;NavigationViewModel&gt;
    {
        #region Properties

        public override UIViewTemplate HeaderViewTemplate
        {
            get { return new UIViewTemplate(CustomHeader.Nib); }
        }

        public override UIViewTemplate FooterViewTemplate
        {
            get { return new UIViewTemplate(CustomFooter.Nib); }
        }

        public override TableViewInteraction InteractionMode
        {
            get { return TableViewInteraction.Navigation; }
        }

        public override bool ShowGroupHeader
        {
            get { return false; }
        }

        public override UITableViewStyle TableViewStyle
        {
			get { return UITableViewStyle.Plain; }
        }

        #endregion

        #region Methods

        protected override void InitializeView()
        {
            base.InitializeView();

            // set navigation title
            this.NavigationItem.Title = "Crosslight App";
        }

        #endregion
    }
}</pre><p>In the <strong>MainViewController</strong>, we&#8217;ve overridden the <strong>HeaderViewTemplate</strong> as well as <strong>FooterViewTemplate</strong> to return the Nib for each custom header and footer view that we&#8217;ve just defined. We also made things simpler by not showing the group header as wellas ensuring that the used <strong>TableViewStyle</strong> is <strong>Plain</strong>. Run the project. You should get the following result.</p>
<div style="width: 500px; " class="wp-video"><!--[if lt IE 9]><script>document.createElement('video');</script><![endif]-->
<video class="wp-video-shortcode" id="video-5159-1" width="500" height="360" loop="1" autoplay="1" preload="auto" controls="controls"><source type="video/mp4" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/iOS-header-footer.mp4?_=1" /><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/iOS-header-footer.mp4">http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/iOS-header-footer.mp4</a></video></div>
<p>If you&#8217;re curious about the separator that exists between the header with the table view, as well as the footer with the table view, it&#8217;s because I&#8217;ve added an additional view in the custom header and footer layout, with the height of 1 unit and giving it a light gray background, to show the boundaries of the custom header and custom footer view. We&#8217;re going to do the same with Android layout later. You&#8217;ve completed the iOS version. Let&#8217;s move on to the Android.</p>
<h1>Creating custom views for Android</h1>
<p>Similar to iOS, you&#8217;ll need to create a custom header view first for Android. To do this, simply right click on the <strong>Resources/layout</strong> folder in the <strong>HeaderAndFooter.Android/Views</strong> folder, then choose <strong>Add</strong>, <strong>New Item</strong>.</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-9.42.51-PM.png"><img class="alignnone size-large wp-image-5177" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-9.42.51-PM-1024x202.png" alt="Screen Shot 2015-11-19 at 9.42.51 PM" width="604" height="119" /></a></p>
<p>&nbsp;</p>
<p>From the dialog that appears, choose <strong>Android</strong>, <strong>Layout</strong>, and give it a name of <strong>CustomHeader</strong>.</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-9.43.39-PM.png"><img class="alignnone size-large wp-image-5178" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Screen-Shot-2015-11-19-at-9.43.39-PM-1024x794.png" alt="Screen Shot 2015-11-19 at 9.43.39 PM" width="604" height="468" /></a></p>
<p>&nbsp;</p>
<p>And here&#8217;s the contents of the <strong>CustomHeader.axml</strong> file.</p><pre class="crayon-plain-tag">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    &gt;
    &lt;LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        &gt;
        &lt;TextView
        	android:id="@+id/TxtHeader"
        	android:layout_width="fill_parent"
        	android:layout_height="30dp"
        	android:textSize="20sp"
        	android:gravity="left"
            android:layout_weight="1"
        /&gt;
        &lt;Button 
            android:id="@+id/BtnHeader"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        /&gt;
    &lt;/LinearLayout&gt;
    &lt;LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="1px"
            android:background="#f2f2f2"
        /&gt;
&lt;/LinearLayout&gt;</pre><p>This layout simply contains a pretty much similar layout with iOS, that contains a label, a button, and a gray separator at the bottom. Repeat the same procedure for the custom footer layout. Here&#8217;s the contents of the <strong>CustomFooter.axml</strong> file.</p><pre class="crayon-plain-tag">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    &gt;
    &lt;LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="1px"
        android:background="#f2f2f2"
    /&gt;
    &lt;TextView
    	android:id="@+id/TxtCopyright"
    	android:layout_width="fill_parent"
    	android:layout_height="30dp"
    	android:textSize="12sp"
    	android:gravity="center"
        android:fontFamily="sans-serif-light" 
    /&gt;
&lt;/LinearLayout&gt;</pre><p></p>
<h1></h1>
<h1>Modifying Android ListActivity and running the project</h1>
<p>Since you&#8217;ve prepared the custom views let&#8217;s modify the Android ListActivity to display our custom header and footer. Open up <strong>MainActivity </strong>in the <strong>HeaderAndFooter.Android/Activities</strong> folder and take note of the following changes.</p><pre class="crayon-plain-tag">using Android.App;
using HeaderAndFooter.ViewModels;
using Intersoft.Crosslight;
using Intersoft.Crosslight.Android;

namespace HeaderAndFooter.Android
{
    [Activity(Label = "Crosslight App", Icon = "@drawable/icon")]
    [ImportBinding(typeof(MainBindingProvider))]
    public class MainActivity : ListActivity&lt;NavigationViewModel&gt;
    {
        #region Methods

        protected override void InitializeView()
        {
            base.InitializeView();

            this.RegisterViewIdentifier("TableView", this.ListView);
        }

        #endregion

        #region Properties

        protected override int ContentLayoutId
        {
            get { return Intersoft.Crosslight.Android.Resource.Layout.listgroupsectionlayout; }
        }

        protected override int FooterLayoutId
        {
            get { return Resource.Layout.CustomFooter; }
        }

        protected override int HeaderLayoutId
        {
            get { return Resource.Layout.CustomHeader; }
        }

        public override ListViewInteraction InteractionMode
        {
            get { return ListViewInteraction.Navigation; }
        }

        #endregion
    }
}</pre><p>All you need to do is just override the <strong>FooterLayoutId</strong> as well <strong>HeaderLayoutId</strong> and provide the layout you&#8217;ve just created. If you notice in the template, right in the InitializeView method, we&#8217;re registering the ListView with the TableView identifier at runtime. This is how you would register a view at runtime. For more information in registering view at runtime, check out <a href="http://developer.intersoftsolutions.com/display/crosslight/Getting+Started+with+Crosslight+Android+App#GettingStartedwithCrosslightAndroidApp-RegisteringaViewIdentifieratRuntime">this document</a> in the Developer Center.</p>
<p>You&#8217;re now ready to run the project. You should get the result similar to the following.</p>
<div style="width: 500px; " class="wp-video"><video class="wp-video-shortcode" id="video-5159-2" width="500" height="360" loop="1" autoplay="1" preload="auto" controls="controls"><source type="video/mp4" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Android-header-footer.mp4?_=2" /><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Android-header-footer.mp4">http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Android-header-footer.mp4</a></video></div>
<h1>Wrapping Up</h1>
<p>You&#8217;ve seen how easy it is to set up a custom header and footer view to use with iOS TableView and Android ListView. With Crosslight, the custom views are automatically compatible with data binding and Crosslight takes care of the magic, so you can focus on building your app instead of having to worry about wiring behind the scenes. Hopefully this gives you a good insight on how Crosslight accomplishes business scenarios elegantly, without compromising any of the MVVM-design pattern enforced throughout the app.</p>
<p>As always, you can find the source code to this post here: <a href="http://git.intersoftsolutions.com/projects/CT/repos/crosslightheaderandfooter/browse">http://git.intersoftsolutions.com/projects/CT/repos/crosslightheaderandfooter/browse.</a></p>
<p>See you in the next post,<br />
Nicholas Lie</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2015/11/adding-header-and-footer-for-ios-tableview-and-android-listview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/iOS-header-footer.mp4" length="535560" type="video/mp4" />
<enclosure url="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/Android-header-footer.mp4" length="319873" type="video/mp4" />
		</item>
		<item>
		<title>The next WebUI. Redesigned for the future.</title>
		<link>http://blog.intersoftsolutions.com/2015/11/the-next-webui/</link>
		<comments>http://blog.intersoftsolutions.com/2015/11/the-next-webui/#comments</comments>
		<pubDate>Fri, 13 Nov 2015 01:37:53 +0000</pubDate>
		<dc:creator><![CDATA[Nicholas Lie]]></dc:creator>
				<category><![CDATA[2015 R2]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[Roadmap]]></category>
		<category><![CDATA[2015 r2]]></category>
		<category><![CDATA[roadmap]]></category>
		<category><![CDATA[WebCallOut]]></category>
		<category><![CDATA[WebCombo]]></category>
		<category><![CDATA[WebGrid]]></category>
		<category><![CDATA[WebInput]]></category>
		<category><![CDATA[WebProgressbar]]></category>
		<category><![CDATA[WebTab]]></category>
		<category><![CDATA[WebToolBar]]></category>
		<category><![CDATA[WebUI]]></category>
		<category><![CDATA[WebUI Studio]]></category>
		<category><![CDATA[webui vnext]]></category>

		<guid isPermaLink="false">http://blog.intersoftsolutions.com/?p=4989</guid>
		<description><![CDATA[The web development trend recently revolves around providing great look and feel for the users of World Wide Web. Nowadays, we see lots of beautifully-designed web components along with the rise of CSS frameworks such as Bootstrap and even Material Design. These frameworks provide a way for developers to universally theme their web [...]]]></description>
				<content:encoded><![CDATA[<img width="604" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebCombo1-604x270.png" class="attachment-post-thumbnail wp-post-image" alt="WebCombo" style="float:right; margin:0 0 10px 10px;" /><p>The web development trend recently revolves around providing great look and feel for the users of World Wide Web. Nowadays, we see lots of beautifully-designed web components along with the rise of CSS frameworks such as Bootstrap and even Material Design. These frameworks provide a way for developers to universally theme their web apps, making it consistent and beautiful for their users, across the entire site.</p>
<p>WebUI Studio. Undoubtedly, this is our best-selling suite ever. With impressive range of versatile, ready-to-use components, WebUI Studio has become the industry&#8217;s benchmark for suite of web components. More than just simple controls, WebUI components are designed to be functionality-rich, making developers&#8217; lives much easier whilst bringing high-performance web components to their ASP.NET web applications.</p>
<p>Just, what if, you can incorporate these beautifully-designed elements to WebUI? At Intersoft Solutions, we take pride in our meticulously-designed user experiences. In our next biggest release ever, we&#8217;re going to bring a whole new look and feel of your web apps. Embrace the next evolution of web apps with WebUI. First-class web components meets first-class design.</p>
<h1>Advanced Functionality Meets Beautiful Design</h1>
<p>Before diving further, can you take a guess at some of these WebUI controls below?</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebCombo1.png"><img class="alignnone wp-image-5074" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebCombo1.png" alt="WebCombo" width="400" height="278" /></a></p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebInput-DateTimeEditor.png"><img class="alignnone wp-image-5072" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebInput-DateTimeEditor.png" alt="WebInput - DateTimeEditor" width="300" height="437" /></a></p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebToolBar.png"><img class="alignnone wp-image-5076" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebToolBar-1024x205.png" alt="WebToolBar" width="700" height="140" /></a></p>
<p>&nbsp;</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/webinput-calculator.png"><img class="alignnone size-large wp-image-5111" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/webinput-calculator-1024x524.png" alt="webinput calculator" width="604" height="309" /></a></p>
<p>&nbsp;</p>
<p>From the top: WebCombo, WebInput with DateTime Picker, WebToolBar, and WebInput with Calculator Editor. Gorgeous, aren&#8217;t they? And this is just the tip of the iceberg. Goodbye old-fashioned looking web applications. It&#8217;s all thanks to the new technology we&#8217;re building for the next release, called Unified Theming.</p>
<h1>Introducing WebUI Unified Theming</h1>
<p>In the current release, you can already style WebUI controls through <em>Layout Manager</em> or via API at runtime. However, you need to do the styling on each WebUI control individually which could be tedious and repetitive for dozens of controls. This is going to change in WebUI vNext. Meet our brand-new<strong> Unified Theming </strong>framework.</p>
<p>The new Unified Theming allows you to apply consistent look and feel across your entire web applications just by using a single theme definition, similar to the ones found in popular CSS frameworks. Bigger buttons, more rounded buttons, gradient-styled buttons, flat buttons, anything. You now have total control over your app&#8217;s look and feel.</p>
<p>For example, you wish to change the corner radius of a popup panel. Just configure it once, and all of the WebUI controls in your application that use the popup element will automatically apply the same look and feel. To achieve this, it requires delicate, yet rigorous engineering to ensure all 30+ components work as expected using the new unified theming feature. Not only that, the combination of settings provided with each control makes it even tougher to achieve a consistent look with whatever settings you throw at it. And yes, there&#8217;s that cross-browser support as well.</p>
<p>When we designed the unified theme, we make sure that each control works in concert with native features and behaviors of the control itself. For example, here&#8217;s how it looks when the WebCallOut Bootstrap theme is applied with various types of settings. Here&#8217;s a shot with WebCallOut&#8217;s <strong>PointingPosition</strong> set to <strong>PointingBottomRight </strong>and <strong>PointingTopLeft</strong>.</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebCallOut-1-new.png"><img class="alignnone size-large wp-image-5091" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebCallOut-1-new-1024x433.png" alt="WebCallOut-1-new" width="604" height="255" /></a></p>
<p>&nbsp;</p>
<p>And here&#8217;s another with <strong>PointingPosition</strong> set to <strong>PointingTopRight</strong> and <strong>PointingBottomLeft</strong>.</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebCallOut-2-new.png"><img class="alignnone size-large wp-image-5092" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebCallOut-2-new-1024x433.png" alt="WebCallOut-2-new" width="604" height="255" /></a></p>
<p>&nbsp;</p>
<p>And the best of all, the Unified Theming framework leverages the industry&#8217;s most popular CSS extension language today, <a href="http://sass-lang.com">SASS</a>. Written entirely in <em>SCSS</em> syntax, we&#8217;re able to streamline all styles across 30 components, creating <em>variables</em> and <em>mixin</em> that you can easily customize. This also means that you don&#8217;t have to learn a new language to customize the styles. Instead, you can use any SASS compatible editors such as Visual Studio 2015 or Sublime.</p>
<h1>Bootstrap-themed WebUI</h1>
<p>Along with the unified theming framework, we will also ship a new Bootstrap theme for the entire WebUI components. Let&#8217;s take a look at some of the WebUI controls restyled with Bootstrap theme.</p>
<h2>WebButton</h2>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebButton1.png"><img class="alignnone wp-image-5069" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebButton1-795x1024.png" alt="WebButton" width="200" /></a></p>
<p>The rounded corners and vibrant pastel colors for the WebButtons are inspired from Bootstrap. All color schemes from mouse-over, default, disabled, and selected states are taken from Bootstrap.</p>
<h2>WebProgressBar</h2>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebProgressBar.png"><img class="alignnone size-large wp-image-5070" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebProgressBar-509x1024.png" alt="WebProgressBar" width="509" height="1024" /></a></p>
<p>These Bootstrap-themed WebProgressBar have arrived to captivate your users with vibrant, animated colors. The wide range of colors are also taken from Bootstrap. Also pay attention to the nicely shaped rounded corners of the progress bars.</p>
<h2>WebTab</h2>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebTab2.png"><img class="alignnone size-large wp-image-5084" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/11/WebTab2-1024x778.png" alt="WebTab" width="604" height="459" /></a></p>
<p>Each tab in WebTab is now more spacious with generous padding on all its sides. We&#8217;ve also added various Bootstrap styles such as Frame, Frameless, Pill and Line tabs. And to make everything look really great even in hi-res display, we&#8217;ve replaced all common icons with font-based icons, all comes pre-built in the WebUI Bootstrap theme.</p>
<h1>Coming in 2015 R2</h1>
<p>What you see in this post is just a small glimpse of what&#8217;s next to come. We can&#8217;t wait to show it live to you in the next 2015 R2 release. It&#8217;s going to be the biggest release ever! Refreshing the entire WebUI lineup, a major release for Crosslight, and the launch for <a href="http://blog.intersoftsolutions.com/2015/11/a-sneak-peek-at-clientui-vnext/">ClientUI Reporting for WPF with charting</a> will be the main dish for this release. Stay tuned for more exciting updates!</p>
<p>Cheers,<br />
Nicholas Lie</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2015/11/the-next-webui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Started with Crosslight Charting</title>
		<link>http://blog.intersoftsolutions.com/2015/10/getting-started-with-crosslight-charting/</link>
		<comments>http://blog.intersoftsolutions.com/2015/10/getting-started-with-crosslight-charting/#comments</comments>
		<pubDate>Wed, 21 Oct 2015 06:25:00 +0000</pubDate>
		<dc:creator><![CDATA[Nicholas Lie]]></dc:creator>
				<category><![CDATA[2015 R1]]></category>
		<category><![CDATA[Crosslight]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Charting]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Mobile Development]]></category>
		<category><![CDATA[MVVM]]></category>
		<category><![CDATA[UI Components]]></category>

		<guid isPermaLink="false">http://blog.intersoftsolutions.com/?p=4759</guid>
		<description><![CDATA[One of the greatest new components in Crosslight 4 is a powerful, full-fledged Charting component, enabling Crosslight developers to easily add stunning charts to their business cross-platform mobile apps. Fully MVVM capable, it works beautifully across iOS and Android platforms. Have you checked out the new Crosslight Charting yet? If not, then this post [...]]]></description>
				<content:encoded><![CDATA[<img width="604" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/10/crosslight-charting-604x270.png" class="attachment-post-thumbnail wp-post-image" alt="crosslight-charting" style="float:right; margin:0 0 10px 10px;" /><p>One of the greatest new components in Crosslight 4 is a powerful, full-fledged Charting component, enabling Crosslight developers to easily add stunning charts to their business cross-platform mobile apps. Fully MVVM capable, it works beautifully across iOS and Android platforms.</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/10/crosslight-charting.png"><img class="alignnone size-large wp-image-4786" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/10/crosslight-charting-1024x910.png" alt="crosslight-charting" width="604" height="537" /></a></p>
<p>Have you checked out the new Crosslight Charting yet? If not, then this post is the perfect guide for you. This post will help you learn how to get started with Crosslight Charting.</p>
<h1>Starting Off</h1>
<p>Let’s try to create the illustrated column chart from scratch. To start off, I created a Blank Crosslight project with Crosslight Project Wizard. I&#8217;ll call this CrosslightCharting for now. After the project is created, don’t forget to add the necessary references as well.</p>
<p><a href="file://localhost//Users/nicholaslie/Library/Containers/com.blogo.Blogo/Data/Library/Caches/com.blogo.Blogo/1445403569_full.png" target="_blank"><img class="aligncenter" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/10/1445403604_thumb.png" alt="" align="middle" /></a></p>
<h2>Necessary References</h2>
<ul>
<li>Core project: Add <strong>Intersoft.Crosslight.UI.DataVisualization</strong> assembly.</li>
<li>iOS project: Add<strong> Intersoft.Crosslight.UI.DataVisualization</strong> and <strong>Intersoft.Crosslight.UI.DataVisualization.iOS</strong> assembly.</li>
<li>Android project: Add <strong>Intersoft.Crosslight.UI.DataVisualization</strong> and <strong>Intersoft.Crosslight.UI.DataVisualization.Android</strong> assembly.</li>
</ul>
<p>Now you&#8217;re ready to begin writing some codes.</p>
<h1>Preparing the ViewModel</h1>
<p>Let’s prepare the ViewModel that will provide the data to the chart. I&#8217;m going to create a <em>ColumnViewModel</em> class inside the <em>CrosslightCharting.Core/ViewModels</em> folder, and write really simple code to initialize the <em>Chart model</em>. Here&#8217;s how.</p><pre class="crayon-plain-tag">using Intersoft.Crosslight.UI.DataVisualization;
using Intersoft.Crosslight.ViewModels;

namespace CrosslightCharting.Core
{
    public class ColumnViewModel : ViewModelBase&lt;ColumnSeries&gt;
    {
        private Chart _chart;

        public Chart Chart
        {
            get { return _chart; }
            set
            {
                _chart = value;
                OnPropertyChanged("Chart");
            }
        }

        public ColumnViewModel()
        {
            InitializeChart();
        }

        private void InitializeChart()
        {
            this.Chart = new Chart();
            this.Chart.Title.Text = "Agile Sprint Status";

            // setup series for In Progress
            Series inProgressSeries = new ColumnSeries();
            inProgressSeries.Title = "In Progress";
            inProgressSeries.Items = new List&lt;DataPoint&gt;();
            inProgressSeries.Items.Add(new DataPoint("Android", 70));
            inProgressSeries.Items.Add(new DataPoint("iOS", 42));
            inProgressSeries.Items.Add(new DataPoint("WinPhone", 20));
            this.Chart.Series.Add(inProgressSeries);

            // setup series for Resolved
            Series resolvedSeries = new ColumnSeries();
            resolvedSeries.Title = "Resolved";
            resolvedSeries.Items.Add(new DataPoint("Android", 53));
            resolvedSeries.Items.Add(new DataPoint("iOS", 32));
            resolvedSeries.Items.Add(new DataPoint("WinPhone", 40));
            this.Chart.Series.Add(resolvedSeries);
        }
    }
}</pre><p>As you can see, all we did is simply initializing the chart in the ViewModel and populated two <em>ColumnSeries</em> for it, and add the data points for each series which will be displayed side-by-side. Crosslight Charting library includes <em>component models</em> that you can consume in the shared Core project. The <em>Chart model </em>represents the data source required for the chart, and also provides a wealth of chart configuration and settings. The <em>Series</em>, <em>ColumnSeries</em>, and <em>DataPoint</em> are another example of the component models available in the Charting library.</p>
<p>For the sake of simplicity, the above sample uses static data points as the <em>items source</em> for each series. If your data points are heavily reused across your application, you can definitely refactor the data points into a repository or data manager class which you can easily consume with a simple method call. Later, you can learn more about it from my sample project.</p>
<p>It&#8217;s also noteworthy to point out that changes to the <em>Chart model</em> will automatically propagated to the view, thanks to the powerful binding architecture of Crosslight. This means you can add or remove <em>Series</em> dynamically in your app. Of course, you can also set the <em>items source</em> of the <em>Series</em> later in the app&#8217;s cycle, such as after fetching data from the server in most real-world scenarios. Better yet, changes you made to the <em>Chart model</em> will not be only propagated to the view, they will be also smoothly animated from the current point to the new point. Absolutely no additional code needed, it just works!</p>
<p>For your reference, here&#8217;s a code snippet how to initialize the items source of a Series combined with an async data load.</p><pre class="crayon-plain-tag">protected override async void Navigated(NavigatedParameter parameter)
{
    this.Chart.Series.First().Items = await this.Repository.GetAgileStatusAsync("In Progress");
}</pre><p>That&#8217;s pretty cool, right?</p>
<p>Crosslight Charting emphasizes not only on powerful charting capabilities, but also provides developers with easy-to-use and intuitive APIs, so you can get things done without having to worry about the heavy work. If you notice, you don&#8217;t necessarily need to define the dependent and independent axes for the chart, since Crosslight Charting comes with automatic axis detection that generates meaningful axis and range, purely based on the given data. Simply beautiful.</p>
<p>&nbsp;</p>
<h1>Preparing the BindingProvider</h1>
<p>Since our ViewModel and <em>Chart model</em> is ready, let&#8217;s prepare the <em>Binding Provider</em> which will bind the C<em>hart model</em> to the view. This is where the magic will happen.</p>
<p>Simply create a new Crosslight Binding Provider using the item templates built into Visual Studio (Windows) or Xamarin Studio (Mac). I&#8217;ll call this <em>ColumnBindingProvider</em>, and I&#8217;ll put it inside the CrosslightCharting.Core/BindingProviders folder.</p><pre class="crayon-plain-tag">#region Usings

using Intersoft.Crosslight;
using Intersoft.Crosslight.UI.DataVisualization;

#endregion

namespace CrosslightCharting.Core
{
    public class ColumnBindingProvider : BindingProvider
    {
        #region Constructors

        public ColumnBindingProvider()
        {
            this.AddBinding("ChartView", ChartProperties.ChartProperty, new BindingDescription("Chart", BindingMode.TwoWay));
        }

        #endregion
    }
}</pre><p>There&#8217;s not much to explain here as the code is self explanatory. It simply binds the <em>ChartView</em> to the <em>Chart</em> property of the ViewModel. That&#8217;s it. Now you have the ViewModel with complete data populated as well as the BindingProvider.</p>
<h1>Creating the Chart for iOS</h1>
<p>You&#8217;re now ready to create the ViewController that will host the chart in iOS. I&#8217;ll create a new ViewController called <em>ColumnViewController</em> inside the CrosslightCharting.iOS/ViewControllers folder. Here&#8217;s the <em>ColumnViewController </em>file:</p><pre class="crayon-plain-tag">#region Usings

using CrosslightCharting.Core;
using Intersoft.Crosslight;
using Intersoft.Crosslight.UI.DataVisualization.iOS;

#endregion

namespace CrosslightCharting.iOS
{
    [ImportBinding(typeof(ColumnBindingProvider))]
    public partial class ColumnViewController : UIChartViewController&lt;ColumnViewModel&gt;
    {
        protected override void InitializeView()
        {
            base.InitializeView();

            this.NavigationItem.Title = "Column Series";
        }
    }
}</pre><p>As you see from the code above, the ViewController contains almost nothing except for the BindingProvider and the ViewModel I&#8217;ve just created before. Also note that you need to subclass the <em>UIChartViewController</em> class. The UIChartViewController provides a ChartView property which returns the instance of UIChartView that it manages. It also automatically registers the <em>ChartView</em> as an identifier, allowing you to easily bind to the chart view in the binding provider.</p>
<p>Simply run the project to see the Crosslight Charting in action.</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/10/Simulator-Screen-Shot-October-21-2015-2.46.47-PM.png"><img class=" size-medium wp-image-4783 aligncenter" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/10/Simulator-Screen-Shot-October-21-2015-2.46.47-PM-169x300.png" alt="Simulator Screen Shot October 21, 2015, 2.46.47 PM" width="169" height="300" /></a></p>
<p>You&#8217;ve just created your first Crosslight Charting application in iOS. Congratulations! Well, how about the Android platform?</p>
<h1>Creating the Chart for Android</h1>
<p>Well, since you&#8217;ve prepared the ViewModel and the BindingProvider, so, as you guessed it, all you need to do, is just to provide the &#8220;view&#8221; for Android platform. Let&#8217;s create an Activity for that. I&#8217;ll call it <em>ColumnActivity</em>, and put it inside the CrosslightCharting.Android/Activities folder.</p><pre class="crayon-plain-tag">#region Usings

using Android.App;
using Intersoft.Crosslight.Android;
using CrosslightCharting.Core;
using Intersoft.Crosslight;

#endregion

namespace CrosslightCharting.Android
{
    [Activity(Label = "Column Series")]		
    [ImportBinding(typeof(ColumnBindingProvider))]
    public class ColumnActivity : Activity&lt;ColumnViewModel&gt;
    {
        protected override int ContentLayoutId
        {
            get
            {
                return Resource.Layout.ColumnSeriesLayout;
            }
        }
    }
}</pre><p>Again, nothing&#8217;s here except for the ViewModel and the BindingProvider we&#8217;ve created earlier. As you can see, I&#8217;ve provided a layout for this activity by creating an Android layout file inside the CrosslightCharting.Android/Resources/Layout folder, called <em>ColumnSeriesLayout.axml</em>. Let&#8217;s see how this file looks like.</p><pre class="crayon-plain-tag">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/white"
    android:gravity="center"&gt;
    &lt;Intersoft.Crosslight.UI.DataVisualization.Android.ChartView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/ChartView" /&gt;
&lt;/LinearLayout&gt;</pre><p>The layout is simply a ChartView that covers the entire screen. I&#8217;ve also put a white background to get better visibility of the chart. Android version is done. Let&#8217;s see it in action.</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/10/Nexus-5-Lollipop-Screenshot-2.png"><img class="aligncenter wp-image-4787 size-medium" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/10/Nexus-5-Lollipop-Screenshot-2-169x300.png" alt="Nexus 5 Lollipop Screenshot 2" width="169" height="300" /></a></p>
<p>&nbsp;</p>
<p>Now, I want you to pay attention to how Crosslight Charting manages to create the axes automatically for you, and define the &#8220;smart&#8221; ranges for those axes that fits the screen nicely. Also notice that the legend is automatically generated for you based on the given data points. How cool is that? See, I told you that it works consistently between iOS and Android platform.</p>
<p>And if you need to customize anything about the Chart, whether its data source, series, or other settings, you do it only once in the  ViewModel. At this point, I hope you&#8217;ve started to get the point how Crosslight works in overall, and how it lives to its highly acclaimed <em>100% shared UI logic</em>.</p>
<h1>Learning more about Crosslight Charting</h1>
<p>You&#8217;ve successfully created a column chart with Crosslight Charting. In addition to column charts, Crosslight Charting also supports many other chart types such as area, bar, doughnut, line, pie, scatter, step area, and much more.</p>
<p>If you&#8217;re interested in learning more, I highly suggest you to check out the list of topics here:</p>
<ul>
<li><a href="http://developer.intersoftsolutions.com/display/crosslight/Understanding+Chart+Series">Understanding chart series</a></li>
<li><a href="http://developer.intersoftsolutions.com/display/crosslight/Understanding+Chart+Axis">Understanding chart axis</a></li>
<li><a href="http://developer.intersoftsolutions.com/display/crosslight/Understanding+Chart+Legend">Understanding chart legend</a></li>
<li><a href="http://developer.intersoftsolutions.com/display/crosslight/Understanding+Chart+Title">Understanding chart title</a></li>
<li><a href="http://developer.intersoftsolutions.com/display/crosslight/Configuring+Chart+Appearance">Configuring chart appearance</a></li>
<li><a href="http://developer.intersoftsolutions.com/display/crosslight/Understanding+Animation">Understanding animation</a></li>
<li><a href="http://developer.intersoftsolutions.com/display/crosslight/Enabling+Zoom">Enabling zoom</a></li>
<li><a href="http://developer.intersoftsolutions.com/display/crosslight/Using+Data+Annotation">Using data annotation</a></li>
</ul>
<p>I also highly recommend you to check out the samples directly to see all of the features hands-on. It is available in the Git repository in this <a href="http://git.intersoftsolutions.com/projects/CROS-SUPP/repos/charting-sample/browse">link</a>.</p>
<p>You can also find the source code to this our Git repository <a href="http://git.intersoftsolutions.com/projects/CT/repos/crosslightcharting/browse">here</a>.</p>
<p>Till next post,</p>
<p>Cheers<br />
Nicholas Lie</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2015/10/getting-started-with-crosslight-charting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improving Crosslight App Performance with Compression Filter</title>
		<link>http://blog.intersoftsolutions.com/2015/09/improving-crosslight-app-performance-with-compression/</link>
		<comments>http://blog.intersoftsolutions.com/2015/09/improving-crosslight-app-performance-with-compression/#comments</comments>
		<pubDate>Thu, 10 Sep 2015 08:53:28 +0000</pubDate>
		<dc:creator><![CDATA[Jimmy Petrus]]></dc:creator>
				<category><![CDATA[2015 R1]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[Crosslight]]></category>
		<category><![CDATA[Data Access]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://blog.intersoftsolutions.com/?p=4729</guid>
		<description><![CDATA[In my post last month, I mentioned about data optimization feature in Crosslight 4 which could greatly improve the overall performance and experience of your Crosslight apps. So here we are, this week’s post will feature this optimization feature, and you will learn how to [...]]]></description>
				<content:encoded><![CDATA[<img width="604" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/09/Extensible-Request-and-Response-Filters-604x270.jpg" class="attachment-post-thumbnail wp-post-image" alt="Extensible Request and Response Filters" style="float:right; margin:0 0 10px 10px;" /><p>In <a href="http://blog.intersoftsolutions.com/2015/08/editing-data-with-view-projection/" target="_blank">my post</a> last month, I mentioned about data optimization feature in Crosslight 4 which could greatly improve the overall performance and experience of your Crosslight apps. So here we are, this week’s post will feature this optimization feature, and you will learn how to apply it to your apps. Read on.</p>
<p>In Crosslight 4, we shipped a lot of <a href="http://intersoftsolutions.com/2015" target="_blank">new stunning components</a> like charting, barcode reader, dialog presenters and much more. But that’s not all. We also pay a lot of attention on small and unseen areas such as the data framework, logging, and view projection. In fact, no feature is too small. For instance, the new extensible filters in RestClient enable you to add request and response compression and make your apps work 75% faster, particularly if you’re building enterprise apps that sync relatively large data. Let’s see how it works.</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/09/Extensible-Request-and-Response-Filters.jpg"><img class="alignnone wp-image-4740" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/09/Extensible-Request-and-Response-Filters.jpg" alt="Extensible Request and Response Filters" width="700" height="389" /></a></p>
<p>Adding a new request or response filter to the RestClient is extremely easy, thanks to the new, intuitive API. Here’s how:</p><pre class="crayon-plain-tag">this.GetService&lt;IActivatorService&gt;().Register&lt;IRestClient&gt;(
c =&gt;
{
    RestClient restClient = new RestClient(appSettings.RestServiceUrl);
    restClient.AddRequestFilter(new GZipRequestFilter());
    restClient.AddResponseFilter(new GZipResponseFilter());

    return restClient;
});</pre><p></p>
<blockquote><p>If you&#8217;re using <a href="http://developer.intersoftsolutions.com/display/crosslight/Building+Business+Apps+with+Enterprise+App+Framework" target="_blank">Crosslight App Framework</a>, you can simply add the code in the <a href="http://git.intersoftsolutions.com/projects/CROS-SUPP/repos/rest-filter-samples/browse/RestFilterSamples.Core/Infrastructure/AppService.cs" target="_blank">AppService class</a> where all container registrations are defined. The Rest client in the entire app will automatically have the filters applied.</p></blockquote>
<p>Since the filter is provided as interface, you can plug any capabilities you desire, whether it is a compression filter, an encryption filter, etc. In this case, let’s not reinvent the wheel. We’ll just grab an existing <a href="https://www.nuget.org/packages/Microsoft.Bcl.Compression/3.9.85" target="_blank">Microsoft.Bcl.Compression</a> library from NuGet. Here’s an example how we can extend a third-party library to work with our filter interface:</p><pre class="crayon-plain-tag">public class GZipRequestFilter : GZipFilter, IRestRequestFilter
{
    public void Filter(IRestRequest request)
    {
        request.AddHeader("Accept-Encoding", "gzip, deflate");
        Parameter requestBody = request.Parameters.Where(o =&gt; o.Type == RequestParameterType.RequestBody).FirstOrDefault();

        if (requestBody != null)
        {
            request.AddHeader("Content-Encoding", "gzip");
            requestBody.Value = this.Compress(requestBody.Value.ToString());
        }
    }
}

public class GZipResponseFilter : GZipFilter, IRestResponseFilter
{
    public void Filter(IRestResponse response)
    {
        Parameter contentEncoding = response.Headers.Where(o =&gt; o.Name == "Content-Encoding").FirstOrDefault();

        if (contentEncoding != null &amp;&amp; contentEncoding.Value.ToString().ToLowerInvariant() == "gzip")
            response.Content = this.Decompress(response.RawBytes);
    }
}</pre><p>As seen above, we can just extend an existing class, say, the <em>GZipFilter</em> class, then implement the <em>IRestRequestFilter</em> and <em>IRestResponseFilter</em>. Both interfaces require an implementation of Filter method, that&#8217;s where you perform the actual logic of the filter.</p>
<p>On the server-side, if you’re using IIS for the web server, then you can just enable the dynamic compression feature. Afterward, the WebAPI response will be automatically compressed.</p>
<p>One thing to note though, WebAPI doesn’t automatically recognize the compressed requests. Fortunately, Microsoft already has a NuGet package for that. So we&#8217;ll just grab the <a href="https://www.nuget.org/packages/Microsoft.AspNet.WebApi.MessageHandlers.Compression/" target="_blank">ASP.NET WebAPI Compression Support</a>, then add the following code to the WebAPI config class.</p><pre class="crayon-plain-tag">public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        config.MessageHandlers.Insert(0, new ServerCompressionHandler(new GZipCompressor(), new DeflateCompressor()));
    }
}</pre><p>Pretty easy, right?</p>
<p>Based on performance test on one of the apps we built for our enterprise client, enabling the compression filters speed up our apps performance by nearly 4x. Previously, in certain case, the app took 9 minutes to synchronize a thousand of data over the Edge connection. With compression enabled, the app only took only 2 minutes to sync the same set of data over Edge, and only a few seconds over Wifi. The user couldn’t be happier. So we hope you can do the same too, your users will thank you so much.</p>
<p>To see the feature in action, <a href="http://git.intersoftsolutions.com/projects/CROS-SUPP/repos/rest-filter-samples/" target="_blank">pull the sample</a> from our Git, and play around with it. The feature is also fully documented, which you can find <a href="http://developer.intersoftsolutions.com/display/crosslight/Optimizing+Data+Access+Performance" target="_blank">here</a>. Happy optimizing!</p>
<p>Best,<br />
Jimmy</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2015/09/improving-crosslight-app-performance-with-compression/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Editing Data with View Projection</title>
		<link>http://blog.intersoftsolutions.com/2015/08/editing-data-with-view-projection/</link>
		<comments>http://blog.intersoftsolutions.com/2015/08/editing-data-with-view-projection/#comments</comments>
		<pubDate>Thu, 20 Aug 2015 10:40:55 +0000</pubDate>
		<dc:creator><![CDATA[Jimmy Petrus]]></dc:creator>
				<category><![CDATA[Crosslight]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[2015 R1]]></category>

		<guid isPermaLink="false">http://blog.intersoftsolutions.com/?p=4705</guid>
		<description><![CDATA[In my post last week, I have introduced a truly time-saving feature in Crosslight 4 called view projection. As its name implies, this feature supposed to be used only for data listing/viewing purpose. Typically, you will use a much simple (flat) object model that represents [...]]]></description>
				<content:encoded><![CDATA[<img width="604" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/08/View-projection-and-editing-604x270.png" class="attachment-post-thumbnail wp-post-image" alt="View projection and editing" style="float:right; margin:0 0 10px 10px;" /><p>In <a href="http://blog.intersoftsolutions.com/2015/08/introducing-crosslight-view-projection/">my post last week</a>, I have introduced a truly time-saving feature in Crosslight 4 called view projection. As its name implies, this feature supposed to be used only for data listing/viewing purpose. Typically, you will use a much simple (flat) object model that represents the shape of data which can be conveniently bound to the list view. However, the flattened object does no longer represent the actual hierarchy of your data, thus making it non suitable for editing. That said, how can we handle data editing scenario? Is it possible to enable data editing while leveraging view projection? Read on.</p>
<p>The quick answer is yes — data editing can be used together with view projection, but we&#8217;ll get there a bit later. When using view projection, we suggest that you load only necessary data that is actually used in the list view. Since the loaded data is not designed to be editable, the best practice for data editing is to reload the data complete with the related entities on demand, typically when user tapped on the cell to navigate. Thanks to the full-fledged app framework and entity services in Crosslight, that can be easily done in the <em>Navigated</em> method of EditorViewModel instance, like so:</p><pre class="crayon-plain-tag">public async override void Navigated(NavigatedParameter parameter)
{
    base.Navigated(parameter);

    if (parameter.Data != null)
    {
        this.ActivityPresenter.Show("Loading");
        this.IsDataLoading = true;

        // reload item along with the specified navigation properties
        await this.Repository.GetSingleAsync((parameter.Data as SalesOrderHeader).SalesOrderID, new string[] { "Customer", "Address1", "SalesOrderDetails", "SalesOrderDetails.Product" });

        // call OnItemChanging so the recently fetched related entities can be tracked after item reloading
        this.OnItemChanging(this.Item, this.Item);

        this.IsDataLoading = false;
        this.ActivityPresenter.Hide();
    }
}</pre><p>The above code is quite self explanatory. It will asynchronously load the entity along with the related entities given its primary key value when the editor view is navigated. The essence of the above code lies in the <a href="http://developer.intersoftsolutions.com/display/crosslightapi/IAsyncDataRepository(TEntity)+Interface" target="_blank">GetSingleAsync method</a> which now has a new overload that accepts an array of related properties to be reloaded along with the entity in one shot. That&#8217;s really intuitive.</p>
<p>To improve performance, it&#8217;s wise to load the entity only when it’s navigated the first time. That’s pretty easy to implement, let’s make changes to the code like this:</p><pre class="crayon-plain-tag">public async override void Navigated(NavigatedParameter parameter)
{
    base.Navigated(parameter);

    if (parameter.Data != null)
    {
        // only load additional data if it hasn't been loaded previously
        if (this.Item.Customer == null)
        {
            this.ActivityPresenter.Show("Loading");
            this.IsDataLoading = true;

            // reload item along with the specified navigation properties
            await this.Repository.GetSingleAsync((parameter.Data as SalesOrderHeader).SalesOrderID, new string[] { "Customer", "Address1", "SalesOrderDetails", "SalesOrderDetails.Product" });

            // call OnItemChanging so the recently fetched related entities can be tracked after item reloading
            this.OnItemChanging(this.Item, this.Item);

            this.IsDataLoading = false;
            this.ActivityPresenter.Hide();
        }
    }
}</pre><p>Piece of cake. Now, if the properties of the entity has changed, or the related entities have changed during editing, the changes won’t sync back to the list view. That’s actually normal, because the objects in the list view is no longer related to the entities being edited. Remember the code we wrote above? We reloaded the entity specifically for editing purpose during navigation.</p>
<p>There’s where the new <a href="http://developer.intersoftsolutions.com/display/crosslightapi/IEntityExtensions+Class+-+AppFramework?src=search" target="_blank">entity.UpdateProperties()</a> API comes to rescue. Simply call the API on the edited entity, it will automatically scan the changes and reflect them back to the projected properties. And even better, if you’ve upgraded to Crosslight 4’s Enterprise App Framework, then you have zero line of code to write. That’s made possible because the API is now baked to the <a href="http://git.intersoftpt.com/projects/CROS/repos/frameworks/browse/Intersoft.AppFramework/ViewModels.Infrastructure/DataEditorViewModelBase.cs" target="_blank">DataEditorViewModelBase class</a>, specifically in the <em>OnDataChanged</em> method. Here’s the code snippet for your convenience:</p><pre class="crayon-plain-tag">/// Called when a data item is changed.
protected override void OnDataChanged(TModel item)
{
    IEntity entity = this.Item as IEntity;
    if (entity != null)
        entity.UpdateProperties();

    base.OnDataChanged(item);
}</pre><p>And here&#8217;s the result as expected using the view projection samples:</p>
<p><a href="http://blog.intersoftsolutions.com/wp-content/uploads/2015/08/View-projection-and-editing.png"><img class="alignnone size-large wp-image-4709" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/08/View-projection-and-editing-1024x801.png" alt="View projection and editing" width="604" height="472" /></a></p>
<p>You might be wondering how the <em>UpdateProperties</em> API does its magic. How does it know which related entities have changed and which projected properties to sync back? The answer lies in the Crosslight&#8217;s powerful data framework which has complete information about the entity&#8217;s relationships and its metadata as well as built-in changes management.</p>
<blockquote><p>If you haven&#8217;t familiar with Crosslight data framework — or haven&#8217;t used it yet, I strongly recommend you to start using it. Learn more <a href="http://developer.intersoftsolutions.com/display/crosslight/Building+Business+Apps+with+Enterprise+App+Framework" target="_blank">here</a>.</p></blockquote>
<p>Now, let&#8217;s pull the <a href="http://git.intersoftpt.com/projects/CROS-SUPP/repos/view-projection-samples/browse" target="_blank">data samples</a> from our Git and see the editing in action with view projection. Run the sample in either iOS and Android platform, tap on a cell, edit some fields, i.e., City, then save it. Go back to the list view, voila, the changes are sync&#8217;ed back as expected, just as if it were an entity loaded with navigational properties.</p>
<p>In this post, we&#8217;ve looked at how a data-driven Crosslight app is built, covering both data list and editing by combining view projection and entity&#8217;s API. Now you also have better understanding on how Crosslight is designed to provide great developer experiences by eliminating much of the boilerplate code, so you can focus on the code that matters to your business apps. If you&#8217;ve any questions, we&#8217;d be happy to welcome you aboard on <a href="http://intersoftsolutions.com/community/crosslight" target="_blank">our community forum</a>.</p>
<p>Best,<br />
Jimmy</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2015/08/editing-data-with-view-projection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing Crosslight View Projection</title>
		<link>http://blog.intersoftsolutions.com/2015/08/introducing-crosslight-view-projection/</link>
		<comments>http://blog.intersoftsolutions.com/2015/08/introducing-crosslight-view-projection/#comments</comments>
		<pubDate>Mon, 10 Aug 2015 11:05:42 +0000</pubDate>
		<dc:creator><![CDATA[Jimmy Petrus]]></dc:creator>
				<category><![CDATA[2015 R1]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Crosslight]]></category>
		<category><![CDATA[Data Access]]></category>
		<category><![CDATA[view projection]]></category>
		<category><![CDATA[webapi]]></category>

		<guid isPermaLink="false">http://blog.intersoftpt.com/?p=4670</guid>
		<description><![CDATA[Couple weeks ago, we&#8217;ve finally released Premier Studio 2015, one of our most remarkable milestones. We shipped Crosslight 4 with a host of new exciting components, Visual Studio 2015 across all product lineup, and Windows Edge support for WebUI components. That&#8217;s not all. We also [...]]]></description>
				<content:encoded><![CDATA[<img width="604" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/08/Screen-Shot-2015-08-10-at-6.30.25-PM-604x270.png" class="attachment-post-thumbnail wp-post-image" alt="Order list" style="float:right; margin:0 0 10px 10px;" /><p>Couple weeks ago, we&#8217;ve finally released Premier Studio 2015, one of our most remarkable milestones. We shipped Crosslight 4 with a host of new exciting components, Visual Studio 2015 across all product lineup, and Windows Edge support for WebUI components. That&#8217;s not all. We also launched a fully redesigned website which was the result of months of redesign works. In case you missed the news, check out the full coverage on the release <a href="http://blog.intersoftpt.com/2015/07/intersoft-studio-2015-delivers-hundreds-new-features-and-enhancements-to-crosslight-asp-net-and-clientui/" target="_blank">here</a>, and the website redesign concept <a href="http://blog.intersoftpt.com/2015/07/intersoftwebsite-reimagined/" target="_blank">here</a>.</p>
<p>So now you&#8217;ve got the new Studio installed, what&#8217;s next? We&#8217;ve made available a wealth of resources to help you quickly get started. For the starting point, I recommend you to check out the <a href="http://developer.intersoftpt.com/display/crosslight/Crosslight+4.0+Release+Notes" target="_blank">release notes</a> and follow the links in the page. Over the next few weeks, we&#8217;ll blog around the new features introduced in this release, covering each of them in more practical way.</p>
<p>This week, I&#8217;d like to discuss about the new features in Crosslight data access components, and how you can leverage them to build faster, more reliable data intensive apps.</p>
<p>Displaying a list of data that includes information from several related tables is a very typical application scenario. Consider the order list in an order tracking app, it makes a good sense to show aggregated amount and shipping information along with the order item, perhaps something like this.</p>
<p><img class="alignnone size-full wp-image-4674" src="http://blog.intersoftpt.com/wp-content/uploads/2015/08/Screen-Shot-2015-08-10-at-6.30.25-PM.png" alt="Order list" width="375" /></p>
<p>Showing the list from orders table only is certainly straightforward, but how to include the related information? That&#8217;s easy, thanks to the data service component (both client &amp; server) included in Crosslight. Just use the <em>Includes</em> API in the query definition, so the related entities will be fetched automatically from the server, like so:</p><pre class="crayon-plain-tag">public override QueryDescriptor GetQueryDescriptor()
{
    QueryDescriptor queryDescriptor = this.GetBaseQueryDescriptor();
    queryDescriptor.Includes.Add("Customer");
    queryDescriptor.Includes.Add("Address1");

    return queryDescriptor;
}</pre><p>That works well in most cases, particularly for list with few included related entities. However, when you added more related entities to the list, the payload will become larger too, exponentially. This often leads to issues like: longer time to transfer the data, more overhead in entity processing, and more critically, larger memory allocation. But, that&#8217;s all natural due to the way related entities work. To understand how a response with related entities look like, take a look at the JSON below.</p><pre class="crayon-plain-tag">{
  "$id": "1",
  "$type": "Intersoft.Data.WebApi.QueryResult, Intersoft.Data.WebApi.v4",
  "AffectedRows": null,
  "InlineCount": null,
  "Results": [
    {
      "$id": "2",
      "Address1": {
        "$id": "3",
        "AddressID": 1092,
        "AddressLine1": "99700 Bell Road",
        "AddressLine2": null,
        "City": "Auburn",
        "StateProvince": "California",
        "CountryRegion": "United States",
        "PostalCode": "95603",
        "rowguid": "79cdd89c-3c91-48db-8277-46d04aad7251",
        "ModifiedDate": "2002-09-01T00:00:00.000",
        "CompleteAddress": "99700 Bell Road\nAuburn, California"
      },
      "Customer": {
        "$id": "4",
        "CustomerID": 29847,
        "NameStyle": false,
        "Title": "Mr.",
        "FirstName": "David",
        "MiddleName": null,
        "LastName": "Hodgson",
        "Suffix": null,
        "CompanyName": "Good Toys",
        "SalesPerson": "adventure-works\\linda3",
        "EmailAddress": "david16@adventure-works.com",
        "Phone": "969-555-0117",
        "PasswordHash": "+gtwbVycsIIj2loVtrHNRN6IBLl20lQpRK8+JhzxyEo=",
        "PasswordSalt": "AwqZdYk=",
        "rowguid": "fdd7d9cb-9a81-40fc-baf6-facde8da4923",
        "ModifiedDate": "2002-09-01T00:00:00.000"
      },
      "SalesOrderID": 71774,
      "RevisionNumber": 2,
      "OrderDate": "2015-06-01T00:00:00.000",
      "DueDate": "2015-06-13T00:00:00.000",
      "ShipDate": "2015-06-08T00:00:00.000",
      "ModifiedDate": "2015-06-08T00:00:00.000"
    }
}</pre><p>As seen in the above JSON, every included entity will be added as a child record in the server response. This allows the Crosslight entity manager to attach the records properly in the client side. In our simple test, the order list retrieved with the Includes approach took <a href="https://gist.github.com/jimmyps/f2e3968436ca1e66d2fd#file-salesorderheaders_includes-json" target="_blank">72 KB</a> in size.</p>
<blockquote><p>If you&#8217;re new to Crosslight or unfamiliar with the QueryDescriptor API, you might want to check out <a href="http://developer.intersoftpt.com/display/crosslight/Dynamic+Data+Access+with+Query+Descriptor" target="_blank">Dynamic Data Access with Query Descriptor</a>.</p></blockquote>
<p>Obviously, you can address the above issues with custom server query or custom views, which are well supported by Crosslight. But, creating custom query every time you need to display data is counter-productive and tedious at best, agree?</p>
<p>So what solution do we have in store? Read on.</p>
<h2>Enter View Projection.</h2>
<p>Building on our experiences in architecting large scale enterprise apps, and also based on our customer&#8217;s feedback, we are introducing a more efficient way to create a shaped view in Crosslight 4. Called view projection, you can easily create a data view comprised of various information from related tables into a single flat list – dramatically shrinking payload size and processing time. We believe this is a better, more efficient, and more reliable way to fetch and present data in Crosslight apps.</p>
<p>Using the same order list scenario above, we can now extend the order entity with new properties to contain the additional information we&#8217;d like to fetch, then simply add the new <em>Select</em> attribute to indicate which property and related table to fetch, like so:</p><pre class="crayon-plain-tag">public partial class SalesOrderHeader
{
    [Select("Address1.CompleteAddress")]
    public string ShipAddress { set; get; }

    [Select("Customer.CompanyName")]
    public string CustomerCompany { set; get; }
}</pre><p>By defining such a simple metadata in the client side, the server will automatically construct the query behind the scene. Back in the client, you&#8217;ll get the data with the additional information in a flat list, then simply bind it to a list view. Piece of cake.</p>
<p>Here&#8217;s the example result of the response.</p><pre class="crayon-plain-tag">{
  "$id": "1",
  "$type": "Intersoft.Data.WebApi.QueryResult, Intersoft.Data.WebApi.v4",
  "AffectedRows": null,
  "InlineCount": null,
  "Results": [
    {
      "$id": "2",
      "$type": "ViewProjectionSample.DomainModels.SalesOrderHeader, ViewProjectionSample.DomainModels",
      "SalesOrderID": 71774,
      "RevisionNumber": 2,
      "OrderDate": "2015-06-01T00:00:00.000",
      "DueDate": "2015-06-13T00:00:00.000",
      "ShipDate": "2015-06-08T00:00:00.000",
      "ModifiedDate": "2015-06-08T00:00:00.000",
      "SalesOrderDetails": [ ], 
      "Address": null,
      "Address1": null,
      "Customer": null,
      "ShipAddress": "99700 Bell Road\nAuburn, California",
      "CustomerCompany": "Good Toys"
    }
}</pre><p>As expected, the <em>Customer</em> and <em>Address</em> entities are no longer included in the returned result. Instead, the <em>ShipAddress</em> and <em>CustomerCompany</em> properties are simply filled with the requested information.</p>
<p>Per our test using the same order query, the view projection took only <a href="https://gist.github.com/jimmyps/ed2985415448d922c4dd#file-salesorderheaders_viewprojection-json" target="_blank">37 KB</a>, about half the size of the response size using Includes approach. If you build relatively complex data apps, this view projection alone could reduce the response size up to 75%.</p>
<p>That&#8217;s not all. Nested properties is also supported, so you can easily include any entity regardless of the depth, as long as their relationships are well defined. Here&#8217;s an example of nested property selection.</p><pre class="crayon-plain-tag">[Select("Product.Category.CategoryName")]
public string ProductCategory { set; get; }

[Select("Order.ShipToAddress.Country.Name")]
public string ShipCountry { set; get; }</pre><p>In addition to nested properties, the new Select attribute is also smart enough to do some heavy data aggregation and calculation. Say you want to include the order details count and total to the order list, you can specify the Select attribute like this:</p><pre class="crayon-plain-tag">[Select("SalesOrderDetails.OrderQty", Aggregate.Sum)]
public int ProductQuantity { set; get; }</pre><p>As expected, the returned result will look something like this:</p><pre class="crayon-plain-tag">{
  "$id": "1",
  "$type": "Intersoft.Data.WebApi.QueryResult, Intersoft.Data.WebApi.v4",
  "AffectedRows": null,
  "InlineCount": null,
  "Results": [
    {
      "$id": "2",
      "$type": "ViewProjectionSample.DomainModels.SalesOrderHeader, ViewProjectionSample.DomainModels",
      "SalesOrderID": 71774,
      "RevisionNumber": 2,
      "OrderDate": "2015-06-01T00:00:00.000",
      "DueDate": "2015-06-13T00:00:00.000",
      "ShipDate": "2015-06-08T00:00:00.000",
      "ModifiedDate": "2015-06-08T00:00:00.000",
      "SalesOrderDetails": [ ], 
      "Address": null,
      "Address1": null,
      "Customer": null,
      "ShipAddress": "99700 Bell Road\nAuburn, California",
      "CustomerCompany": "Good Toys",
      "ProductQuantity": 2
    }
}</pre><p>Unbelievably simple, isn&#8217;t it? We haven&#8217;t quite finished yet, read on.</p>
<p>How about using some mathematical operations along with the data aggregate, you asked. Well, we&#8217;ve got those covered too. Here&#8217;s a quick example:</p><pre class="crayon-plain-tag">[Select("SalesOrderDetails", "OrderQty * UnitPrice * (1 - UnitPriceDiscount)", Aggregate.Sum)]
public double SubTotal { set; get; }</pre><p>In addition to sum, as you might already have in mind, we also supported other aggregate options such as count, min, max, and average.</p>
<p>And if you just realized, we haven&#8217;t touch the server part even a bit, are we missing something? Nope. The server recognizes all these new Select metadata, thanks to the much improved WebApi component introduced in the new <a href="http://developer.intersoftpt.com/display/crosslightapi/Intersoft.Data.WebApi.v4+Assembly" target="_blank">Intersoft.Data.WebApi.v4</a> assembly.</p>
<blockquote><p>In fact, all you have to do at the server side is to update the Intersoft WebApi assemblies and the related Nuget packages to the latest version. Check out this <a href="http://developer.intersoftpt.com/display/crosslight/Crosslight+4+Upgrade+Guide" target="_blank">upgrade guide</a> for details.</p></blockquote>
<p>Last but not least, all the powerful new capabilities above are equally supported in Crosslight SQLite as well, so if you build sync-aware apps, the same metadata will work just fine, whether the app loads data from the remote server or local storage. In addition, the view projection has been carefully designed to support data editing and update scenario as well which I&#8217;ll cover in the next post.</p>
<p>We&#8217;ve designed Crosslight with strong focus on developer experience since the initial release. We continue to provide even greater developer experience in this new release, making the impossible possible with intuitive and simple API design.</p>
<p>We still have a lot of stories to cover around data access improvements, but for now, let&#8217;s pull <a href="http://git.intersoftpt.com/projects/CROS-SUPP/repos/view-projection-samples/browse" target="_blank">some samples</a> and see the demo of view projection features for yourself. If you have any questions, join us in <a href="http://intersoftpt.com/community/crosslight" target="_blank">our community forum</a>.</p>
<p>Best,<br />
Jimmy</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2015/08/introducing-crosslight-view-projection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The much anticipated Intersoft Studio 2015 is now released.</title>
		<link>http://blog.intersoftsolutions.com/2015/07/intersoft-studio-2015-delivers-hundreds-new-features-and-enhancements-to-crosslight-asp-net-and-clientui/</link>
		<comments>http://blog.intersoftsolutions.com/2015/07/intersoft-studio-2015-delivers-hundreds-new-features-and-enhancements-to-crosslight-asp-net-and-clientui/#comments</comments>
		<pubDate>Thu, 23 Jul 2015 11:29:29 +0000</pubDate>
		<dc:creator><![CDATA[Nicholas Lie]]></dc:creator>
				<category><![CDATA[announcement]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[2015 R1]]></category>
		<category><![CDATA[Crosslight]]></category>
		<category><![CDATA[Visual Studio 2015]]></category>
		<category><![CDATA[Windows Edge]]></category>

		<guid isPermaLink="false">http://blog.intersoftpt.com/?p=4638</guid>
		<description><![CDATA[The wait is over! Today we just released Premier Studio 2015, our biggest release ever. You will discover a lot of new features and enhancements, especially on our cross-platform mobile toolset, Crosslight 4. Our team has put big efforts on bringing WebUI Studio to fully [...]]]></description>
				<content:encoded><![CDATA[<img width="604" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2015/07/1437736522_full-604x270.png" class="attachment-post-thumbnail wp-post-image" alt="1437736522_full.png" style="float:right; margin:0 0 10px 10px;" /><p>The wait is over! Today we just released Premier Studio 2015, our biggest release ever. You will discover a lot of new features and enhancements, especially on our cross-platform mobile toolset, Crosslight 4. Our team has put big efforts on bringing WebUI Studio to fully support of the newest built-in Microsoft Edge web browser and Microsoft Visual Studio 2015. You can now enjoy utilizing our controls in these latest technologies.</p>
<p>Let&#8217;s see some of the key highlights in this release.</p>
<h2>Crosslight 4: The Gold Standard for Enterprise Mobile Development Toolset is Here.</h2>
<p>We have committed to provide the best and powerful features to Crosslight from version 1 until now. In this release, Crosslight 4 introduces more than 12,000 new APIs, three times more than the previous release. This release also adds a comprehensive data visualization suite supporting 20+ chart types, supercharged sync framework, view projection technology, barcode scanner service, a highly extensible logging framework featuring integration with Azure Application Insights, all-new dialog presenter, as well as hundreds of major improvements in data access components and synchronization framework.</p>
<p><a href="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736522_full.png" target="_blank"><img class="aligncenter" src="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736522_thumb.png" alt="" align="middle" /></a></p>
<p>Moreover, we also provide iOS storyboard support and many tooling support improvements, allowing you to design iOS views and work with Crosslight iOS components entirely in Xamarin Studio, whether in Mac or Windows. <a href="http://developer.intersoftpt.com/display/crosslight/Crosslight+4.0+Release+Notes">Discover more about Crosslight 4</a>.</p>
<h2>Crosslight Charting</h2>
<p>You want it, we deliver them to you! As Enterprise mobile user, you will obviously need to process the data into meaningful information on the go. We are here to present Crosslight Charting which takes mobile charting to a whole new level. With over more than 20 chart types, you can freely visualize data on mobile devices like never before.</p>
<p><a href="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736558_full.png" target="_blank"><img class="aligncenter" src="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736558_thumb.png" alt="" align="middle" /></a></p>
<p>You will love the key features introduce in Crosslight Charting. We have lighting-fast performance with pixel-perfect rendering, smooth animation with elegant styles, interactive axis zooming and panning, built-in enterprise chart features and more. <a href="http://developer.intersoftpt.com/display/crosslight/Crosslight+4.0+Release+Notes#Crosslight4.0ReleaseNotes-Business-oriented,GorgeousDataVisualization">Let&#8217;s see what Crosslight Charting offers</a>.</p>
<h2>Crosslight Dialog Presenter</h2>
<p>Since the initial version of Crosslight, Crosslight provides a way for you to easily display messages or user actions with a centralized call of the presenters from the ViewModel. You can freely choose from either one of the following presenters: Action Presenter, Activity Presenter, Message Presenter and Toast Presenter. It doesn&#8217;t stop here as we have added all new, very powerful and flexible presenter to the family: the dialog presenter. Using the dialog presenter, you can display virtually any content using the dialog presenter, complete with your own app branding. This takes out the pain from developers to display flexible content inside their apps. <a href="http://developer.intersoftpt.com/display/crosslight/Crosslight+4.0+Release+Notes#Crosslight4.0ReleaseNotes-Innovative,HighlyVersatileDialogPresenter">Learn more</a>.</p>
<p><a href="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736581_full.png" target="_blank"><img class="aligncenter" src="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736581_thumb.png" alt="" align="middle" /></a></p>
<h2>Crosslight Barcode Scanner</h2>
<p>Never thought how you can create barcode scanner on your mobile devices? In this release, Crosslight 4 continues its innovation by introducing a new barcode scanner service that will help developers integrate barcode scanning feature right into Crosslight apps. Built from the ground up, Crosslight Barcode Scanner Service will be able to support and scan almost any types of barcode in the world as it supports more over than 20+ types of barcode format. Nice! <a href="http://developer.intersoftpt.com/display/crosslight/Crosslight+4.0+Release+Notes#Crosslight4.0ReleaseNotes-ComprehensiveBarcodeScannerService">Explore more on Crosslight Barcode Scanner</a>.</p>
<p><a href="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736603_full.png" target="_blank"><img class="aligncenter" src="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736603_thumb.png" alt="" align="middle" /></a></p>
<h2>Powerful, Extensible Logging Service</h2>
<p>Powerful and comprehensive logging is an invaluable part of an enterprise app. It allows you to perform data mining, gather information about your users, and analyze errors and crashes for your app, especially when your app reaches production phase. In this release, we&#8217;re bringing you Crosslight Logging Framework, which will change how you log information from your app. You can also easily log your apps to Azure Application Insights. <a href="http://developer.intersoftpt.com/display/crosslight/Crosslight+4.0+Release+Notes#Crosslight4.0ReleaseNotes-Powerful,ExtensibleLoggingService">Learn more</a>.</p>
<p><a href="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736663_full.jpeg" target="_blank"><img class="aligncenter" src="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736663_thumb.jpeg" alt="" align="middle" /></a></p>
<h2>Improved Form Builder</h2>
<p>Crosslight Form Builder has been a favorite feature since it was first introduced in Crosslight 1. Crosslight developers have long enjoyed the simplicity of achieving tasks like form validation, data binding, form element placements and more using Crosslight Form Builder. In this release, the Crosslight Form Builder receives two new enhancements: interactive section visibility with animation and a new numeric stepper editor.</p>
<p><a href="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736685_full.png" target="_blank"><img class="aligncenter" src="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736685_thumb.png" alt="" align="middle" /></a></p>
<p>The numeric stepper is the perfect editor for incrementing numeric values in small range, while the section visibility binding now allows you to show and hide sections at runtime, enabling more enterprise business scenarios. <a href="http://developer.intersoftpt.com/display/crosslight/Crosslight+4.0+Release+Notes#Crosslight4.0ReleaseNotes-ImprovedFormBuilder">Learn more</a>.</p>
<h2>What&#8217;s New in Crosslight iOS</h2>
<p>Good news for iOS developers! Crosslight 4 release marks an important milestone for iOS development specifically the addition for universal storyboards and Xamarin iOS designer support. It also added sophisticated data visualization library and a lots of beautiful UI components that will surely elevate your iOS apps to the next level, such as scale and slide drawer animations, segmented bar controller, gorgeous rounded button and more. <a>See what&#8217;s new in Crosslight iOS</a>.</p>
<h2>What&#8217;s New in Crosslight Android</h2>
<p>Not only iOS but we bring good news for Android developers too. Crosslight 4 gives great enhancements to Android which will make mobile development even easier, such as new rounded button, new numeric stepper control, fused location provider, add binding support, ListView improvement in FormBuilder and many more. <a>See what&#8217;s new in Crosslight Android</a>.</p>
<h2>Improved IDE and Tooling Supports</h2>
<p>We have provided a comprehensive and powerful IDE and tooling support that is compatible with Visual Studio or Xamarin Studio, such as Crosslight Project Wizard, numerous item templates and project templates.</p>
<p><a href="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736732_full.png" target="_blank"><img class="aligncenter" src="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736732_thumb.png" alt="" align="middle" /></a></p>
<p>All of these supports have truly helped developers to write, build, debug test and deploy their apps on devices. Crosslight 4 continues to enhance with even improved IDE and tooling support: iOS universal storyboard, Xamarin iOS designer, Visual Studio 2015 support and Visual Studio 2015 Android Emulator support. <a href="http://developer.intersoftpt.com/display/crosslight/Crosslight+4.0+Release+Notes#Crosslight4.0ReleaseNotes-ImprovedIDEandToolingSupport">Learn more</a>.</p>
<h2>Visual Studio 2015 Ready</h2>
<p>Along with the new operating system, Windows 10, Microsoft has announced the RTM availability of the .NET developers&#8217; favorite IDE, the Visual Studio 2015.</p>
<p><a href="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736755_full.jpeg" target="_blank"><img class="aligncenter" src="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736755_thumb.jpeg" alt="" align="middle" /></a></p>
<p>The new IDE brings many exciting features to the table such as custom windows layouts, a better JustCode code editor with Roslyn support, shared project, IntelliSense support for XAML, Bower and NPM, and much more. Alongside these new features, developers can also enjoy accelerated development time with Intersoft Solutions&#8217; award-winning toolset. The WebUI and ClientUI product lineup have been upgraded to fully support the design-time capabilities of the new IDE. Developers can enjoy the pure simplicity of drag-and-drop features when interacting with the designer tool. Crosslight developers can now enjoy the same, great development experience while working with Crosslight projects using the enhanced Project Wizard and templates that work wonderfully in Visual Studio 2015.</p>
<h2>Windows 10 and Edge Support</h2>
<p>With the announcement of public availability of Windows 10 on 29th July, 2015, we are dedicated to bringing full support to its product lineups from day 1. The entire WebUI suite is now enhanced to fully support the newest built-in Microsoft Edge web browser and renders in pixel-perfect retina display.</p>
<p><a href="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736862_full.png" target="_blank"><img class="aligncenter" src="http://blog.intersoftpt.com/wp-content/uploads/2015/07/1437736862_thumb.png" alt="" align="middle" /></a></p>
<p>In addition, ClientUI controls have also been tested to fully work in supported browsers running on top of Microsoft&#8217;s latest and greatest operating system. Furthermore, Crosslight has also been improved to support the latest operating system as well. Thanks to our team for their hard-work as we continue our enduring commitment to bringing great products that will significantly speed up development time on top of Microsoft&#8217;s revolutionary operating system.</p>
<p>To discover the new features with better experiences, check out the <a href="http://www.intersoftpt.com/2015" target="_blank">2015 Tour</a> page.</p>
<h2>Download Today</h2>
<p>Visit our <a href="http://developer.intersoftpt.com/display/crosslight/Home">Crosslight Developer Center</a> to get more information about Crosslight architecture, walkthroughs, samples as well as Crosslight roadmap. We just want to ensure that you always get the best &#8220;cutting-edge&#8221; toolset for your development. Download your free trial <a href="http://intersoftpt.com/requesttrial">here</a> and experience building cross-platform mobile, enterprise and web apps with less effort.</p>
<p>&nbsp;</p>
<p>Cheers,<br />
Nicholas Lie</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2015/07/intersoft-studio-2015-delivers-hundreds-new-features-and-enhancements-to-crosslight-asp-net-and-clientui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
