<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.componentart.com/community/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"><channel><title>ComponentArt</title><link>http://www.componentart.com/community/blogs/</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP2 (Debug Build: 40407.4157)</generator><item><title>How to implement Drill-through functionality in Datazen</title><link>http://www.componentart.com/community/blogs/marjan/archive/2014/05/20/how-to-implement-drill-through-functionality-in-datazen.aspx</link><pubDate>Tue, 20 May 2014 18:01:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:114085</guid><dc:creator>Marjan</dc:creator><slash:comments>0</slash:comments><description>&lt;p class="MsoNormal"&gt;On Datazen all Gauges and Datagrids and most of Charts can be configured to perform drill-through action to another dashboard or custom URL and based on the dashboards/URL different parameters can be passed to target dashboard or custom URL.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;In this blog post I&amp;rsquo;m going to set drill-though functionality using two existing Datazen dashboards.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;For configuring this feature I should first create both Source and target dashboards and here I have created two dashboards to visualize Sales metric for a store; an overview dashboard that clicking on the gauge in the dashboard transfers users to a details dashboard which lists transactions for the specific department and the selected time range. &lt;/p&gt;
&lt;p class="MsoNormal"&gt;I used an Excel datasheet structured as below for creating following dashboards using Datazen Windows8 publisher application:&lt;/p&gt;
&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/5850.Data.png"&gt;&lt;img border="0" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/5850.Data.png" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;And followings are two the dashboards called &amp;ldquo;Sales Overview&amp;rdquo; and &amp;ldquo;Sales Details&amp;rdquo;:&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/8081.SourceDashboard.png"&gt;&lt;img border="0" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/8081.SourceDashboard.png" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Our goal is to be able to click on the gauge on Sales Overview dashboard above and load details dashboard for selected Department and selected time range as below:&lt;/p&gt;
&lt;br /&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/3617.TargetDashboard.png"&gt;&lt;img border="0" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/3617.TargetDashboard.png" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Now that both dashboards are created and related data exists for both dashboards I open Sales Overview (source) dashboard in edit mode and select Avg. Sales vs. Target gauge in Layout View:&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/8407.DrillThough1.png"&gt;&lt;img border="0" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/8407.DrillThough1.png" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;In Visual Property there exists a feature called Drill-through Target. By clicking on that you can choose type of Drill-though and here I have selected Dashboard&amp;hellip;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The next window is displaying a list of all existing dashboards and I selected Sales Details. As soon as you select a dashboard a list of accepting parameters in target dashboard will be displayed and you can link existing source dashboard parameters to target parameters:&lt;/p&gt;
&lt;br /&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/4606.DrillThough2.png"&gt;&lt;img border="0" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/4606.DrillThough2.png" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;When you set all passing context and apply two dashboards will link. For previewing the drill-through functionality you should save the dashboard and run it from home page and that cannot be performed in Run Preview while in edit mode.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;An important note that for setting Drill-though functionality for published dashboards the published version of target dashboard should be selected during dashboard selection on source dashboard.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Also you can set more advanced drill-through features like passing default value from source dashboard to target and passing context to a Load on demand parameterized query on target dashboard when working with Datazen Enterprise.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;For more details on using parameterized queries and Load on Demand feature you can check Filip&amp;rsquo;s post &lt;a href="http://www.datazen.com/blogs/post/datazen-load-on-demand-data-with-parameterized-queries"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=114085" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/marjan/archive/tags/Datazen/default.aspx">Datazen</category><category domain="http://www.componentart.com/community/blogs/marjan/archive/tags/BI+Dashboards/default.aspx">BI Dashboards</category><category domain="http://www.componentart.com/community/blogs/marjan/archive/tags/Drill-Through/default.aspx">Drill-Through</category></item><item><title>Datazen: Load On Demand Data with Parameterized Queries</title><link>http://www.componentart.com/community/blogs/filip/archive/2013/10/28/datazen-load-on-demand-data-with-parameterized-queries.aspx</link><pubDate>Mon, 28 Oct 2013 13:41:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:113762</guid><dc:creator>filipK</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;One of the great features of &lt;a href="http://www.datazen.com/features/"&gt;Datazen&lt;/a&gt;&amp;nbsp;is its ability to download the entire data set onto the Windows 8 client and then perform all filtering and calculations locally. &amp;nbsp;Not only does this make all interactions (after the initial load) instantaneous, but it also allows the dashboard to be fully functional when the connectivity is lost (as long as the administrator has allowed this for the data view being used). &amp;nbsp;This makes Datazen dashboards truly mobile, as you are able to enjoy them on your mobile device on the go or while away from the office.&lt;/p&gt;
&lt;p&gt;Even though this approach is great for most dashboards, it presents a problem when dealing with extremely large data sets. &amp;nbsp;If the dashboard is dealing with hundred thousand or millions of records, downloading the entire data set can be a burden for the client, especially if it is a tablet with lower end hardware. &amp;nbsp;On top of that, the time needed to transfer the data can make the initial load of the dashboard slow.&lt;/p&gt;
&lt;p&gt;To solve this problem Datazen 2.0 has introduced parameterized queries. &amp;nbsp;This allows the data views used by the dashboards to accept parameters from the dashboard and use them in the data queries (i.e. SQL, MDX) to return only the data need by the current view of the dashboard. &amp;nbsp;When the end user interacts with the dashboard and changes a filter, the data queries are re-executed and again only the necessary data is sent back to be rendered in the dashboard.&lt;/p&gt;
&lt;h2&gt;Creating Dashboards with Load On Demand Data&lt;/h2&gt;
&lt;p&gt;Creating dashboards that load data on demand is a two step process. &amp;nbsp;First you need to create the appropriate data views that allow parameters from the dashboards to be passed into the queries. &amp;nbsp;Once this is done, you have to connect the parameters to the appropriate filters in the dashboards in order for the view to be properly used by the dashboard.&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-size:1.17em;"&gt;Creating Parameterized Views&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Start off by creating a new data view inside your Data Source in the Control Panel. &amp;nbsp;Currently parameterized views are supported for SQL and MDX queries. &amp;nbsp;Note that you have to be logged in as admin or the hub owner to configure data sources in the hub.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/3288.ParamView1.png"&gt;&lt;img style="border:0;vertical-align:middle;" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/3288.ParamView1.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Check the &amp;quot;Real Time&amp;quot; checkbox and then click on the &amp;quot;Define Parameters&amp;quot; link beside it. &amp;nbsp;Note that since parameterized queries are executed every time the view changes in the client, they have to be real time and cannot be cached on the Datazen Server.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/4718.ParamView2.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/4718.ParamView2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here, we can configure all the parameters we need to pass from the dashboard into our query in order to optimize it. &amp;nbsp;In our example we will use parameterized queries to return only results within the selected time range and only for the selected product.&lt;/p&gt;
&lt;p&gt;Note that for the Product parameter we use the &amp;quot;%&amp;quot; symbol as a default value. &amp;nbsp;This is a &lt;a target="_blank" href="http://technet.microsoft.com/en-us/library/ms179859.aspx"&gt;Transact SQL&lt;/a&gt; operator that will match any string, meaning that we want all values returned when nothing is specified in the parameter.&lt;/p&gt;
&lt;p&gt;We can now click on &amp;quot;Done&amp;quot; and create our query.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/0246.ParamView3.png"&gt;&lt;img border="0" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/0246.ParamView3.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In our SQL query we can now make use of the parameters by enclosing them in a set of double braces such as &amp;nbsp;&lt;strong&gt;{{ @ParamName }}&lt;/strong&gt;. &amp;nbsp;Note that the Product WHERE clause has a special case for the empty string. &amp;nbsp;The reason for this is that product selection will come from a Selection List control in a dashboard that has the &amp;quot;All&amp;quot; option enabled. When the user selects &amp;quot;All&amp;quot; the selection list will pass the empty string as a selection which we handle in our query to select all products.&lt;/p&gt;
&lt;p&gt;We can click on &lt;i&gt;Next &lt;/i&gt;to finish creating our query which ends the server part of the configuration.&lt;/p&gt;
&lt;h3&gt;Using Parameterized Views in a Dashboard&lt;/h3&gt;
&lt;p&gt;Once we have our parameterized view created, we can configure our dashboard to use it. &amp;nbsp;In our Windows 8 Datazen client, we can create a dashboard that will have the Time Navigator for the time range selection and a Selection List to select a product. &amp;nbsp;The idea is to pass the selected values to the parameterized query so that we only receive the data we need to display. &amp;nbsp;Our sample dashboard can look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/0285.ParamClient1.png"&gt;&lt;img border="0" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/0285.ParamClient1.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We can go into the Data View and import the data source we created previously into our dashboard.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/7673.ParamClient2.png"&gt;&lt;img border="0" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/7673.ParamClient2.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The data source will appear with a green P to denote that we can configure parameters on it. &amp;nbsp;We can click on the gears icon beside the green P and select the &lt;strong&gt;Param &lt;/strong&gt;option.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/5123.ParamClient3.png"&gt;&lt;img border="0" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/5123.ParamClient3.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The parameter configuration screen will allow us to bind any of the available data parameters we have in our dashboard to each of the parameters available in the query.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/1667.ParamClient5.png"&gt;&lt;img border="0" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/1667.ParamClient5.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We proceed by binding the Time Navigator selected start and end time to the two time parameters and the selected item in the Product selection list to the &lt;i&gt;Product &lt;/i&gt;parameter.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/2620.ParamClient4.png"&gt;&lt;img border="0" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/2620.ParamClient4.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;By completing the parameter setup we have now successfully configured load on demand with parameterized queries. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;We can now bind other visual controls to the &lt;i&gt;Data for Product Time&lt;/i&gt;&amp;nbsp;parameterized query. &amp;nbsp;Each time one of the parameters changes through end user input, the data source will be refreshed, along with all the controls that use that data. &amp;nbsp;With this approach, you do not need to configure the Product selection list to filter anything on the client since the filtering is done on the database and only the needed results are returned.&lt;/p&gt;
&lt;p&gt;But the main advantage is that dealing with millions of records will not be any slower than dealing with a few hundred.&lt;/p&gt;
&lt;h3&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=113762" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/filip/archive/tags/LoD/default.aspx">LoD</category><category domain="http://www.componentart.com/community/blogs/filip/archive/tags/datazen/default.aspx">datazen</category><category domain="http://www.componentart.com/community/blogs/filip/archive/tags/load+on+demand/default.aspx">load on demand</category><category domain="http://www.componentart.com/community/blogs/filip/archive/tags/parameterized+queries/default.aspx">parameterized queries</category></item><item><title>Create Dashboards; as sweet as Sugar!</title><link>http://www.componentart.com/community/blogs/marjan/archive/2013/02/27/create-dashboards-as-sweet-as-sugar.aspx</link><pubDate>Wed, 27 Feb 2013 18:03:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:112698</guid><dc:creator>Marjan</dc:creator><slash:comments>0</slash:comments><description>&amp;nbsp;&lt;br /&gt;
&lt;p class="MsoNormal"&gt;&amp;ldquo;Datazen&amp;rdquo; the latest ComponentArt product is so awesome that I couldn&amp;rsquo;t stop writing about it.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Here I will navigate you to create a powerful elegant dashboard just in minutes.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Simply down load the app from &lt;a href="http://www.datazen.com/" target="_blank"&gt;Datazen&lt;/a&gt; website or Windows store from&amp;nbsp;&lt;a href="http://apps.microsoft.com/windows/en-US/app/datazen/37cc7744-e921-4f11-be15-c9628e6e572a" target="_blank"&gt;here&lt;/a&gt;&amp;nbsp;and install it on your windows8 machine.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Click on the live tile from start and you will see a collection of decent dashboards categorized in different concepts like below.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;                     &lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/7026.1.png"&gt;&lt;img border="0" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/7026.1.png" alt="" /&gt;&lt;/a&gt;&lt;br clear="ALL" /&gt; &lt;/p&gt;
&lt;p class="MsoNormal"&gt;So if you are happy with any of them you are almost done with the design, grab one and enjoy!&lt;/p&gt;
&lt;p class="MsoNormal"&gt;If you would like to make your own customized dashboard, right click and create one or modify one of the existing.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The environment provides you the very ready to use tool box as you can build up a tailor made page in fraction of time with available most common used data visualization controls, all you need is to drag the desired item from left and drop it in designing canvas on the right and leave all the rest to adorable Datazen.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;   &lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/0763.2.png"&gt;&lt;img border="0" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/0763.2.png" alt="" /&gt;&lt;/a&gt;&lt;br clear="ALL" /&gt; And during the design time you can play the preview to see how things are going on.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;   &lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/3301.3.png"&gt;&lt;img border="0" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/3301.3.png" alt="" /&gt;&lt;/a&gt;&lt;br clear="ALL" /&gt; And congratulations, you are done with the design phase which has been always the most time consumer phase in a dashboard project.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;In order to bind the dashboard to your data you can choose different data sources from Microsoft Excel to enterprise and cloud sources.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;To integrate data simply click on the &amp;ldquo;Data View&amp;rdquo; and the smart wizard will take you through you can also save and run the dashboard, keep it as a live tile or send it over as an email attachment with all data.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Any time after you can modify the created dashboard and change the theme, color palette or design structure following the easy above steps.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Try one and enjoy, your points of view will totally be changed to dashboard creation!&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=112698" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/marjan/archive/tags/ComponentArt/default.aspx">ComponentArt</category><category domain="http://www.componentart.com/community/blogs/marjan/archive/tags/Datazen/default.aspx">Datazen</category><category domain="http://www.componentart.com/community/blogs/marjan/archive/tags/BI+Dashboards/default.aspx">BI Dashboards</category></item><item><title>Common Pitfalls in Dashboard Design</title><link>http://www.componentart.com/community/blogs/filip/archive/2012/11/22/common-pitfalls-in-dashboard-design.aspx</link><pubDate>Thu, 22 Nov 2012 16:22:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:112053</guid><dc:creator>filipK</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I ran across an excellent whitepaper recently. &amp;nbsp;It was published a few years ago, but since it has nothing to do with technology, its content is very relevant.&lt;/p&gt;
&lt;p&gt;In an article titled&amp;nbsp;&lt;a href="http://www.perceptualedge.com/articles/Whitepapers/Common_Pitfalls.pdf"&gt;Common Pitfalls in Dashboard Design&lt;/a&gt;, Stephen Few outlines 13 points to be mindful of when designing dashboards. &amp;nbsp;In his own words: &amp;quot;&lt;span&gt;&lt;i&gt;Knowing what to avoid isn&amp;rsquo;t everything, but it&amp;rsquo;s a
good start&lt;/i&gt;&amp;quot;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The list of items to look out for is:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;1.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Exceeding the boundaries of a single screen&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;2.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Supplying inadequate context for the data&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;3.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Displaying excessive detail or precision&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;4.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Expressing measures indirectly&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;5.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Choosing
inappropriate media of display&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;6.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Introducing meaningless variety&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;7.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Using
poorly designed display media&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;8.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Encoding
quantitative data inaccurately&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;9.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Arranging the data poorly&lt;br /&gt;&amp;nbsp; &amp;nbsp; 10.&amp;nbsp;&amp;nbsp;&amp;nbsp; Ineﬀectively
highlighting what&amp;rsquo;s important&lt;br /&gt;&amp;nbsp; &amp;nbsp; 11.&amp;nbsp;&amp;nbsp;&amp;nbsp; Cluttering the
screen with useless decoration&lt;br /&gt;&amp;nbsp; &amp;nbsp; 12.&amp;nbsp;&amp;nbsp;&amp;nbsp; Misusing or
overusing color&lt;br /&gt;&amp;nbsp; &amp;nbsp; 13.&amp;nbsp;&amp;nbsp;&amp;nbsp; Designing an
unappealing visual display&lt;/p&gt;
&lt;p&gt;From my experience with ComponentArt&amp;#39;s Professional Services team, I can concur that a lot of these issues are common, especially for people or organizations trying to visualize their data for the first time.&lt;/p&gt;
&lt;p&gt;Experience tells me that the key is to know who your target audience is. &amp;nbsp;At the risk of sounding like a lazy middle manager trying to solving the problem without getting his hands dirty, I point you to another good article,&amp;nbsp;&lt;a href="http://www.alistapart.com/articles/usable-yet-useless-why-every-business-needs-product-discovery/"&gt;Usable yet Useless: Why Every Business Needs Product Discovery&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Knowing your target audience, and what they need to see or what actions they need to perform will help you immensely with making the dashboard a success in its first&amp;nbsp;iteration. &amp;nbsp;And if that wish list becomes too long, then the key is to prioritize properly - make the most important data easily visible and the most common actions or filters obvious and accessible with the least number of clicks.&lt;/p&gt;
&lt;p&gt;The good news is that just working with ComponentArt&amp;#39;s Data Visualization controls will help you eliminate some of the items in the list above. &amp;nbsp;And if you&amp;#39;re still having trouble nailing the perfect look and feel, our Professional Services team can definitely help with advice.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=112053" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/filip/archive/tags/dashboard/default.aspx">dashboard</category><category domain="http://www.componentart.com/community/blogs/filip/archive/tags/design/default.aspx">design</category></item><item><title>Designing Dashboards with MVVM - Useful Patterns</title><link>http://www.componentart.com/community/blogs/filip/archive/2012/11/02/designing-dashboards-with-mvvm-useful-patterns.aspx</link><pubDate>Fri, 02 Nov 2012 14:07:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:111838</guid><dc:creator>filipK</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The Model View ViewModel design pattern has become the de facto standard for all&amp;nbsp;Business&amp;nbsp;Intelligence applications created with any of the modern Microsoft frameworks. &amp;nbsp;When learning to design interactive applications such as dashboards with MVVM, the most obvious annoyance is not being able to use event handlers to trigger code execution or create an entry point for user interaction.&lt;/p&gt;
&lt;p&gt;However, one quickly learns how MVVM&amp;nbsp;&lt;a target="_blank" href="http://www.codeproject.com/Articles/274982/Commands-in-MVVM"&gt;commands&lt;/a&gt;&amp;nbsp;can be used to emulate event logic. &amp;nbsp;It&amp;#39;s not a steep learning curve to figure out how to port your events to commands: you create a command in the ViewModel, implement the logic of the command inside a method that the command triggers, and then in the View use the &lt;i&gt;Interaction.Triggers&lt;/i&gt; tag inside controls to connect the control event to the ViewModel command.&lt;/p&gt;
&lt;p&gt;Even though this works in most scenarios it has a downside - the amount of extra code needed in both the View and the ViewModel. &amp;nbsp;Not only does it make the code files bloated and hard to find your way around with just a few commands, but the solution is far from elegant.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/0871.boring_5F00_code.jpg"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/filip/0871.boring_5F00_code.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Data Bindings on the other hand are simple and clean. &amp;nbsp;It would be ideal if we could accomplish everything with just Data Bindings.&lt;/p&gt;
&lt;p&gt;The need for the event/command paradigm most commonly arises when implementing user interaction with ComboBoxes, RadioButtons, CheckBoxes or other interactive controls. &amp;nbsp; But most of the commonly used interactive controls have a property such as &lt;i&gt;SelectedItem &lt;/i&gt;or &lt;i&gt;SelectedIndex &lt;/i&gt;that updates when a selection changes. &amp;nbsp;Binding such a property with a&amp;nbsp;&lt;strong&gt;TwoWay&lt;/strong&gt;&amp;nbsp;binding to a ViewModel property will allow you to detect an interaction in the setter of the property in the ViewModel.&lt;/p&gt;
&lt;h2&gt;Changing the View From the ViewModel&lt;/h2&gt;
&lt;p&gt;You may be thinking, yes, this is neat, but what if it is&amp;nbsp;inappropriate&amp;nbsp;to pile a lot of logic in the setter because the property may be set many times? &amp;nbsp;Also, interactive controls such as the ones mentioned above can often totally change the UI the user sees, making many large changes to the View. &amp;nbsp;How do I make changes to the UI in the View if the code entry point is in the ViewModel?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This is a common problem, but the good news is that it can also be solved with bindings. &amp;nbsp;What it requires though, is a change in philosophy of the design of the application.&lt;/p&gt;
&lt;p&gt;Instead of thinking that you have to instantiate, change, add or remove UI elements when the user action takes place, one can add the code for all the possible elements a user may see at some point in the View. &amp;nbsp;The key is then to control the &lt;strong&gt;Visibility&lt;/strong&gt;&amp;nbsp;of each element, depending on the user selection. &amp;nbsp;This is done by binding the &lt;i&gt;Visibility&lt;/i&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;property of the FrameworkElement to the&amp;nbsp;appropriate&amp;nbsp;ViewModel property.&amp;nbsp; It may sound complicated at first, but in reality it creates code that is clean, easy to follow and easy to manage.&lt;/p&gt;
&lt;p&gt;The final piece of the puzzle, that makes this approach very smooth, is to use a &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.binding.converter.aspx"&gt;Value Converter&lt;/a&gt;&amp;nbsp;to connect the Visibility property of the UI element to the selected property of the interactive UI control. &amp;nbsp;In most cases, this eliminates any extra code that may be needed to make the Visibility property value compatible with the ViewModel property being set.&lt;/p&gt;
&lt;p&gt;For example, let&amp;#39;s say we have a ComboBox, where the user can choose &amp;#39;Chart View&amp;#39;, to see a chart with the data, or &amp;#39;Data View&amp;#39;, to see a GridView with the data. &amp;nbsp;The following code is needed in the View:&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ComboBox&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ViewCombo&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;SelectedItem&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding SelectedView, Mode=TwoWay}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ComboBoxItem&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Content&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Chart View&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ComboBoxItem&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Content&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Data View&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ComboBox&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;

&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x&lt;/span&gt;:&lt;span style="color:#FF0000;"&gt;Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ChartContainer&amp;quot;&lt;/span&gt;
      &lt;span style="color:#FF0000;"&gt;Visibility&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding SelectedView, Converter={StaticResource EqualToVisibilityConverter}, ConverterParameter=&amp;#39;Chart View&amp;#39;}&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;                  
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XYChart&lt;/span&gt; ....                 
&amp;lt;/&lt;span style="color:#FF0000;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;

&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x&lt;/span&gt;:&lt;span style="color:#FF0000;"&gt;Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;GridViewContainer&amp;quot;&lt;/span&gt;
      &lt;span style="color:#FF0000;"&gt;Visibility&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding SelectedView, Converter={StaticResource EqualToVisibilityConverter}, ConverterParameter=&amp;#39;Data View&amp;#39;}&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;DataGrids&lt;/span&gt;:&lt;span style="color:#800000;"&gt;GridView&lt;/span&gt; ...           
&amp;lt;/&lt;span style="color:#FF0000;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Of course, we need to have the&amp;nbsp;&lt;span&gt;&lt;i&gt;SelectedView&lt;/i&gt;&amp;nbsp;property in the ViewModel, and implement the value converter:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; EqualToVisibilityConverter : IValueConverter
{
    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; Convert(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;, Type targetType, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; parameter, CultureInfo culture)
    {
        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt; != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;.Equals(System.Convert.ChangeType(parameter, &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;.GetType(), culture)) ? 
                         Visibility.Visible :
                         Visibility.Collapsed;
    }

    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; ConvertBack(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;, Type targetType, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; parameter, CultureInfo culture)
    {
        &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; NotImplementedException();
    }
}&lt;/pre&gt;
&lt;p&gt;Now you are armed with a technique that will allow you to change the View from the ViewModel. &amp;nbsp;If you think about it, anything can be &amp;#39;changed&amp;#39; in the view by implementing all of the possibilities and controlling their Visibility. &amp;nbsp;Also, there are no performance handicaps with this approach, at least with Microsoft&amp;#39;s technologies Silverlight, WPF and Win RT applications, as controls that have their Visibility set to &lt;i&gt;Hidden &lt;/i&gt;are not rendered and CPU cycles are not wasted on them.&lt;/p&gt;
&lt;p&gt;But best of all, you do not have to deal with the cumbersome commands.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=111838" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/filip/archive/tags/Value+Converter/default.aspx">Value Converter</category><category domain="http://www.componentart.com/community/blogs/filip/archive/tags/MVVM/default.aspx">MVVM</category><category domain="http://www.componentart.com/community/blogs/filip/archive/tags/Visibility/default.aspx">Visibility</category><category domain="http://www.componentart.com/community/blogs/filip/archive/tags/Events/default.aspx">Events</category></item><item><title>DeltaIndicator in ComponentArt DataVisualization 2012 </title><link>http://www.componentart.com/community/blogs/marjan/archive/2012/10/09/deltaindicator-in-componentart-datavisualization-2012.aspx</link><pubDate>Tue, 09 Oct 2012 18:18:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:111561</guid><dc:creator>Marjan</dc:creator><slash:comments>4</slash:comments><description>&lt;p class="MsoNormal"&gt;DeltaIndicator&amp;nbsp;is introduced i&lt;span&gt;n&amp;nbsp;&lt;/span&gt;&lt;span&gt;ComponentArt DataVisualization 2012 which is a very useful control especially in financial statistics analysis dashboards.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;It is a bundle of triangle indicator, value and a percentage next to each other as I added three of them below:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/8203.Capture1.PNG"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/8203.Capture1.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;The .xaml tag to have a DeltaIndicator would be as:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="codeblock"&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;common&lt;/span&gt;:&lt;span style="color:#800000;"&gt;DeltaIndicator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Value&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;{Binding TotalAmount}&amp;quot;&lt;/span&gt;   &lt;span style="color:#ff0000;"&gt;Target&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;{Binding TotalTarget}&amp;quot;&lt;/span&gt;
                    &lt;span style="color:#ff0000;"&gt;FontFamily&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Segoe UI&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;FontSize&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;12&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;FontWeight&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Bold&amp;quot;&lt;/span&gt; 
                    &lt;span style="color:#ff0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;HorizontalAlignment&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Left&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;br /&gt; The logic of DeltaIndicator is covering the basic mathematics delta definition via two &amp;ldquo;Value&amp;rdquo; and &amp;ldquo;Target&amp;rdquo; properties which will indicates the color and triangle direction next to demonstrated value in the visualization.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;The showing value is the difference of &amp;ldquo;Value&amp;rdquo; and &amp;ldquo;Target&amp;rdquo; which have been assigned and the percentage is the difference value compared to target value.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;What I really like about this control is that color conversion is handled automatically based on the Value and Target amounts.&lt;br /&gt; If the difference result turns to be negative it will be shown in red with down side triangle, when the result is positive the color would be green with upside triangle and if the result becomes zero it will be populated in yellow which indicates neutral.&lt;br /&gt; DeltaIndicators can be integrated with other ComponentArt DataVisualization 2012 such as XYChart and it is also available in KPINavigationTiles .&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/0525.Capture.PNG"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/0525.Capture.PNG" border="0" alt="" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/4338.Capture2.PNG"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/marjan/4338.Capture2.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;KPINavigationTiles is a member of KPI Concepts which have been introduced in ComponentArt DataVisualization 2012, for more details you can read Jeremy Rodgers blog &lt;a target="_blank" href="http://www.componentart.com/community/blogs/jeremey/archive/2012/10/03/dashboard-data-and-kpi-concepts.aspx"&gt;post&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;For implementing DeltaIndicator in&amp;nbsp;XYChart&amp;nbsp;you can check ComponentArt DataVisualization 2012 &amp;nbsp;&lt;a target="_blank" href="http://docs.componentart.com/#SlDataVisualization/2012/ComponentArt.Silverlight.DataVisualization/chartingconcepts.htm"&gt;Online Documentation&lt;/a&gt;.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=111561" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/marjan/archive/tags/dv/default.aspx">dv</category><category domain="http://www.componentart.com/community/blogs/marjan/archive/tags/DeltaIndicator/default.aspx">DeltaIndicator</category><category domain="http://www.componentart.com/community/blogs/marjan/archive/tags/2012/default.aspx">2012</category><category domain="http://www.componentart.com/community/blogs/marjan/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Tablet Sales Projections for 2013 - Are Analysts Missing the Big Picture?</title><link>http://www.componentart.com/community/blogs/miljan/archive/2012/10/03/tablet-sales-projections-for-2013-are-analysts-missing-the-big-picture.aspx</link><pubDate>Wed, 03 Oct 2012 20:15:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:111480</guid><dc:creator>miljan</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I&amp;#39;ll start with a disclaimer: ComponentArt does have a horse in this race. Even though our BI dashboards can target any device via HTML5, we see the biggest opportunity in Windows 8 and have invested heavily into delivering a premium BI experience for this platform through our set of native XAML-based technologies. Perhaps the fact that I want Windows 8 to succeed is clouding my judgement about where things are going, but nevertheless please bear with me as I share my contrarian view on this.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A couple of weeks ago, &lt;a href="https://www.idc.com/getdoc.jsp?containerId=prUS23696912" title="IDC Tablet Sales Forecast" target="_blank"&gt;IDC published their forecast for media tablet sales&lt;/a&gt;. They are projecting 6% market share for Windows 8 in 2013, totalling less than 10 million tablets sold:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img border="0" height="447" width="568" src="http://www.componentart.com/blogs/miljan/images/2012-10-04-chart1.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;That number seems awfully low to me. Even a moderately successful Microsoft Surface RT tablet alone should be able to get close to 10 million units sold in 2013. Since market adoption of MS Surface is a big question mark at this point (I think a lot hinges on how awesome that keyboard cover will be), let&amp;#39;s zoom out a bit. Surface won&amp;#39;t stand as the only Windows 8 tablet.&amp;nbsp;It will be joined by tablets from other vendors including Samsung, HP, Lenovo, Dell, Asus:&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img border="0" height="345" width="710" src="http://www.componentart.com/blogs/miljan/images/2012-10-04-devices1.png" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;These are big companies with a lot of marketing muscle and they have pretty decent hardware lined up, especially for enterprise use. The more successful among them should be able to move a few million units each. But even that doesn&amp;#39;t tell the whole story.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Laptop-Tablet Convergence &amp;ndash; The Big Story for 2013?&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The line between tablets and laptops is definitely blurring with Windows 8. Let&amp;#39;s start with MS Surface: it is a tablet with an integrated keyboard and MS Office running on it. That covers a large number of laptop usage scenarios for a lot of people right there. Then we have MS Surface Pro coming out in Q1 2013, which will actually run *any* PC app, including such powerful pieces of software like Adobe Photoshop. On top of that, we have an unprecedented lineup of interesting portable computer hardware ready to ship this fall: laptop-tablet hybrids, clamshell laptops with touch screens, and crazy new concept creations like Lenovo Yoga or that Asus dual screen gizmo:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img border="0" height="210" width="710" src="http://www.componentart.com/blogs/miljan/images/2012-10-04-devices2.png" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Why is the laptop-tablet convergence story significant? &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Well, let me show you another chart:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img border="0" height="510" width="710" src="http://www.componentart.com/blogs/miljan/images/2012-10-04-chart2.png" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This brings me to my main point:&amp;nbsp;&lt;/p&gt;
&lt;div style="border:1px solid #a0a0a0;padding:10px;width:630px;background-color:#e2e2e2;"&gt;Laptops are not growing that fast, but in absolute terms they still outnumber tablets handily. Since the new hybrid devices cover the same functionality as laptops, it is reasonable to expect that they will get a healthy portion of those 200M+ would-have-been-laptops sold in 2013.&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Given all of these factors, it is difficult for me to see how the total number of Windows 8 tablets sold in 2013 can be merely 10M. On the contrary, we may see an entirely different storyline emerge by the end of next year.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;While we are talking about big numbers, it&amp;#39;s worth mentioning that Microsoft is targeting a total of 400M Windows 8 installations (across all device types) by mid-2013. I&amp;#39;ll explain in a follow-up post why I think this is realistic (hint: half of the answer is already obvious from the chart above).&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=111480" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/miljan/archive/tags/Windows+8/default.aspx">Windows 8</category><category domain="http://www.componentart.com/community/blogs/miljan/archive/tags/tablets/default.aspx">tablets</category><category domain="http://www.componentart.com/community/blogs/miljan/archive/tags/market+share/default.aspx">market share</category></item><item><title>Dashboard Data and KPI Concepts</title><link>http://www.componentart.com/community/blogs/jeremey/archive/2012/10/03/dashboard-data-and-kpi-concepts.aspx</link><pubDate>Wed, 03 Oct 2012 17:31:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:111478</guid><dc:creator>jrodgers</dc:creator><slash:comments>5</slash:comments><description>&lt;p&gt;ComponentArt DataVisualization 2012 introduces two new data manipulation classes called GenericTable and KPIData, respectively. &amp;nbsp;If you&amp;#39;ve ever had to write complex code-behind to massage your data into a format suitable for display you will appreciate the ease with which this can now be accomplished. &amp;nbsp;In this blog post I&amp;#39;ll walk you through some common usage patterns for these new performance-optimized classes. &amp;nbsp;Keep in mind that these classes are suitable for manipulating primarily time-based data.&lt;/p&gt;
&lt;h2&gt;KPIData Objects&lt;/h2&gt;
&lt;p&gt;KPIData objects implement what are commonly known as &amp;quot;Numeric Key Performance Indicators&amp;quot;. &amp;nbsp;KPIData objects are, internally, a collection of KPIVariables, each KPIVariable represents the variation of a&amp;nbsp;numeric value over a period of time for example: daily sales, monthly targets, quarterly expenses, yearly projections, etc. KPIData objects are able to contain any number of metrics(KPIVariables) all joined on a DateTime field, regardless of the granularity or time unit of the input data.&amp;nbsp;For instance monthly data for one metric and daily data for another metric can both be contained in&amp;nbsp;one KPIData object as they relate on their DateTime fields.&lt;/p&gt;
&lt;p&gt;When queried for a value in a time unit that is larger than that of the input data the KPIData object will &amp;#39;roll-up&amp;#39; or aggregate the input data, conversly,&amp;nbsp;if queried for a value in a time unit smaller than that of the input data the KPIData object will &amp;#39;roll-down&amp;#39; or divide the the larger time unit values equally into the requested time unit.&lt;/p&gt;
&lt;p&gt;By plotting KPIVariable values along a unified date/time range and providing the ability for developers to query those values for any date/time range and in any time unit, KPIData objects eliminate the need for complex LINQ statements and&amp;nbsp;allow ComponentArt controls to work directly with multiple sets of additive time based data with minimal code.&lt;/p&gt;
&lt;h2&gt;Instantiating KPIData objects&lt;/h2&gt;
&lt;p&gt;In order to generate KPIData objects data should first be used to populate a GenericTable. &amp;nbsp;GenericTables parse and store data as well as information relating to the data fields, types and date/time relationships.&amp;nbsp;A GenericTable can be populated with an IEnumerable collection as follows.&lt;/p&gt;
&lt;pre class="codeblock"&gt;GenericTableFromIEnumerable myGenericTable = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; GenericTableFromIEnumerable(myIEnumerable)
{
    InputDataTimeUnit = TimeUnit.Month,
    DateFieldName = &amp;quot;&lt;span style="color:#8b0000;"&gt;Month&lt;/span&gt;&amp;quot;
};&lt;/pre&gt;
&lt;p&gt;By specifying the input data TimeUnit or granularity the GenericTable is able to properly generate KPIData based on the DateTime field and TimeUnit.&amp;nbsp;If the IEnumerable contains only one DateTime field, that field will be used to plot the objects in time, otherwise the first DateTime field will be used unless specified as it is in the example above.&lt;/p&gt;
&lt;p&gt;Once data has been loaded into a GenericTable KPIData can be extracted in a number of ways.&lt;/p&gt;
&lt;h3&gt;GenericTable.GetKPIData&lt;/h3&gt;
&lt;p&gt;The simplest way to generate KPIData from a GenericTable is to call its GetKPIData() method. This will return a KPIData object which contains one KPIVariable for each numeric value field in the GenericTable.&lt;/p&gt;
&lt;pre class="codeblock"&gt;KPIData myKPIData = myGenericTable.GetKPIData()&lt;/pre&gt;
&lt;h3&gt;GenericTable.KPIDataByCategory&lt;/h3&gt;
&lt;p&gt;In some cases the data contained within a GenericTable should be grouped or pivoted by a field when generating KPIData.&amp;nbsp;This can be done by calling the KPIDataByCategory(string valueColumnName, string pivotColumnName) method of GenericTable. This will return a KPIData object with a KPIVariable for each unique value in the pivot column. The&amp;nbsp;resulting KPIData is suitable for use with MicroGroupSeries MicroCharts. The following code will create a KPIData object with numeric KPIVariables for each unique string in the &amp;quot;Products&amp;quot; field of the dataset.&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#008000;"&gt;// &amp;quot;Date&amp;quot;,&amp;quot;Sales&amp;quot;,&amp;quot;Product&amp;quot;&lt;/span&gt;
&lt;span style="color:#008000;"&gt;// &amp;quot;01/01/2012&amp;quot;,&amp;quot;2503&amp;quot;,&amp;quot;Product A&amp;quot;&lt;/span&gt;
&lt;span style="color:#008000;"&gt;// &amp;quot;01/01/2012&amp;quot;,&amp;quot;7920&amp;quot;,&amp;quot;Product B&amp;quot;&lt;/span&gt;
&lt;span style="color:#008000;"&gt;// ...&lt;/span&gt;

KPIData myPivotedKPIData = myGenericTable.KPIDataByCategory(&amp;quot;&lt;span style="color:#8b0000;"&gt;Sales&lt;/span&gt;&amp;quot;, &amp;quot;&lt;span style="color:#8b0000;"&gt;Product&lt;/span&gt;&amp;quot;);

&lt;span style="color:#008000;"&gt;// &amp;quot;TimeRange&amp;quot;,&amp;quot;Product A&amp;quot;,&amp;quot;Product B&amp;quot;&lt;/span&gt;
&lt;span style="color:#008000;"&gt;// &amp;quot;01/01/2012 - 31/01/2012&amp;quot;,&amp;quot;2503&amp;quot;,&amp;quot;7920&amp;quot;&lt;/span&gt;
&lt;span style="color:#008000;"&gt;// ...&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;This pivot can be reversed later in order to populate controls which cannot consume KPIData directly. By first pivoting the data you can make use of&amp;nbsp;KPIData objects and their ability to roll-up, roll-down and interpolate data for any TimeUnit before reversing the pivot. The KPIData methods GetItemsWithPivotInRange(DateTime start, DateTime end, TimeUnit timeUnit) and&amp;nbsp;GetItemsWithPivotPerTimeUnit(TimeUnit timeUnit) will return IEnumerable collections with TimeRange, value and &amp;quot;Pivot&amp;quot; fields suitable for use with XYChart and SeriesPath.&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#008000;"&gt;// &amp;quot;TimeRange&amp;quot;,&amp;quot;Product A&amp;quot;,&amp;quot;Product B&amp;quot;&lt;/span&gt;
&lt;span style="color:#008000;"&gt;// &amp;quot;01/01/2012 - 31/01/2012&amp;quot;,&amp;quot;2503&amp;quot;,&amp;quot;7920&amp;quot;&lt;/span&gt;
&lt;span style="color:#008000;"&gt;// ...&lt;/span&gt;

IEnumerable myIEnum = myPivotedKPIData.GetItemsWithPivotPerTimeUnit(TimeUnit.Month);

&lt;span style="color:#008000;"&gt;// &amp;quot;TimeRange&amp;quot;,&amp;quot;Value&amp;quot;,&amp;quot;Pivot&amp;quot;&lt;/span&gt;
&lt;span style="color:#008000;"&gt;// &amp;quot;01/01/2012 - 31/01/2012&amp;quot;,&amp;quot;2503&amp;quot;,&amp;quot;Product A&amp;quot;&lt;/span&gt;
&lt;span style="color:#008000;"&gt;// &amp;quot;01/01/2012 - 31/01/2012&amp;quot;,&amp;quot;7920&amp;quot;,&amp;quot;Product B&amp;quot;&lt;/span&gt;
&lt;span style="color:#008000;"&gt;// ...&lt;/span&gt;&lt;/pre&gt;
&lt;h2&gt;Querying KPIData objects&lt;/h2&gt;
&lt;p&gt;Once a KPIData object has been populated it can then be queried to product an IEnumerable collection of its values for any date/time range and at any TimeUnit. There&amp;nbsp;are a number of methods available with which to query KPIData objects.&lt;/p&gt;
&lt;h3&gt;KPIData.GetItemsPerTimeUnit&lt;/h3&gt;
&lt;p&gt;The KPIData method GetItemsPerTimeUnit(TimeUnit timeUnit) returns an IEnumerable collection of the values contained within the KPIData object along with a TimeRange field.&amp;nbsp;When queried for a time unit that is larger than the input data TimeUnit the KPIData object will &amp;#39;roll-up&amp;#39; or aggregate the input data, conversly,&amp;nbsp;if queried for a time unit smaller than that of the input data the KPIData object will &amp;#39;roll-down&amp;#39; or divide the the larger time unit values equally into the requested time unit.&lt;/p&gt;
&lt;pre class="codeblock"&gt;IEnumerable myIEnum = myKPIData.GetItemsPerTimeUnit(TimeUnit.Month);&lt;/pre&gt;
&lt;h3&gt;KPIData.GetItemsInRange&lt;/h3&gt;
&lt;p&gt;The KPIData method GetItemsPerTimeUnit() will return the entire range of values contained within the queried KPIData, developers may also query for a specific date/time range using the&amp;nbsp;GetItemsInRange(DateTime start, DateTime end, TimeUnit timeUnit) method.&lt;/p&gt;
&lt;pre class="codeblock"&gt;IEnumerable myIEnum = myKPIData.GetItemsInRange(DateTime.Now.AddYears(-1), DateTime.Now, TimeUnit.Day);&lt;/pre&gt;
&lt;h3&gt;KPIData.GetSumOfVariables&lt;/h3&gt;
&lt;p&gt;The method GetSumOfVariables() will sum the KPIVariables contained within a KPIData object and return a single KPIVariable of the aggregated fields.&amp;nbsp;Once created this KPIVariable can be queried with its GetValueForRange(TimeRange range) method, or its override GetValueForRange(DateTime start, DateTime end), to access the aggregated value for a date/time range. These methods&amp;nbsp;are perfect for quickly determining totals of a metric across any timespan.&lt;/p&gt;
&lt;pre class="codeblock"&gt;KPIVariable myAggregatedValues = myKPIData.GetSumOfVariables();
&lt;span style="color:#0000ff;"&gt;double&lt;/span&gt; myAggregateDouble = myAggregatedValues.GetValueForRange(DateTime.Now.AddYears(-1), DateTime.Now);&lt;/pre&gt;
&lt;p&gt;Another handy method which can be used with KPIVariables is KPIVariable.ValueInRangeLastYear(TimeRange range) which will return the&amp;nbsp;aggregated value for the specified period the previous year.&lt;/p&gt;
&lt;pre class="codeblock"&gt;KPIVariable myAggregatedValues = myKPIData.GetSumOfVariables();
&lt;span style="color:#0000ff;"&gt;double&lt;/span&gt; myAggregateDoubleCurrent = myAggregatedValues.GetValueForRange(DateTime.Now.AddYears(-1), DateTime.Now);
&lt;span style="color:#0000ff;"&gt;double&lt;/span&gt; myAggregateDoubleLastYear = myAggregatedValues.ValueInRangeLastYear(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; TimeRange(DateTime.Now.AddYears(-1), DateTime.Now));&lt;/pre&gt;
&lt;h3&gt;KPIData.GetItemsWithPivotInRange, KPIData.GetItemsWithPivotPerTimeUnit&lt;/h3&gt;
&lt;p&gt;As mentioned above, KPIData objects may also return pivoted, or &amp;quot;ungrouped&amp;quot; data when KPIDataByCategory() was used to generate the KPIData object. The KPIData methods GetItemsWithPivotInRange(DateTime start, DateTime end, TimeUnit timeUnit) and&lt;/p&gt;
&lt;p&gt;&lt;span&gt;			&lt;/span&gt; GetItemsWithPivotPerTimeUnit(TimeUnit timeUnit) will return IEnumerable collections with TimeRange, value and &amp;quot;Pivot&amp;quot; fields suitable for use with XYChart and SeriesPath.&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#008000;"&gt;// &amp;quot;TimeRange&amp;quot;,&amp;quot;Product A&amp;quot;,&amp;quot;Product B&amp;quot;&lt;/span&gt;
&lt;span style="color:#008000;"&gt;// &amp;quot;01/01/2012 - 31/01/2012&amp;quot;,&amp;quot;2503&amp;quot;,&amp;quot;7920&amp;quot;&lt;/span&gt;
&lt;span style="color:#008000;"&gt;// ...&lt;/span&gt;

IEnumerable myIEnum = myPivotedKPIData.GetItemsWithPivotPerTimeUnit(TimeUnit.Month);

&lt;span style="color:#008000;"&gt;// &amp;quot;TimeRange&amp;quot;,&amp;quot;Value&amp;quot;,&amp;quot;Pivot&amp;quot;&lt;/span&gt;
&lt;span style="color:#008000;"&gt;// &amp;quot;01/01/2012 - 31/01/2012&amp;quot;,&amp;quot;2503&amp;quot;,&amp;quot;Product A&amp;quot;&lt;/span&gt;
&lt;span style="color:#008000;"&gt;// &amp;quot;01/01/2012 - 31/01/2012&amp;quot;,&amp;quot;7920&amp;quot;,&amp;quot;Product B&amp;quot;&lt;/span&gt;
&lt;span style="color:#008000;"&gt;// ...&lt;/span&gt;&lt;/pre&gt;
&lt;h2&gt;Populating Charts with KPIData&lt;/h2&gt;
&lt;p&gt;One of the most common uses of KPIData is for populating Chart and MicroChart controls. KPIData objects handling of date/time ranges&amp;nbsp;make them ideal for use with time based charts.&lt;/p&gt;
&lt;h4&gt;MicroCharts&lt;/h4&gt;
&lt;p&gt;There are two basic types of MicroCharts which can be used with KPIData, the first can be referred to as static series charts this can be comprised of a single series&amp;nbsp;or a number of series but these are statically defined series. These types can be populated with a KPIVariable extracted from a KPIData object as follows.&lt;/p&gt;
&lt;pre class="codeblock"&gt;myKPIMicroChart.DataSource = myKPIData[&amp;quot;&lt;span style="color:#8b0000;"&gt;Sales&lt;/span&gt;&amp;quot;].GetValuesForTimeUnit(TimeUnit.Day);&lt;/pre&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroBarSeries&lt;/span&gt; 
                  &lt;span style="color:#ff0000;"&gt;x&lt;/span&gt;:&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;myKPIMicroChart&amp;quot;&lt;/span&gt;
                  &lt;span style="color:#ff0000;"&gt;XPath&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;TimeRange&amp;quot;&lt;/span&gt;
                  &lt;span style="color:#ff0000;"&gt;YPath&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;This MicroBarSeries is populated with a single KPIVariable source, because of this there is no need to refer to a specific field name other than &amp;quot;Value&amp;quot; for the YPath.&lt;/p&gt;
&lt;p&gt;For dynamic MicroChart series, MicroGroupSeries can be used with KPIData sources directly to auto-generate series based on the available KPIVariables in the KPIData object used as a DataSource.&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroGroupSeries&lt;/span&gt; 
    &lt;span style="color:#ff0000;"&gt;x&lt;/span&gt;:&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;myKPIMicroChart&amp;quot;&lt;/span&gt;
    &lt;span style="color:#ff0000;"&gt;XPath&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;TimeRange&amp;quot;&lt;/span&gt;
    &lt;span style="color:#ff0000;"&gt;CompositionKind&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Stacked&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroGroupSeries.ChildSeriesTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroBarSeries&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroGroupSeries.ChildSeriesTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroGroupSeries&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;In this instance the YPath for each series is set automatically based on the available KPIVariables in the KPIData object driving the MicroGroupSeries.&amp;nbsp;This DataTemplate is duplicated once for each KPIVariable and arranged in the specified CompositionKind, in this case the series will be Stacked.&lt;/p&gt;
&lt;h3&gt;XYCharts&lt;/h3&gt;
&lt;p&gt;Populating static series XYCharts with KPIData is a relatively straight forward task. The main concept to note is that the XPath and YPath may not match&amp;nbsp;the original input data as when utilizing KPIData DateTime fields are replaced with a TimeRange field that is unified between KPIVariables, therefore the XPath on most&amp;nbsp;KPIData driven XYCharts should be set to &amp;quot;TimeRange&amp;quot; rather than any specific DateTime field name.&lt;/p&gt;
&lt;pre class="codeblock"&gt;myKPIXYChart.DataSource = kpiSeriesDataSource.GetItemsPerTimeUnit(TimeUnit.Month);&lt;/pre&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XYChart&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x&lt;/span&gt;:&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;myKPIXYChart&amp;quot;&lt;/span&gt;
                  &lt;span style="color:#ff0000;"&gt;XPath&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;TimeRange&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;AreaSeries&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;YPath&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Sales&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;BarSeries&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;YPath&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Targets&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XYChart&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Because this chart is populated from a KPIData object which contains multiple KPIVariables, the YPath must be set to a specific KPIVariable name (usually based on the field name from the original input data).&amp;nbsp;By using KPIData and not KPIVariables the XYChart can have multiple series based on different KPIVariables plotted along the same date/time range.&lt;/p&gt;
&lt;p&gt;In the case of dynamic XYCharts KPIData must be pivoted using KPIData.GetItemsWithPivotInRange or KPIData.GetItemsWithPivotPerTimeUnit as decribed above and assigned with the SeriesPath property.&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XYChart&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x&lt;/span&gt;:&lt;span style="color:#FF0000;"&gt;Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;myKPIXYChart&amp;quot;&lt;/span&gt;
                  &lt;span style="color:#FF0000;"&gt;XPath&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;TimeRange&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;AreaSeries&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;YPath&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;SeriesPath&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pivot&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XYChart&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;When pivoting KPIData for use with XYChart it&amp;#39;s important to note that the new pivoted field should be referenced as &amp;quot;Pivot&amp;quot; as any field name data would have been lost in the initial grouping or pivoting when creating the KPIData.&lt;/p&gt;
&lt;p&gt;Thanks for reading this introduction to the new KPI classes in ComponentArt DataVisualization 2012, these techniques can be used in any of the three supported frameworks, WPF, Silverlight and the Windows Runtime. &amp;nbsp;Once mastered you will not only be able to produce visualizations more quickly but you will also benefit from performance that bests LINQ for additive/cumulative data allowing you to deliver fast and fluid user experiences across the board.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=111478" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/jeremey/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://www.componentart.com/community/blogs/jeremey/archive/tags/WPF/default.aspx">WPF</category><category domain="http://www.componentart.com/community/blogs/jeremey/archive/tags/WinRT/default.aspx">WinRT</category><category domain="http://www.componentart.com/community/blogs/jeremey/archive/tags/DV2012/default.aspx">DV2012</category><category domain="http://www.componentart.com/community/blogs/jeremey/archive/tags/DataVisualization/default.aspx">DataVisualization</category></item><item><title>Introducing MicroCharts to ComponentArt Data Visualization</title><link>http://www.componentart.com/community/blogs/milos/archive/2012/10/03/introducing-microcharts-to-componentart-data-visualization.aspx</link><pubDate>Wed, 03 Oct 2012 17:31:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:111479</guid><dc:creator>milos</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;The latest release of Data Visualization for Visual Studio includes many additions and improvements over the previous iteration of the suite, all of which are aimed at streamlining the process of developing dashboard applications and improving the resulting experience.&lt;/p&gt;
&lt;p&gt;MicroCharts were introduced as part of this strategy. The idea behind MicroCharts is to address some common cases where charting is used in a very stripped-down form, to make these cases easier to implement and more efficient to run. Column, line and area charts embedded within instances of TimeNavigator, NavigationTile or GridView are examples of such scenarios. The&amp;nbsp;XYChart control does a great job of covering a vast set of charting functionality, but much of it is simply not needed in these cases and distracts from the main task: displaying a basic data shape quickly and lightly, without regard to coordinate system grids or annotations, legends, labels, popups or custom templates. Simple, clean, fast.&lt;/p&gt;
&lt;p&gt;MicroCharts are also built to take advantage of KPIData, another new addition to the Data Visualization suite. KPIData can be used for combining, comparing and aggregating time-based data sets of any granularity, and is especially useful for managing automatic roll-ups in the context of time navigation. In cases where a rich visualization is called for inside a TimeNavigator, we can now use MicroChart instance. In the following example, we want a stacked column chart to appear, fed from a KPIData set with multiple KPIVariables. We use a MicroGroupSeries with a MicroBarSeries in the template to define a dynamic group of stacked columns to be created from the data:&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroGroupSeries&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;XPath&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;TimeRange&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;DataSource&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;{Binding MyKPIData}&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;CompositionKind&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Stacked&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroGroupSeries.ChildSeriesTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroBarSeries&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroGroupSeries.ChildSeriesTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroGroupSeries&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/milos/1667.microchart_5F00_timenav.png"&gt;&lt;img border="0" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/milos/1667.microchart_5F00_timenav.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In conjuction with TimeNavigator, we will often want to use KPINavigationTiles, another newly added concept in Data Visualization. KPINavigationTiles is a control for visualizing TimeNavigator selection presets and allowing them to be interactively selected. It is another perfect fit for MicroCharts. In the ItemTemplate (the DataContext for which is KPIData), we can do something like this:&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroGroupSeries&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;XPath&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;TimeRange&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;DataSource&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;{Binding}&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;CompositionKind&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Stacked&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroGroupSeries.ChildSeriesTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroBarSeries&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroGroupSeries.ChildSeriesTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroGroupSeries&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/milos/8030.microchart_5F00_navtiles.png"&gt;&lt;img border="0" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/milos/8030.microchart_5F00_navtiles.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here again we&amp;#39;ve used a group of MicroBarSeries, generated from the data set. In addition to MicroBarSeries, MicroAreaSeries and MicroLineSeries may be used in the same way, to produce simple area and line graphs, respectively.&lt;/p&gt;
&lt;p&gt;The lightweight nature of MicroCharts also makes them suitable for use in scenarios where they may be repeated many times in a templated control, like a GridView column:&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;datagrids&lt;/span&gt;:&lt;span style="color:#800000;"&gt;GridViewTemplateColumn&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Header&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Sales History&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;datagrids&lt;/span&gt;:&lt;span style="color:#800000;"&gt;GridViewTemplateColumn.CellTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;charting&lt;/span&gt;:&lt;span style="color:#800000;"&gt;MicroAreaSeries&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;3&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Color&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;#FF9400&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;DataSource&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;{Binding SalesHistory}&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;XPath&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Date&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;YPath&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Sales&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#c71585;"&gt;datagrids&lt;/span&gt;:&lt;span style="color:#800000;"&gt;GridViewTemplateColumn.CellTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#c71585;"&gt;datagrids&lt;/span&gt;:&lt;span style="color:#800000;"&gt;GridViewTemplateColumn&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In this case, we used a MicroAreaSeries, which gives us a simple area chart in each cell of the templated column:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/milos/7635.microchart_5F00_gridview.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/milos/7635.microchart_5F00_gridview.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=111479" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/charts/default.aspx">charts</category><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/dv/default.aspx">dv</category><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/charting/default.aspx">charting</category><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/2012/default.aspx">2012</category><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/micro/default.aspx">micro</category></item><item><title>Developing Mobile Dashboards for ComponentArt Dashboard Server</title><link>http://www.componentart.com/community/blogs/milos/archive/2011/10/14/developing-mobile-dashboards-for-componentart-dashboard-server.aspx</link><pubDate>Fri, 14 Oct 2011 18:16:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:107788</guid><dc:creator>milos</dc:creator><slash:comments>5</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;What is ComponentArt Dashboard Server?&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Since our recent announcement of &lt;a href="http://www.componentart.com/products/ds/"&gt;ComponentArt Dashboard Server&lt;/a&gt;, there has been a lot of interest and excitement about the technology, and understandably so:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We can now target any mobile device including iPads, iPhones, Android phones and tablets, BlackBerry phones, PlayBooks, upcoming Windows 8 tablets in addition to all desktop and laptop browser environments.&lt;/li&gt;
&lt;li&gt;We can develop our entire application in the XAML environment we know and love.&lt;/li&gt;
&lt;li&gt;We can use all of &lt;a href="http://www.componentart.com/products/dv/"&gt;Data Visualization for .NET&lt;/a&gt;, with its extensive and mature feature set and high degree of graphical sophistication, and get pixel-perfect rendering and rich interactivity on all HTML5 devices.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;How does Dashboard Server work?&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/milos/3107.DS.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A key part of the Dashboard Server system is the Dashboard Server SDK. Delivered as a Visual Studio extension package, the SDK provides a quick way to get started with a Mobile Dashboard project and proceed as one would with any XAML development. The Mobile Dashboards are developed entirely in this familiar environment.&lt;/p&gt;
&lt;p&gt;At compile time, the SDK build environment produces a XAP containing Silverlight dashboards to be deployed to Silverlight-capable clients, as well as an EXE containing server-side (WPF) versions of the same dashboards to be processed on the server and translated to HTML5 and other formats at runtime. The procedure adds very little overhead to the compilation process and is entirely removed from the developer-facing experience.&lt;/p&gt;
&lt;p&gt;The result is a web application ready to be deployed to an IIS web server. It includes all the assemblies it depends on and can be configured in its web.config file or by using a separate Dashboard Server Admin application.&lt;/p&gt;
&lt;p&gt;Requests to the application are directed to the Dashboard Server HTTP handler, which determines the best possible output based on client capabilities, screen dimensions and orientation. Out of the box, Dashboard Server produces pixel-perfect rendering on any device, with interactive features where supported. In general, all Data Visualization for .NET controls have animation and interactivity support for HTML5 devices.&lt;/p&gt;
&lt;p&gt;So, we have two parallel client output scenarios in each Dashboard Server web application: Silverlight XAP output and server-side rendering with custom HTML5 renderers for Data Visualization controls.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Developing Mobile Dashboards for DS&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To ensure that a Mobile Dashboard application works perfectly in the Dashboard Server environment, we must satisfy three main requirements:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The application must strictly follow &lt;a href="http://weblogs.asp.net/dwahlin/archive/2009/12/08/getting-started-with-the-mvvm-pattern-in-silverlight-applications.aspx"&gt;MVVM architecture&lt;/a&gt;. Using MVVM lets us abstract out the semantics of the application from its implementation (and client-side output) so we can ensure that XAML views can be processed, serialized, rendered and cached independently and safely. The SDK comes with starter templates and base view model classes which are useful for getting off the ground quickly.
&lt;/li&gt;
&lt;li&gt;The application must use Data Visualization for .NET controls for animated and/or interactive visualizations. All other controls will be static in HTML5.
&lt;/li&gt;
&lt;li&gt;The application must use UI controls that come with the Dashboard Server SDK for basic interactivity &amp;ndash; these come with out-of-the-box HTML5 renderers. A mechanism exists for creating a custom HTML5 renderer for any XAML control, but this requires a non-trivial development effort.
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Let&amp;rsquo;s Do This!&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;With the Dashboard Server SDK installed on our workstation, we can open Visual Studio 2010 and start a new project. We select a basic Dashboard Server project template and give the project a name:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/milos/3480.NewProject.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The SDK produces a starter solution with a familiar layout: a Silverlight project, and a Web project to host the Silverlight application:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/milos/5314.Solution.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;When we look inside, we notice some additions to the solution: references have been pre-configured, the projects are set up with automated build tasks for compile-time processing, and the web application is set up with the Dashboard Server HTTP handler and a useful start page with links to it.&lt;/p&gt;
&lt;p&gt;In the Silverlight project, there is a folder named Xaml which contains a sample dashboard template, DashboardTemplate.xaml. This template implements a base class which facilitates rendering in the Dashboard Server environment; it is recommended that your application continue this practice. In DashboardTemplate.xaml.cs, we implement the ApplyDefaultView method, which is there to help us set up a fresh dashboard view and in this case is also used to populate the dashboard with some static sample data. Next to the template, in DashboardTemplateViewModel.cs, is a view model implementation, which inherits from DashboardViewModelBase. This base class is useful for implementing dashboards driven by TimeNavigator; it and others like it are provided in the project template as a development aid.&lt;/p&gt;
&lt;p&gt;The template itself consists of a single instance of the DashboardLayout control, which contains a TimeNavigator at the top (with embedded XyChart visualization), another XyChart below that, bound to the data subset selected in TimeNavigator, and a RadialGauge, bound to the Value property of DashboardTemplateViewModel.&lt;/p&gt;
&lt;p&gt;We can already compile and run this application, and examine its output in all the various formats supported by Dashboard Server.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/milos/5187.DebugStart.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;In our browser, we can view and interact with the Silverlight dashboard.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/milos/4572.SilverlightDashboard.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;We can also grab our tablet and visit the same application, which gives us HTML5 output and touch interaction.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/milos/8156.Html5Dashboard.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;From here, we can start setting up data access (preferably via WCF web services), re-designing our dashboard screen, and adding new screens to the application.&lt;/p&gt;
&lt;p&gt;We hope you are excited as we are about our approach to mobile dashboard development, and we look forward to your feedback.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=107788" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/data+visualization/default.aspx">data visualization</category><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/dashboards/default.aspx">dashboards</category><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/html5/default.aspx">html5</category><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/dashboard+server/default.aspx">dashboard server</category></item><item><title>ComponentArt's Technology is Ready for Windows 8 Today</title><link>http://www.componentart.com/community/blogs/miljan/archive/2011/09/22/ready-for-windows-8-today.aspx</link><pubDate>Thu, 22 Sep 2011 15:49:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:107537</guid><dc:creator>miljan</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;Last week at the &lt;a target="_blank" href="http://www.buildwindows.com/"&gt;2011 BUILD conference&lt;/a&gt; Microsoft unveiled their grand strategy for Windows 8. In the process they really set the direction for all Microsoft-based client technologies for the next decade. It is worth acknowledging the magnitude of this occasion. We should also note the difficult position from which the Redmond-based software giant had to make its move. There is immense pressure from all of the modern, touch-centric tablet devices &amp;ndash; most notably Apple&amp;rsquo;s iPad &amp;ndash; that represent the fastest-growing segment in the industry and are actually starting to chip away from the PC market share. At the same time, Microsoft **must** support millions of applications already written for Windows that their legions of customers expect to work flawlessly in the next version of Windows. To remain relevant, Microsoft had to come up with an answer that somehow satisfies both extremes of the app spectrum.&lt;/p&gt;
&lt;p&gt;As it turns out, Microsoft came up with something quite compelling:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.componentart.com/blogs/miljan/images/2011-09-22-Win8.png" width="450" height="249" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Windows 8 will provide two UI operation modes or &amp;ldquo;shells&amp;rdquo;: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;&amp;ldquo;Metro Style&amp;rdquo;&lt;/strong&gt;&lt;/span&gt;. This is the new &amp;ldquo;immersive experience&amp;rdquo; mode, optimized for touch input and designed to compete with all modern tablet devices. Metro style applications can be built in HTML5 and JavaScript or XAML and C, C++, C#, or VB. Note that the Metro version of IE doesn&amp;rsquo;t allow plug-ins, so Silverlight or Flash are not supported in the Metro browser. Reasons cited for this are: battery life, security, reliability and privacy.&lt;/li&gt;
&lt;li&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;&amp;ldquo;Classic Desktop&amp;rdquo;&lt;/strong&gt;&lt;/span&gt;. This mode will be very familiar to anyone using Windows 7. The classic mode will continue to be appropriate for &amp;ldquo;work at your desk&amp;rdquo; scenarios and all applications that run on Windows 7 will run happily in this mode. Silverlight and other browser plugins will continue to be supported the way they work today. Interestingly, when a user in Metro mode encounters a web page that requires a Silverlight plugin, they can instantly switch to desktop mode and run the Silverlight app.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To make things even more interesting, Microsoft is extending the Metro application model to Windows Phone and Xbox &amp;ndash; making a truly unified development platform for all client devices. It is great to see that Microsoft is willing to make bold moves like this and declare a &amp;ldquo;&lt;a target="_blank" href="http://wiki.softartisans.com/display/BLOGS/2011/09/14/Unshackled+Microsoft+Declares+War"&gt;multi-front war&lt;/a&gt;&amp;rdquo;, as our friend David Wihl from &lt;a target="_blank" href="http://www.softartisans.com/"&gt;SoftArtisans&lt;/a&gt; put it.&lt;/p&gt;
&lt;p&gt;What makes us at ComponentArt excited about Microsoft&amp;rsquo;s new direction is the fact that our technology perfectly fits into this model. In fact:&lt;/p&gt;
&lt;div style="border:1px solid #a0a0a0;padding:10px;width:630px;background-color:#e2e2e2;"&gt;ComponentArt is the only vendor that provides the tools &lt;span style="text-decoration:underline;"&gt;today&lt;/span&gt; to target both &amp;ldquo;Metro&amp;rdquo; and &amp;ldquo;Classic&amp;rdquo; Windows 8 experience through a single XAML code base, thanks to our new Dashboard Server product that converts XAML dashboards to HTML5 in real time without the need to write a single line of JavaScript code.&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Anything you build with our XAML-based &lt;a target="_blank" href="http://www.componentart.com/products/dv/"&gt;Data Visualization tools&lt;/a&gt; today will run on Windows 8, either as a native XAML application or HTML5 app &amp;ndash; your choice! The key point is that you develop your dashboard only once in XAML and deploy either as XAML or HTML5 through ComponentArt Dashboard Server.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.componentart.com/blogs/miljan/images/2011-09-22-DS.png" width="596" height="452" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The best way to experience this XAML-HTML5 rendering parity delivered by our new Dashboard Server product is to try our &lt;a target="_blank" href="http://componentart.cloudapp.net/"&gt;live mobile dashboard demos&lt;/a&gt; in a desktop browser and switch between Silverlight and HTML5 outputs. As you will see, the product features pixel-identical rendering between XAML and HTML5 and near feature parity.&lt;/p&gt;
&lt;p&gt;We hope that you will enjoy our new technology and are looking forward to your feedback!&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=107537" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/miljan/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://www.componentart.com/community/blogs/miljan/archive/tags/HTML5/default.aspx">HTML5</category><category domain="http://www.componentart.com/community/blogs/miljan/archive/tags/XAML/default.aspx">XAML</category><category domain="http://www.componentart.com/community/blogs/miljan/archive/tags/Windows+8/default.aspx">Windows 8</category><category domain="http://www.componentart.com/community/blogs/miljan/archive/tags/Data+Visualization/default.aspx">Data Visualization</category><category domain="http://www.componentart.com/community/blogs/miljan/archive/tags/Dashboard+Server/default.aspx">Dashboard Server</category></item><item><title>MSDN Webcast: Leveraging DataMarket to Create Cloud-Powered Digital Dashboards</title><link>http://www.componentart.com/community/blogs/milos/archive/2011/05/16/msdn-webcast-leveraging-datamarket-to-create-cloud-powered-digital-dashboards.aspx</link><pubDate>Mon, 16 May 2011 19:08:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:105815</guid><dc:creator>milos</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Hi everyone,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The ComponentArt production team has been very busy wrapping up Data Visualization 2011, which is coming very soon, but I&amp;#39;ll be taking some time out next Tuesday to talk about &lt;a href="http://azure.componentart.com/"&gt;cloud-powered digital dashboards&lt;/a&gt;. If you&amp;#39;d like to learn a bit about Microsoft&amp;#39;s &lt;a href="https://datamarket.azure.com/"&gt;Azure DataMarket&lt;/a&gt;, or just see some cool visualizations in action, go ahead and &lt;a href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032485798&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;register for the webcast&lt;/a&gt;. Hope to see you all there!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;UPDATE&lt;/b&gt;: Thanks to all who tuned in! Hope you found it informative. If you couldn&amp;#39;t make it, no problem! You can see a replay of the webcast &lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=17634"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=105815" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/azure/default.aspx">azure</category><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/webcast/default.aspx">webcast</category><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/dashboards/default.aspx">dashboards</category><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/msdn/default.aspx">msdn</category><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/datamarket/default.aspx">datamarket</category><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/cloud/default.aspx">cloud</category></item><item><title>Introducing Mobile Dashboards for Windows Phone 7</title><link>http://www.componentart.com/community/blogs/miljan/archive/2011/02/14/introducing-mobile-dashboards-for-windows-phone-7.aspx</link><pubDate>Mon, 14 Feb 2011 22:05:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:104545</guid><dc:creator>miljan</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;I am very pleased to announce our latest release -- &lt;a title="Charting, Gauges, Maps, DataGrids and TimeNavigator for Windows Phone 7" href="http://www.componentart.com/products/dv/wp7.aspx"&gt;ComponentArt Data Visualization for Windows Phone 7&lt;/a&gt; -- the industry&amp;#39;s first complete framework for building interactive mobile dashboards targeting Microsoft&amp;#39;s new mobile operating system. There are several exciting elements of our product release, however, before I get into those details, I would like to start off by sharing some thoughts on the Windows Phone 7 platform itself.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;My Quick Take on Windows Phone 7&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;We started playing around with WP7 late last year with relatively low expectations. Common sense would dictate that the feature set of the first release would leave a lot to be desired and that it would take Microsoft some time to catch up to Apple, Google or even RIM. &lt;br /&gt;&lt;br /&gt;As it turns out, we were up for a series of pleasant surprises, first of which was Metro &amp;ndash; WP7&amp;#39;s amazing user interface paradigm. It is flat, smooth, modern-looking and it gives so much real estate and breathing room when developing apps through its vertical-scrolling-with-horizontal-swiping concept. Apps that take full advantage of Metro definitely come off big and powerful. To illustrate this point, take a side-by-side look at the official &lt;a target="_blank" href="http://www.appsfuze.com/applications/windowsphone.entertainment/imdb-movies-tv-celebrities,626"&gt;IMDB app for Windows Phone 7&lt;/a&gt; and the official &lt;a target="_blank" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=342792525&amp;amp;mt=8&amp;amp;ign-mpt=uo%3D6"&gt;IMDB app for iPhone&lt;/a&gt;. After using these apps for a few minutes I think most people will agree that the iOS version feels dated. The notion that Microsoft would be beating Apple on user experience is unexpected and almost unbelievable, but it appears to be true. &lt;br /&gt;&lt;br /&gt;The deeper we looked into Windows Phone 7, the more apparent it became that the entire platform and the ecosystem behind it are real, ready for prime time and have immense potential. App developers are already there in large numbers through Silverlight and Visual Studio. The current lineup of apps in the Marketplace speaks for itself. Top notch games are also already plentiful thanks to the Xbox development community and XNA. Music and other media are available through the very clean Zune application (I sure don&amp;#39;t miss the iTunes client!). As for the enterprise, it is no surprise that Microsoft comes through with great back office integration and productivity apps. &lt;br /&gt;&lt;br /&gt;All in all, Windows Phone 7 is a real contender in the mobile space. &lt;a target="_blank" href="http://www.microsoft.com/presspass/press/2011/feb11/02-11partnership.mspx"&gt;Nokia&amp;#39;s announcement on Friday&lt;/a&gt; should come as no surprise to anyone who has taken a deep look at Microsoft&amp;#39;s new mobile platform. If you want to participate in the growth of the WP7 ecosystem, all you need to get started is Visual Studio 2010 and rudimentary Silverlight skills. Please see &lt;a title="Getting Started with Data Visualization for Windows Phone 7" href="http://www.componentart.com/community/blogs/jeremey/archive/2011/02/04/getting-started-with-datavisualization-for-windows-phone-7.aspx"&gt;Jeremy&amp;#39;s blog post&lt;/a&gt; for more details. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Our Windows Phone 7 Release&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/products/dv/wp7.aspx" target="_new"&gt;&lt;img src="http://www.componentart.com/blogs/miljan/images/2011-02-14-branding.png" border="0" width="620" height="94" alt="" /&gt;&lt;br /&gt;&lt;img src="http://www.componentart.com/blogs/miljan/images/2011-02-14-screenshots.jpg" border="0" width="620" height="506" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;With Data Visualization for Windows Phone 7, our goal was to enable the development of next-generation mobile business intelligence applications. We have created specialized versions of &lt;a title="Windows Phone 7 charts" href="http://www.componentart.com/products/dv/wp7.aspx#charting"&gt;Windows Phone 7 charts&lt;/a&gt;, &lt;a title="Windows Phone 7 gauges" href="http://www.componentart.com/products/dv/wp7.aspx#gauges"&gt;gauges&lt;/a&gt;, &lt;a title="Windows Phone 7 maps" href="http://www.componentart.com/products/dv/wp7.aspx#maps"&gt;maps&lt;/a&gt;, &lt;a title="Windows Phone 7 datagrid" href="http://www.componentart.com/products/dv/wp7.aspx#gridview"&gt;datagrids&lt;/a&gt; and &lt;a title="Windows Phone 7 timenavigator" href="http://www.componentart.com/products/dv/wp7.aspx#timenavigator"&gt;time navigators&lt;/a&gt; by porting almost the entire Data Visualization for Silverlight codebase. This allowed us to deliver an extensive feature set from the very first release. Each component has been extensively optimized for smaller screens and mobile CPUs, touch interface support, including fine-tuned interactivity, pinch and flick gestures, customized skins and minified Map shape files. &lt;br /&gt;&lt;br /&gt;Going beyond the standard data visualization controls, ComponentArt&amp;#39;s TimeNavigator for Windows Phone 7 proves to be an invaluable element of interactive mobile dashboards. Designed to enable quick, easy and intuitive date range selections, the control has been re-engineered specifically for touch screens in order to deliver an optimal experience to end users. &lt;br /&gt;&lt;br /&gt;The entire effort took about 6 man-months, which is relatively quick considering the size of our Data Visualization codebase. An important point is that our mobile and desktop Data Visualization product lines are now based on the same code, enabling new feature additions to both platforms simultaneously as well as customer code reuse between desktop and mobile applications. &lt;br /&gt;&lt;br /&gt;To see our Windows Phone 7 controls in action (and to experience ComponentArt&amp;rsquo;s Metro implementation in our demo app) simply search for &amp;ldquo;ComponentArt&amp;rdquo; in the App Marketplace on your Windows Phone. If you don&amp;rsquo;t have access to a physical WP7 device, simply download our demo app and run it in the Windows Phone emulator within Visual Studio. &lt;br /&gt;&lt;br /&gt;ComponentArt&amp;rsquo;s long-term goal is to deliver the most sophisticated data visualization technology available on any mobile platform. This is just the first of many releases to come, so please let us know your thoughts on how we can expanded and improve our current product.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=104545" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/miljan/archive/tags/mobile+bi/default.aspx">mobile bi</category><category domain="http://www.componentart.com/community/blogs/miljan/archive/tags/mobile+dashboards/default.aspx">mobile dashboards</category><category domain="http://www.componentart.com/community/blogs/miljan/archive/tags/mobile+charting/default.aspx">mobile charting</category><category domain="http://www.componentart.com/community/blogs/miljan/archive/tags/WP7/default.aspx">WP7</category><category domain="http://www.componentart.com/community/blogs/miljan/archive/tags/Windows+Phone+7/default.aspx">Windows Phone 7</category></item><item><title>Getting Started with DataVisualization for Windows Phone 7</title><link>http://www.componentart.com/community/blogs/jeremey/archive/2011/02/04/getting-started-with-datavisualization-for-windows-phone-7.aspx</link><pubDate>Fri, 04 Feb 2011 19:37:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:104382</guid><dc:creator>jrodgers</dc:creator><slash:comments>2</slash:comments><description>&lt;p class="txt"&gt;Windows Phone 7 represents a huge advance in mobile technology from Microsoft, ComponentArt is proud to support this exciting new platform with a full suite of DataVisualization controls for Windows Phone 7 Apps.&lt;/p&gt;
&lt;div class="con"&gt;&lt;strong class="txt"&gt;GETTING STARTED&lt;/strong&gt; &lt;/div&gt;
&lt;p class="txt"&gt;Windows Phone 7 development requires the Windows Phone Developer Tools for Visual Studio 2010. They can be downloaded from &lt;a href="http://create.msdn.com/en-us/home/getting_started"&gt;http://create.msdn.com/en-us/home/getting_started&lt;/a&gt;.&lt;/p&gt;
&lt;div class="con"&gt;&lt;strong class="txt"&gt;INCLUDED CONTROLS&lt;/strong&gt; &lt;/div&gt;
&lt;p class="txt"&gt;The following is a list of the controls included in the Silverlight 4 and Windows Phone 7 editions:&lt;/p&gt;
&lt;div class="txt"&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jeremey/3438.UpdatedControlList_2800_SL4_2C00_WP7_2900_2.png"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p class="txt"&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jeremey/8508.UpdatedControlList_2800_SL4_2C00_WP7_2900_3.png"&gt;&lt;/a&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jeremey/8625.UpdatedControlList_2800_SL4_2C00_WP7_2900_3.png"&gt;&lt;/a&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/548x343/__key/CommunityServer.Blogs.Components.WeblogFiles/jeremey/5428.UpdatedControlList_2800_SL4_2C00_WP7_2900_3.png" border="0" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="con"&gt;&lt;strong class="txt"&gt;DEVELOPMENT&lt;/strong&gt; &lt;/div&gt;
&lt;p class="txt"&gt;Developing for Windows Phone 7 using the ComponentArt DataVisualization controls is very similar to developing for the Silverlight browser-based and OOB platforms. The API calls are identical and use the same documentation. One thing you will notice is that when you test a project it launches in the Windows Phone 7 Emulator, this is a virtual phone which really assists in development and debugging. One thing to keep in mind as you develop is that the performance of an app on the emulator can differ from that on an actual phone device &amp;ndash; sometimes the animations are smoother on the actual phone, sometimes page loading times are shorter when using the Emulator. All screen shots in this post are from the emulator.&lt;/p&gt;
&lt;div class="con"&gt;&lt;strong class="txt"&gt;QUICK START&lt;/strong&gt; &lt;/div&gt;
&lt;p class="txt"&gt;In this tutorial we&amp;#39;ll go ahead and implement a simple chart using points from a binding to an ObservableCollection type. The source for this project is included in the CTP .zip file available at &lt;span style="font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#1f497d;font-size:11pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;&lt;a href="http://www.componentart.com/download/dv.aspx"&gt;&lt;span style="color:#0000ff;"&gt;http://www.componentart.com/download/dv.aspx&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;.&amp;nbsp;&lt;/p&gt;
&lt;div class="txt"&gt;&lt;strong&gt;Step 1.&lt;/strong&gt; &lt;/div&gt;
&lt;p class="txt"&gt;Create a new Project, under Installed Templates select Silverlight for Windows Phone, choose a Windows Phone Application.&lt;/p&gt;
&lt;div class="txt"&gt;&lt;strong&gt;Step 2.&lt;/strong&gt; &lt;/div&gt;
&lt;p class="txt"&gt;Under References add a reference to ComponentArt.Silverlight.DataVisualization.Charting.&lt;/p&gt;
&lt;div class="txt"&gt;&lt;strong&gt;Step 3.&lt;/strong&gt; &lt;/div&gt;
&lt;p class="txt"&gt;Open MainPage.xaml and add the following to the Namespace declarations at the top of the file:&lt;/p&gt;
&lt;div class="con"&gt;
&lt;pre class="codeblock"&gt;xmlns:my=&amp;quot;clr-namespace:ComponentArt.Silverlight.DataVisualization.Charting;assembly=ComponentArt.Silverlight.DataVisualization.Charting&amp;quot;

&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="txt"&gt;&lt;strong&gt;Step 4.&lt;/strong&gt; &lt;/div&gt;
&lt;p class="txt"&gt;Add the following to the Grid marked &amp;ldquo;ContentGrid&amp;rdquo;:&lt;/p&gt;
&lt;div class="con"&gt;
&lt;pre class="codeblock"&gt;    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;my&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XYChart&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;EnableAnimation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;False&amp;quot;&lt;/span&gt;
                &lt;span style="color:#FF0000;"&gt;DataSource&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding}&amp;quot;&lt;/span&gt;
                &lt;span style="color:#FF0000;"&gt;XPath&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;X&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;my&lt;/span&gt;:&lt;span style="color:#800000;"&gt;BarSeries&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;YPath&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Y&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;BarKind&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Block&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;my&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XYChart&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;

&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="txt"&gt;&lt;strong&gt;Step 5.&lt;/strong&gt; &lt;/div&gt;
&lt;div class="txt"&gt;Add the following to make your MainPage.xaml.cs look like this:&amp;nbsp;&lt;/div&gt;
&lt;div class="con"&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt; System;
&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt; Microsoft.Phone.Controls;
&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt; System.Collections.ObjectModel;

&lt;span style="color:#0000FF;"&gt;namespace&lt;/span&gt; QuickStart
{
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; partial &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; MainPage : PhoneApplicationPage
    {
        ObservableCollection&amp;lt;DataPoint&amp;gt; PointCollectionQ1 = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; ObservableCollection&amp;lt;DataPoint&amp;gt;
        {
            &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; DataPoint { X = &amp;quot;&lt;span style="color:#8B0000;"&gt;January&lt;/span&gt;&amp;quot;, Y=100},
            &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; DataPoint { X = &amp;quot;&lt;span style="color:#8B0000;"&gt;February&lt;/span&gt;&amp;quot;, Y=300},
            &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; DataPoint { X = &amp;quot;&lt;span style="color:#8B0000;"&gt;March&lt;/span&gt;&amp;quot;, Y=600},
        };

        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; MainPage()
        {
            InitializeComponent();
            DataContext = PointCollectionQ1;
        }
    }

    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; DataPoint
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; X { &lt;span style="color:#0000FF;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000FF;"&gt;set&lt;/span&gt;; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;int&lt;/span&gt; Y { &lt;span style="color:#0000FF;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000FF;"&gt;set&lt;/span&gt;; }
    }
}

&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="txt"&gt;&lt;strong&gt;Step 6.&lt;/strong&gt; &lt;/div&gt;
&lt;div class="txt"&gt;Test your project in the Emulator, it should end up looking like this:&lt;/div&gt;
&lt;p class="txt"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="txt"&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jeremey/8233.QuickStartEmu.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/jeremey/8233.QuickStartEmu.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="txt"&gt;This example demonstrates how easy it is to get up and running with ComponentArt DV for Windows Phone 7.&lt;/p&gt;
&lt;div class="txt"&gt;&lt;strong&gt;BONUS STEP&lt;/strong&gt; &lt;/div&gt;
&lt;p class="txt"&gt;To change the colors of the bars add the following to the XYChart tag:&lt;/p&gt;
&lt;div class="con"&gt;
&lt;pre class="codeblock"&gt;UseDifferentBarColors=&amp;quot;True&amp;quot; Palette=&amp;quot;VibrantB&amp;quot;

&lt;/pre&gt;
Try out the different palettes that ship standard with ComponentArt DV, the full list can be found here: &lt;a href="http://docs.componentart.com/default.aspx?content=SlDataVisualization/2010/ComponentArt.Silverlight.DataVisualization/CommonConcepts_Theming.htm"&gt;http://docs.componentart.com/default.aspx?content=SlDataVisualization/2010/ComponentArt.Silverlight.DataVisualization/CommonConcepts_Theming.htm&lt;/a&gt; under Included Palettes.&lt;/div&gt;
&lt;div class="txt"&gt;&lt;strong class="txt"&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div class="txt"&gt;&lt;strong class="txt"&gt;LICENSING&lt;/strong&gt; While testing the ComponentArt WP7 Demo application the DV controls will appear as licensed, however if you use the DV controls in your own project you will need to license them to get rid of the unlicensed overlay. See the following pages in the documentation to license your project.&lt;/div&gt;
&lt;div class="txt"&gt;&lt;ol&gt;
&lt;li&gt;&lt;span style="text-decoration:underline;"&gt;Product Activation&lt;/span&gt;:&lt;br /&gt;&lt;a href="http://docs.componentart.com/default.aspx?content=SlDataVisualization/2010/ComponentArt.Silverlight.DataVisualization/GettingStarted_ProductActivation.htm"&gt;http://docs.componentart.com/default.aspx?content=SlDataVisualization/2010/ComponentArt.Silverlight.DataVisualization/GettingStarted_ProductActivation.htm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="text-decoration:underline;"&gt;Deploying Licensed Controls&lt;/span&gt; (Manually adding the ComponentArt.Silverlight.DataVisualization.lic file):&lt;br /&gt;&lt;a href="http://docs.componentart.com/default.aspx?content=SlDataVisualization/2010/ComponentArt.Silverlight.DataVisualization/CommonConcepts_Deployment.htm"&gt;http://docs.componentart.com/default.aspx?content=SlDataVisualization/2010/ComponentArt.Silverlight.DataVisualization/CommonConcepts_Deployment.htm&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=104382" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/jeremey/archive/tags/WP7/default.aspx">WP7</category><category domain="http://www.componentart.com/community/blogs/jeremey/archive/tags/Windows+Phone+7/default.aspx">Windows Phone 7</category></item><item><title>Hosting a ComponentArt Dashboard in SharePoint 2010</title><link>http://www.componentart.com/community/blogs/chris/archive/2011/01/11/implementing-an-external-componentart-dashboard-in-sharepoint-2010.aspx</link><pubDate>Tue, 11 Jan 2011 21:48:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:104041</guid><dc:creator>Chris</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;Hosting a ComponentArt dashboard in SharePoint 2010 is a scenario which comes up a lot in conversation with clients here at ComponentArt.&amp;nbsp; This is very possible using our DataVisualization package as well as standard controls (by way of the Silverlight Web Part) already present in SharePoint 2010.&lt;/p&gt;
&lt;p&gt;We will assume that we have already created a dashboard solution using ComponentArt DataVisualization technology and also a running SharePoint 2010 installation.&amp;nbsp; For the purposes of this sample, I will be using our demo package as our running dashboard solution.&amp;nbsp; First we will need to create a separate website to host our Dashboard DataLayer as well as our Silverlight Xap file.&lt;/p&gt;
&lt;p&gt;&lt;img style="border:0;" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/1447.1.PNG" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;In my scenario, I want to host the Dashboard DataLayer on the same site as the SharePoint application, so I will need to assign a different port number, so they can reside on the same IP address.&lt;/p&gt;
&lt;p&gt;I can verify that my newly created website is working by navigating to the site:&lt;br /&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/7455.2.png"&gt;&lt;/a&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/2100.2.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/2100.2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once we have verified this as working, we will need to login to our SharePoint environment and setup our new SharePoint page.&lt;/p&gt;
&lt;p&gt;From the home page, I am going to click Site Actions, then New Page (which will create our page).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/7776.3.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/7776.3.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Give my page a name, then click Create.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/4456.4.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/4456.4.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now we are presented with a new page, inside page content, I want to select Editing Tools, Insert.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/4606.5.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/4606.5.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now the ribbon shows a web part option.&amp;nbsp; Lets select this, and select Media and Content From the Categories.&amp;nbsp; Once we have selected Media and Content, we have the option on the right to select Silverlight Web Part.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/3175.6.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/3175.6.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This will let us display any Silverlight application to the page.&amp;nbsp; Click Add.&amp;nbsp; Now we will be prompted to add the url of the Silverlight Xap File.&amp;nbsp; You only need the xap reference because the Silverlight Web Part will create the required object for hosting the Silverlight Application.&amp;nbsp; I know that my Xap file is located in the ClientBin sub folder of that website we just created, so I will enter it, and click OK.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/0677.7.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/0677.7.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now you should have a Silverlight Web Part on your page, we&amp;#39;ll need to make some adjustments now to get our dashboard to fit inside.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/1185.8.png"&gt;&lt;/a&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/1754.8.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/1754.8.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We will set some options to have the dashboard fit nicely.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/1777.9.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/1777.9.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now let&amp;#39;s check in our changes, once we have checked in, we will need to publish the page.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/4885.10.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/4885.10.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We will now be presented with the completed page.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/7115.11.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/chris/7115.11.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now we have a SharePoint Page hosting a ComponentArt Dashboard!&lt;/p&gt;
&lt;p&gt;Next time, I will show how to create a dashboard using SharePoint 2010 Lists and Excel Services.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=104041" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/chris/archive/tags/Dashboard/default.aspx">Dashboard</category><category domain="http://www.componentart.com/community/blogs/chris/archive/tags/2010/default.aspx">2010</category><category domain="http://www.componentart.com/community/blogs/chris/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>HOWTO: Plotting Points on a Map</title><link>http://www.componentart.com/community/blogs/milos/archive/2010/12/23/howto-plotting-points-on-a-map.aspx</link><pubDate>Thu, 23 Dec 2010 14:10:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:103832</guid><dc:creator>milos</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&lt;b&gt;IMPORTANT&lt;/b&gt;: Some details of the following tutorial have been made obsolete by API changes introduced in Data Visualization 2011. An updated &lt;a href="http://docs.componentart.com/#SlDataVisualization/2011/ComponentArt.Silverlight.DataVisualization/Maps_HowTo_PlottingPoints.htm"&gt;tutorial in the live docs&lt;/a&gt; reflects the new functionality. The old tutorial continues below.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A common scenario faced when building maps into data visualization apps is the need to plot points at specific locations on a base map. Visually, these are usually not simple points, but are templated
to be descriptive, and often trigger a popup with more information when hovered or clicked. In this post, I will provide a quick overview of how such functionality is achieved with 
the &lt;a href="http://www.componentart.com/products/dv/maps.aspx"&gt;ComponentArt Map&lt;/a&gt; control for Silverlight/WPF.&lt;/p&gt;
&lt;p&gt;To begin, we set up our base map by defining the first layer on the map, pointing to the SHP file to be used for the base shapes:&lt;/p&gt;
&lt;div style="border:1px solid #808080;padding:10px;font-family:courier new;background-color:#e5e5e5;text-align:left;"&gt;
&lt;pre&gt;	&amp;lt;mapping:Map ... &amp;gt;&lt;br /&gt;	  &amp;lt;mapping:Map.Layers&amp;gt;&lt;br /&gt;		 &amp;lt;mapping:MapLayer ShapeFile=&amp;quot;ClientBin/basemap.shp&amp;quot; ... /&amp;gt;&lt;br /&gt;	  &amp;lt;/mapping:Map.Layers&amp;gt;&lt;br /&gt;	&amp;lt;/mapping:Map&amp;gt;&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The first layer will dictate not only the shapes which are rendered as the background of the map, but also the coordinate system and the bounding box of the entire display. We must make sure that the same types of coordinates
(eg. longitudes and latitudes) are used for the base map as for the points we want to plot.&lt;/p&gt;
&lt;p&gt;Next, we are ready to define the second layer, the one on which the templated points will appear:&lt;/p&gt;
&lt;div style="border:1px solid #808080;padding:10px;font-family:courier new;background-color:#e5e5e5;text-align:left;"&gt;
&lt;pre&gt;	&amp;lt;mapping:Map ... &amp;gt;&lt;br /&gt;	  &amp;lt;mapping:Map.Layers&amp;gt;&lt;br /&gt;	    &amp;lt;mapping:MapLayer ShapeFile=&amp;quot;ClientBin/basemap.shp&amp;quot; ... /&amp;gt;&lt;br /&gt;	    &amp;lt;mapping:MapLayer ItemsSource=&amp;quot;{StaticResource PointData}&amp;quot; ItemPointXPath=&amp;quot;Longitude&amp;quot; ItemPointYPath=&amp;quot;Latitude&amp;quot; /&amp;gt;&lt;br /&gt;	  &amp;lt;/mapping:Map.Layers&amp;gt;&lt;br /&gt;	&amp;lt;/mapping:Map&amp;gt;&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;In this layer definition, we specify a source for data to be plotted by setting the ItemsSource property to a static resource. This property can alternatively be set from code-behind, or even inline, 
to any kind of collection of objects. We then set ItemPointXPath and ItemPointYPath properties to the property paths within objects of that collection at which the control can find horizontal and vertical coordinates, 
respectively. &lt;/p&gt;
&lt;p&gt;We have now provided all the data necessary for plotting our points. What we haven&amp;#39;t provided is the visual appearance of those points.	We will do that by defining an ItemTemplate on the layer:&lt;/p&gt;
&lt;div style="border:1px solid #808080;padding:10px;font-family:courier new;background-color:#e5e5e5;text-align:left;"&gt;
&lt;pre&gt;	&amp;lt;mapping:Map ... &amp;gt;&lt;br /&gt;	  &amp;lt;mapping:Map.Layers&amp;gt;&lt;br /&gt;	    &amp;lt;mapping:MapLayer ShapeFile=&amp;quot;ClientBin/basemap.shp&amp;quot; ... /&amp;gt;&lt;br /&gt;	    &amp;lt;mapping:MapLayer ItemsSource=&amp;quot;{StaticResource PointData}&amp;quot; ItemPointXPath=&amp;quot;Longitude&amp;quot; ItemPointYPath=&amp;quot;Latitude&amp;quot;&amp;gt;&lt;br /&gt;	      &amp;lt;mapping:MapLayer.ItemTemplate&amp;gt;&lt;br /&gt;		    &amp;lt;DataTemplate&amp;gt;&lt;br /&gt;	          &amp;lt;Ellipse Fill=&amp;quot;Red&amp;quot; Height=&amp;quot;10&amp;quot; Width=&amp;quot;10&amp;quot; Margin=&amp;quot;-5,-5,0,0&amp;quot; /&amp;gt;&lt;br /&gt;			&amp;lt;/DataTemplate&amp;gt;&lt;br /&gt;		  &amp;lt;/mapping:MapLayer.ItemTemplate&amp;gt;&lt;br /&gt;	    &amp;lt;/mapping:MapLayer&amp;gt;&lt;br /&gt;	  &amp;lt;/mapping:Map.Layers&amp;gt;&lt;br /&gt;	&amp;lt;/mapping:Map&amp;gt;&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;For this example, we have defined the points as a simple red circle with a diameter of 10 pixels. We use negative margins to centre the shape over its target location.&lt;/p&gt;
&lt;p&gt;Because the data context of the template is the logical map item which also contains the data object originally provided, we can bind to other properties of that object to provide more richness and variation to the template.
For example, the size and colour of the template could vary based on values of particular properties, or text (or visual) representations of other values can be embedded in the template. A common approach is to display whole
pie charts over locations whose data they represent.&lt;/p&gt;
&lt;p&gt;Now that the visualization is done, we can include an additional useful feature: hover popups. To do this, we define an additional popup template on the layer:&lt;/p&gt;
&lt;div style="border:1px solid #808080;padding:10px;font-family:courier new;background-color:#e5e5e5;text-align:left;"&gt;
&lt;pre&gt;	&amp;lt;mapping:Map ... &amp;gt;&lt;br /&gt;	  &amp;lt;mapping:Map.Layers&amp;gt;&lt;br /&gt;	    &amp;lt;mapping:MapLayer ShapeFile=&amp;quot;ClientBin/basemap.shp&amp;quot; ... /&amp;gt;&lt;br /&gt;	    &amp;lt;mapping:MapLayer ItemsSource=&amp;quot;{StaticResource PointData}&amp;quot; ItemPointXPath=&amp;quot;Longitude&amp;quot; ItemPointYPath=&amp;quot;Latitude&amp;quot;&amp;gt;&lt;br /&gt;	      &amp;lt;mapping:MapLayer.ItemTemplate&amp;gt;&lt;br /&gt;		    &amp;lt;DataTemplate&amp;gt;&lt;br /&gt;	          &amp;lt;Ellipse Fill=&amp;quot;Red&amp;quot; Height=&amp;quot;10&amp;quot; Width=&amp;quot;10&amp;quot; Margin=&amp;quot;-5,-5,0,0&amp;quot; /&amp;gt;&lt;br /&gt;			&amp;lt;/DataTemplate&amp;gt;&lt;br /&gt;		  &amp;lt;/mapping:MapLayer.ItemTemplate&amp;gt;&lt;br /&gt;		  &amp;lt;mapping:MapLayer.PopupValueTemplate&amp;gt;&lt;br /&gt;		    &amp;lt;DataTemplate&amp;gt;&lt;br /&gt;			  &amp;lt;TextBlock Text=&amp;quot;{Binding PropertyToDisplayInPopup}&amp;quot; /&amp;gt;&lt;br /&gt;			&amp;lt;/DataTemplate&amp;gt;&lt;br /&gt;		  &amp;lt;/mapping:MapLayer.PopupValueTemplate&amp;gt;&lt;br /&gt;	    &amp;lt;/mapping:MapLayer&amp;gt;&lt;br /&gt;	  &amp;lt;/mapping:Map.Layers&amp;gt;&lt;br /&gt;	&amp;lt;/mapping:Map&amp;gt;&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Clearly, the popup data template could contain much more elaborate XAML structures, including instances of other Data Visualization controls bound to data in the provided objects. The popup itself, the chrome surrounding
the defined template, will have an appearance defined by the theme. Changing the theme on the Map, or containing DashboardPanel or DashboardLayout by changing the Theme property, will change the appearance of the default 
popup as well.&lt;/p&gt;
&lt;p&gt;I hope you&amp;#39;ve found this post informative! We&amp;#39;d love to hear what you think.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=103832" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/data+visualization/default.aspx">data visualization</category><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/map/default.aspx">map</category><category domain="http://www.componentart.com/community/blogs/milos/archive/tags/points/default.aspx">points</category></item><item><title>XYChart's X-Coordinate Popups</title><link>http://www.componentart.com/community/blogs/hwan/archive/2010/11/29/xychart-s-x-coordinate-popups.aspx</link><pubDate>Mon, 29 Nov 2010 15:40:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:103474</guid><dc:creator>hwan</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;XYChart&amp;#39;s XCoordinatePopup is a popup that is shown when the user&amp;#39;s cursor hovers over the main area i.e. the rectangular region where datapoints are rendered.  The popup&amp;#39;s contents generally reveal details about the datapoints that lie along that particular x-coordinate.&amp;nbsp; Note the difference between this and the plain popup behavior -- in that case, the popup&amp;#39;s context is the datapoint being hovered over, rather than the datapoints along the x-coordinate.&amp;nbsp; As such, one can think of XCoordinatePopup as a summary of the datapoints that are contained in that columnar area.&lt;/p&gt;
&lt;h3&gt;Features&lt;/h3&gt;
&lt;p&gt;When EnableXCoordinatePopup is set to true, the XCoordinatePopup&amp;#39;s default popup will appear with basic datapoint values, such as in Figure 1.
&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hwan/8357.Charting_5F00_XyChart_5F00_XCoordinatePopup01.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/hwan/8357.Charting_5F00_XyChart_5F00_XCoordinatePopup01.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:x-small;"&gt;Figure 1. Default XYChart XCoordinatePopup&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The popup consists of two parts: an index template (the upper, darker gray section of Figure 1&amp;#39;s popup) and a data template (the lower, lighter gray section of Figure 1&amp;#39;s popup).  By defining a custom template for both or either section one can override these default templates.  For example, the XCoordinatePopup in Figure 2 is achieved using the following XAML:&lt;/p&gt;
&lt;div class="LanguageSpecific"&gt;
&lt;pre class="csc"&gt;&lt;span class="kwrd"&gt;&lt;pre class="codeblock"&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XYChart.XCoordinatePopup&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XCoordinatePopup&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XCoordinatePopup.DataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;caCalc&lt;/span&gt;:&lt;span style="color:#800000;"&gt;CalcEngine&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x&lt;/span&gt;:&lt;span style="color:#FF0000;"&gt;Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;calc0&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;caCalc&lt;/span&gt;:&lt;span style="color:#800000;"&gt;CalcEngineInput&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Id&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;context&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Value&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding}&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;caCalc&lt;/span&gt;:&lt;span style="color:#800000;"&gt;CalcEngine.Expression&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;              &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;sys&lt;/span&gt;:&lt;span style="color:#800000;"&gt;String&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                var a[]; &lt;br /&gt;                a[0] = S0.DataPoint.Y; &lt;br /&gt;                a[1] = S0.DataPoint.Brush; &lt;br /&gt;                a[2] = S1.DataPoint.Y;&lt;br /&gt;                a[3] = S1.DataPoint.Brush;&lt;br /&gt;                a&lt;br /&gt;              &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;sys&lt;/span&gt;:&lt;span style="color:#800000;"&gt;String&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;caCalc&lt;/span&gt;:&lt;span style="color:#800000;"&gt;CalcEngine.Expression&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;caCalc&lt;/span&gt;:&lt;span style="color:#800000;"&gt;CalcEngine&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Vertical&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock&lt;/span&gt;&lt;br /&gt;              &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Output[0], ElementName=calc0, StringFormat=\{0:$#\,0\}}&amp;quot;&lt;/span&gt; &lt;br /&gt;              &lt;span style="color:#FF0000;"&gt;Foreground&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Output[1], ElementName=calc0}&amp;quot;&lt;/span&gt; &lt;br /&gt;              &lt;span style="color:#FF0000;"&gt;FontSize&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;10&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock&lt;/span&gt;&lt;br /&gt;              &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Output[2], ElementName=calc0, StringFormat=\{0:$#\,0\}}&amp;quot;&lt;/span&gt; &lt;br /&gt;              &lt;span style="color:#FF0000;"&gt;Foreground&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Output[3], ElementName=calc0}&amp;quot;&lt;/span&gt; &lt;br /&gt;              &lt;span style="color:#FF0000;"&gt;FontSize&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;10&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XCoordinatePopup.DataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XCoordinatePopup&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XYChart.XCoordinatePopup&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hwan/6648.Charting_5F00_XyChart_5F00_XCoordinatePopup02.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/hwan/6648.Charting_5F00_XyChart_5F00_XCoordinatePopup02.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:x-small;"&gt;Figure 2. Customized XYChart XCoordinatePopup&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Classes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;RelativePositionX&lt;/b&gt;, &lt;b&gt;RelativePositionY&lt;/b&gt; -- Translation on the xy plane to shift the popup from its default position as a percentage.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;XOffset&lt;/b&gt;, &lt;b&gt;YOffset&lt;/b&gt; -- Translation on the xy plane to shift the popup from its default position in pixels.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;IndexTemplate&lt;/b&gt;, &lt;b&gt;DataTemplate&lt;/b&gt; -- Templates for the index (top) and value (bottom) parts of the popup.  The datacontext for both is a SeriesCrossSection object.
    
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;SeriesCrossSectionContext&lt;/i&gt; -- Object which provides the set of datapoints that lie along (or closest to) the x-coordinate where the cursor is currently sitting.  Derives from Dictionary&amp;lt;string, DataPointContext&amp;gt; and implements the IPropertyProvider interface.  For each datapoint in the cross-section there is an item in the dictionary.  The key is the Series name and the value is the DataPointContext object related to the datapoint.  The IPropertyProvider interface also allows one to access dictionary items in Calc script, such as in a CalcContainer.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;In-depth Explanation&lt;br /&gt;&lt;/h3&gt;
&lt;p&gt;Let&amp;#39;s take a closer look at the markup to generate the XCoordinatePopup in Figure 2.&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hwan/4452.Charting_5F00_XyChart_5F00_XCoordinatePopup03.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/hwan/4452.Charting_5F00_XyChart_5F00_XCoordinatePopup03.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:x-small;"&gt;Figure 3. Customized XYChart XCoordinatePopup markup&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;This XCoordinatePopup XAML defines a DataTemplate, which will overwrite the default.  However IndexTemplate is not defined and so Chart will provide its own default template for the upper region of the XCoordinatePopup.&lt;/li&gt;
&lt;li&gt;The CalcEngine, &amp;quot;calc0&amp;quot;, sets the DataTemplate context as its Input.&lt;/li&gt;
&lt;li&gt;Since the context is a dictionary, a Calc expression of &amp;quot;self[&amp;lsquo;S0&amp;rsquo;]&amp;quot; would access the datapoint context of the datapoint from series &amp;ldquo;S0&amp;rdquo;.  In this case however the SeriesCrossSectionContext class implements IPropertyProvider so we can use property syntax instead -- the cleaner and simpler &amp;quot;S0&amp;quot;, the name of the Series object.&lt;/li&gt;
&lt;li&gt;The CalcEngine computes values and brushes and returns them in an array; in this simple example it doesn&amp;#39;t actually do anything to them but pass them back.&lt;/li&gt;
&lt;li&gt;The value section of the XCoordinatePopup consists of two TextBlocks.  These blocks bind text and brushes to the Output of the CalcEngine.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In summary, XCoordinatePopup is a useful way to interactively compare individual datapoints across multiple series.&amp;nbsp; It consists of an IndexTemplate and a DataTemplate, and as such it is highly customizable.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=103474" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/hwan/archive/tags/Charting/default.aspx">Charting</category><category domain="http://www.componentart.com/community/blogs/hwan/archive/tags/Chart/default.aspx">Chart</category><category domain="http://www.componentart.com/community/blogs/hwan/archive/tags/DataVisualization/default.aspx">DataVisualization</category><category domain="http://www.componentart.com/community/blogs/hwan/archive/tags/XYChart/default.aspx">XYChart</category><category domain="http://www.componentart.com/community/blogs/hwan/archive/tags/XCoodinatePopup/default.aspx">XCoodinatePopup</category></item><item><title>An Overview of XYChart Areas</title><link>http://www.componentart.com/community/blogs/hwan/archive/2010/11/25/an-overview-of-xychart-areas.aspx</link><pubDate>Thu, 25 Nov 2010 19:55:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:103452</guid><dc:creator>hwan</dc:creator><slash:comments>10</slash:comments><description>&lt;p&gt;The visual layout for ComponentArt&amp;#39;s XYChart for DataVisualization control is composed of five regions called Areas.&amp;nbsp; This article aims to give an idea of what these regions are, so that you can better customize your own.&lt;/p&gt;
&lt;p&gt;Figure 1. shows the arrangement of XYChart&amp;#39;s Areas:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hwan/2045.Charting_5F00_XyChart_5F00_Areas01.png"&gt;&lt;img alt="XYChart Areas" style="border:0;" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/hwan/2045.Charting_5F00_XyChart_5F00_Areas01.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Figure 1. XYChart Areas&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(In pink) Legend - (Optional) Located at an edge of the chart, depending on the docking property&lt;/li&gt;
&lt;li&gt;(Gray and white) The main chart area is represented by the &lt;b&gt;XYChartMainArea&lt;/b&gt;; it holds the actual rendered graph (line, area, bar, etc.). &lt;/li&gt;
&lt;li&gt;(In violet) There are four axis areas, one along each side of the main area: &lt;b&gt;XAxisArea&lt;/b&gt;, &lt;b&gt;YAxisArea&lt;/b&gt;,  &lt;b&gt;X2AxisArea&lt;/b&gt;, and &lt;b&gt;Y2AxisArea&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By default XYChart populates the XYChartMainArea, XAxisArea and YAxisArea with content, such as axis annotations and coordinate system elements e.g. horizontal and vertical gridlines, stripes, etc.  The secondary areas, X2AxisArea and Y2AxisArea, are left empty.  All of these defaults can be overwritten with custom definitions.  Setting DefaultAxisAnnotationsVisible to false also removes these built-in definitions.  Note that if one defines an area, the default AxisAnnotation (or other element) can still be used by including an undefined instance of it.  &lt;/p&gt;
&lt;p&gt;e.g.&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XYChart&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;XPath&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Date&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;400&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; ... &lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XYChart.XAxisArea&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;AxisCoordinates&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;  &lt;span style="color:#008000;"&gt;&amp;lt;!-- Including AxisAnnotation as undefined  will cause Chart to insert its default version --&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;ChartLabel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      ... etc&lt;/pre&gt;
&lt;p&gt;Each Area is a Collection of elements.  The visual tree of XYChartMainArea is defined by the elements of its underlying Collection, and these are displayed one on top of another.&amp;nbsp; AxisAreas on the other hand are StackPanels are displayed in an inside-out order i.e. the first member is closest to the XYChartMainArea.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;MainArea&lt;/h3&gt;
&lt;p&gt;XYChart&amp;#39;s MainArea can be populated with the following classes:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Series Classes&lt;/b&gt;
    
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;BarSeries &lt;/i&gt;- Datapoints are represented by individual bars (rectangles going left to right) or columns (rectangles going from bottom to top).&lt;/li&gt;
&lt;li&gt;&lt;i&gt;AreaSeries &lt;/i&gt;- Datapoints are connected by a line, and the space between that line and the axis is given a fill.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;LineSeries &lt;/i&gt;- Datapoints are connected by a styled line.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;MarkerSeries &lt;/i&gt;- Datapoints are represented by a pre-defined graphic.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;CandleStickSeries &lt;/i&gt;- Financial stock datapoints are drawn using a &amp;quot;candlestick&amp;quot;, a custom hybrid of line and bar charts.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;OHLCSeries &lt;/i&gt;- Financial stock datapoints are drawn using &amp;quot;Open-high-low-close&amp;quot; markers, which are similar to the candlestick marker.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;CompositeSeries &lt;/i&gt;- A series that is composed of a combination of other series.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Coordinate System Classes
    
&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;CoordinateLines &lt;/i&gt;- Horizontal and vertical lines used to demarcate intervals on the axes.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;CoordinateStripes &lt;/i&gt;- Horizontal and vertical regions between CoordinateLines.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;CoordinateSystemFrame &lt;/i&gt;- Border around the main area, as well as 3D considerations i.e. rendered depth.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Interaction Classes&lt;/b&gt;
    
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;SeriesTracker &lt;/i&gt;- A reticle which highlights datapoints, following the user&amp;#39;s cursor when on the chart main area. &lt;/li&gt;
&lt;li&gt;&lt;i&gt;SeriesAnnotationTracker &lt;/i&gt;- A popup rendered over the series, following the user&amp;#39;s cursor when on the chart main area.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I should mention that there is some overlap between the Series classes -- for example, AreaSeries also has a built-in LineSeries (though of course you can choose to turn this off), and Bar, Line, and Area series can have a MarkerSeries, so you don&amp;#39;t need to add this series separately.&lt;/p&gt;
&lt;h3&gt;AxisAreas&lt;/h3&gt;
&lt;p&gt;The AxisAreas are generally comprised of the following classes:
  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;AxisCoordinates &lt;/b&gt;- System used to uniquely determine the positions of datapoints.&amp;nbsp; Inside an AxisArea, it includes the labels indicating value intervals.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AxisScrollBar &lt;/b&gt;- Scroll bar used to scroll and zoom through the main rendered area of datapoints, as shown in Figure 2.
&lt;p style="text-align:center;"&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hwan/5430.Charting_5F00_XyChart_5F00_Areas02.png"&gt;&lt;img alt="XYChart horizontal scrollbar" style="border:0;" src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/hwan/5430.Charting_5F00_XyChart_5F00_Areas02.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Figure 2. Scroll bar&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AxisLabel &lt;/b&gt;- Visual labels applied to the regions between intervals along the axis.
    &lt;br /&gt;Example:
&lt;p style="text-align:center;"&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hwan/6013.Charting_5F00_XyChart_5F00_Areas03.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/hwan/6013.Charting_5F00_XyChart_5F00_Areas03.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Figure 3. XAxisArea AxisLabel&lt;/p&gt;
&lt;p&gt;In Figure 3 there are two custom AxisLabel definitions inside the XAxisArea.  The first uses an in-line Calc expression to change the color of the AxisLabel instance background to red if the sum of the &amp;quot;Services&amp;quot;, &amp;quot;DV&amp;quot; and &amp;quot;UI&amp;quot; datapoint Y values are less than &amp;quot;Expenses&amp;quot;.  The second simply outputs the Month string. The XAML that defines the above follows:&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XYChart.XAxisArea&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;AxisLabels&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;DateTimeCoordinates&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;From&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Step&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DateLevel&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Month&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;AxisLabels.Template&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;common&lt;/span&gt;:&lt;span style="color:#800000;"&gt;CalcContainer&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt; &amp;lt;!-- CalcContainer inside Common is only available in DataVisualization SP2+ --&amp;gt;&lt;br /&gt;          &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;common&lt;/span&gt;:&lt;span style="color:#800000;"&gt;CalcContainer.Computing&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;sys&lt;/span&gt;:&lt;span style="color:#800000;"&gt;String&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;              var back = Black;&lt;br /&gt;              var diff = Series.Services.DataPoints[Index].Y + Series.DV.DataPoints[Index].Y + Series.UI.DataPoints[Index].Y - Series.Expenses.DataPoints[Index].Y;&lt;br /&gt;              if(0 &amp;gt; diff)&lt;br /&gt;                  back=Red&lt;br /&gt;              else&lt;br /&gt;                  back=Black;&lt;br /&gt;              Background = back;&lt;br /&gt;              Data = diff&lt;br /&gt;            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;sys&lt;/span&gt;:&lt;span style="color:#800000;"&gt;String&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;common&lt;/span&gt;:&lt;span style="color:#800000;"&gt;CalcContainer.Computing&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;FormattedTextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Format&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;$#,#&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;HorizontalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Stretch&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0.5,1,0.5,1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;TextAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;FontSize&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;11&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;FontFamily&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Calibri&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Foreground&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;White&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;common&lt;/span&gt;:&lt;span style="color:#800000;"&gt;CalcContainer&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;AxisLabels.Template&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;AxisLabels&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;AxisLabels&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;DateTimeCoordinates&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;From&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Step&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DateLevel&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Month&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;AxisLabels.Template&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Border&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;4&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;TextAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding FormattedStartValue}&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Border&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;AxisLabels.Template&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;AxisLabels&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ch&lt;/span&gt;:&lt;span style="color:#800000;"&gt;XYChart.XAxisArea&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ChartLabel &lt;/b&gt;- Custom XAML elements positioned between other axis area elements or between a legend and the rest of the axis area.
  &lt;br /&gt;e.g.
&lt;p style="text-align:center;"&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hwan/3288.Charting_5F00_XyChart_5F00_Areas04.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/hwan/3288.Charting_5F00_XyChart_5F00_Areas04.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Figure 4. ChartLabels&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As you can see, XYChart is actually a pretty flexible control!&amp;nbsp; I hope that this post has given you a better grasp of the vocabulary used to build an XYChart.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=103452" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/hwan/archive/tags/Charting/default.aspx">Charting</category><category domain="http://www.componentart.com/community/blogs/hwan/archive/tags/Chart/default.aspx">Chart</category><category domain="http://www.componentart.com/community/blogs/hwan/archive/tags/DataVisualization/default.aspx">DataVisualization</category><category domain="http://www.componentart.com/community/blogs/hwan/archive/tags/XYChart/default.aspx">XYChart</category><category domain="http://www.componentart.com/community/blogs/hwan/archive/tags/XYChart+Areas/default.aspx">XYChart Areas</category></item><item><title>Using CalcEngine for Design-Time Data</title><link>http://www.componentart.com/community/blogs/phil/archive/2010/11/24/using-calcengine-for-design-time-data.aspx</link><pubDate>Wed, 24 Nov 2010 20:12:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:103446</guid><dc:creator>phil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;There are times during development when it is not possible for controls to access live data from within the Visual Studio Design-Time environment. When this occurs it can be advantageous to have sample data available during Design-Time which reflects the live data to a workable degree. To simplify this task the CalcEngine contains a number of options for providing relevant sample data at Design-Time to other controls while maintaining the proper runtime data bindings.&lt;/p&gt;
&lt;h3&gt;Adding a CalcEngine&lt;/h3&gt;
&lt;p&gt;The first step in this process is to add an instance of the CalcEngine to the page/form and configure one of it&amp;#39;s CalcEngineInputs to connect with the real data source. Information regarding this step can be found in our documentation under &lt;strong&gt;Creating Your First CalcEngine&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;Binding to a CalcEngine&lt;/h3&gt;
&lt;p&gt;The second step is to bind the desired control to the instance of the CalcEngine. This can be done with the following syntax.&lt;/p&gt;
&lt;pre&gt;&amp;lt;ComponentArt:XYChart ... DataSource=&amp;quot;{Binding ElementName=calcEngine1, Path=Output}&amp;quot; ... /&amp;gt;&lt;/pre&gt;
&lt;p&gt;In this instance the x:Name of the CalcEngine is calcEngine1. If the CalcEngineInput has been connected to a DataSource and the Expression has been set, it may already be providing relevant sample data to the bound control. If not, some further configuration may be required. The target control should be configured in regards to runtime data, once the proper design-time data type has been generated or specified templates and databound properties of the target control should populate. &lt;/p&gt;
&lt;h3&gt;Configuring Design-Time Data on CalcEngineInputs&lt;/h3&gt;
&lt;p&gt;Each CalcEngineInput defined on a CalcEngine may be configured to provide sample data during Design-Time. A number of options are available for describing and shaping this sample data.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;DesignTimeDataType&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;By default CalcEngine will attempt to determine the desired type for sample data based on types and properties available from the DataSource bound to each CalcEngineInput. There is not always access to the required types and in some cases this is not the desired behavior. The DesingTimeDataType property of the CalcEngineInput allows one to specify the fully qualified type name of the sample data objects that CalcEngineInput should generate.&lt;/p&gt;
&lt;div class="LanguageSpecific" style="color:black;"&gt;
&lt;pre&gt;&amp;lt;ComponentArtCommon:CalcEngine 
  Expression=&amp;quot;calcEngineInput1&amp;quot; 
  Name=&amp;quot;calcEngine1&amp;quot;&amp;gt;
  &amp;lt;ComponentArtCommon:CalcEngineInput 
    Id=&amp;quot;calcEngineInput1&amp;quot; 
    DesignTimeDataType=&amp;quot;System.DateTime&amp;quot; /&amp;gt;
&amp;lt;/ComponentArtCommon:CalcEngine&amp;gt;

&amp;lt;ComponentArtGridView:GridView 
  AutoGenerateColumns=&amp;quot;True&amp;quot; 
  DataContext=&amp;quot;{Binding ElementName=calcEngine1, Path=Output}&amp;quot; 
  ItemsSource=&amp;quot;{Binding}&amp;quot; /&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;It&amp;#39;s important to remember that when no Calc operations are desired the CalcEngine Expression should be set to the Id of the desired CalcEngineInput, this will pass the Value or generated Design-Time data as is through to the CalcEngine&amp;#39;s Output property and, in turn, to bound controls. This code yields the following output.&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/5381.CommonConcepts_5F00_DesignTimeData_5F00_01.PNG"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/5381.CommonConcepts_5F00_DesignTimeData_5F00_01.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One handy class for generating sample data is contained within both frameworks of the Data Visualization Suite,&lt;/p&gt;
&lt;p&gt;ComponentArt.Silverlight.DataVisualization.Utils.DemoDataValue&lt;br /&gt;ComponentArt.Win.DataVisualization.Utils.DemoDataValue &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;DesignTimeDataRecords&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;This CalcEngineInput property specifies the number of sample data records to create, either of the detected type or of the DesignTimeDataType. The default is 15 records.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;DesignTimeDataAlgorithm&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Each CalcEngineInput also has the potential to generate data based on a number of algorithms, specified through the DesignTimeDataAlgoritm property.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fractal ( Default )&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/5466.CommonConcepts_5F00_DesignTimeData_5F00_Fractal.PNG"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/5466.CommonConcepts_5F00_DesignTimeData_5F00_Fractal.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Random&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/2630.CommonConcepts_5F00_DesignTimeData_5F00_Random.PNG"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/2630.CommonConcepts_5F00_DesignTimeData_5F00_Random.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Incremental&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/0574.CommonConcepts_5F00_DesignTimeData_5F00_Incremental.PNG"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/0574.CommonConcepts_5F00_DesignTimeData_5F00_Incremental.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sine&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/0243.CommonConcepts_5F00_DesignTimeData_5F00_Sine.PNG"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/0243.CommonConcepts_5F00_DesignTimeData_5F00_Sine.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/ul&gt;
&lt;h3&gt;Design-Time Data at Runtime&lt;/h3&gt;
&lt;p&gt;CalcEngine automatically detects whether or not it is running in Visual Studio Design-Time. Outside of Visual Studio Design-Time sample data generation will not occur and the data bound to Values of the CalcEngineInputs will become the active context.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="color:#ff0000;"&gt;*Functionality available in ComponentArt Data Visualization 2010 SP2&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=103446" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/Design-Time/default.aspx">Design-Time</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/DesignTime/default.aspx">DesignTime</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/Data/default.aspx">Data</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/Visualization/default.aspx">Visualization</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/calcengine/default.aspx">calcengine</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/CalcEngineInput/default.aspx">CalcEngineInput</category></item><item><title>Coloring a Map with Data</title><link>http://www.componentart.com/community/blogs/chris/archive/2010/11/22/coloring-a-map-with-data.aspx</link><pubDate>Mon, 22 Nov 2010 16:46:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:103388</guid><dc:creator>Chris</dc:creator><slash:comments>3</slash:comments><description>This tutorial will walk you through the steps necessary to get a ComponentArt DataVisualization for Silverlight Map control up and running. 1. Create a new Project In Visual Studio, create a new &amp;quot;Silverlight Application&amp;quot; project. Call it &amp;quot;MyFirstMap&amp;quot;. Use the default Web site settings. Visual Studio will generate the Silverlight and .Web projects, and should open up the MainPage.xaml. 2. Adding the required Assembly Reference A quick way to add the required reference is to simply...(&lt;a href="http://www.componentart.com/community/blogs/chris/archive/2010/11/22/coloring-a-map-with-data.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=103388" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/chris/archive/tags/Color/default.aspx">Color</category><category domain="http://www.componentart.com/community/blogs/chris/archive/tags/DV/default.aspx">DV</category><category domain="http://www.componentart.com/community/blogs/chris/archive/tags/Data/default.aspx">Data</category><category domain="http://www.componentart.com/community/blogs/chris/archive/tags/DataVisualization/default.aspx">DataVisualization</category><category domain="http://www.componentart.com/community/blogs/chris/archive/tags/Map/default.aspx">Map</category><category domain="http://www.componentart.com/community/blogs/chris/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Visualizing Toronto's 2010 Mayoral Election with ComponentArt Data Visualization</title><link>http://www.componentart.com/community/blogs/phil/archive/2010/10/28/visualizing-toronto-s-2010-mayoral-election-with-componentart-data-visualization.aspx</link><pubDate>Thu, 28 Oct 2010 19:16:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:103017</guid><dc:creator>phil</dc:creator><slash:comments>22</slash:comments><description>&lt;p&gt;&lt;span class="Apple-style-span" style="widows:2;text-transform:none;text-indent:0px;border-collapse:separate;font:14px arial, sans-serif;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;-webkit-text-decorations-in-effect:none;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;span class="Apple-style-span" style="border-collapse:collapse;font-size:13px;"&gt;&lt;span class="Apple-converted-space"&gt;T&lt;span class="Apple-style-span" style="widows:2;text-transform:none;text-indent:0px;border-collapse:separate;font:14px arial, sans-serif;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;-webkit-text-decorations-in-effect:none;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;span class="Apple-style-span" style="border-collapse:collapse;font-size:13px;"&gt;he City of Toronto has released their&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;a target="_blank" href="http://www.toronto.ca/elections/results/results_2010.htm"&gt;Official Election Results&lt;/a&gt;. ComponentArt being a Toronto based company I thought this data offered a&amp;nbsp;great way&amp;nbsp;to showcase our Map control and present an informative and intuitive view of the data.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="Apple-style-span" style="widows:2;text-transform:none;text-indent:0px;border-collapse:separate;font:14px arial, sans-serif;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;-webkit-text-decorations-in-effect:none;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;span class="Apple-style-span" style="border-collapse:collapse;font-size:13px;"&gt;&lt;span class="Apple-converted-space"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="Apple-style-span" style="widows:2;text-transform:none;text-indent:0px;border-collapse:separate;font:14px arial, sans-serif;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;-webkit-text-decorations-in-effect:none;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;span class="Apple-style-span" style="border-collapse:collapse;font-size:13px;"&gt;&lt;span class="Apple-converted-space"&gt;
&lt;p&gt;&lt;span class="Apple-style-span" style="widows:2;text-transform:none;text-indent:0px;border-collapse:separate;font:14px arial, sans-serif;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;-webkit-text-decorations-in-effect:none;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;span class="Apple-style-span" style="border-collapse:collapse;font-size:13px;"&gt;&lt;span class="Apple-converted-space"&gt;&lt;a target="_blank" href="http://dv.componentart.com/toronto2010/"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/0804.Toronto2010Screen.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="Apple-style-span" style="widows:2;text-transform:none;text-indent:0px;border-collapse:separate;font:14px arial, sans-serif;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;-webkit-text-decorations-in-effect:none;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;span class="Apple-style-span" style="border-collapse:collapse;font-size:13px;"&gt;&lt;span class="Apple-converted-space"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="Apple-style-span" style="widows:2;text-transform:none;text-indent:0px;border-collapse:separate;font:14px arial, sans-serif;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;-webkit-text-decorations-in-effect:none;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;span class="Apple-style-span" style="border-collapse:collapse;font-size:13px;"&gt;&lt;span class="Apple-converted-space"&gt;
&lt;p&gt;&lt;span class="Apple-style-span" style="widows:2;text-transform:none;text-indent:0px;border-collapse:separate;font:14px arial, sans-serif;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;-webkit-text-decorations-in-effect:none;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;span class="Apple-style-span" style="border-collapse:collapse;font-size:13px;"&gt;&lt;span class="Apple-converted-space"&gt;&lt;a target="_blank" href="http://dv.componentart.com/toronto2010/"&gt;Visualizing Toronto&amp;#39;s 2010 Mayoral Election&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="Apple-style-span" style="widows:2;text-transform:none;text-indent:0px;border-collapse:separate;font:14px arial, sans-serif;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;-webkit-text-decorations-in-effect:none;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;span class="Apple-style-span" style="border-collapse:collapse;font-size:13px;"&gt;&lt;span class="Apple-converted-space"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="Apple-style-span" style="widows:2;text-transform:none;text-indent:0px;border-collapse:separate;font:14px arial, sans-serif;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;-webkit-text-decorations-in-effect:none;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;span class="Apple-style-span" style="border-collapse:collapse;font-size:13px;"&gt;&lt;span class="Apple-converted-space"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="Apple-style-span" style="widows:2;text-transform:none;text-indent:0px;border-collapse:separate;font:14px arial, sans-serif;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;-webkit-text-decorations-in-effect:none;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;span class="Apple-style-span" style="border-collapse:collapse;font-size:13px;"&gt;&lt;span class="Apple-converted-space"&gt;&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/0804.Toronto2010Screen.png"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://dv.componentart.com/toronto2010/"&gt;&lt;span class="Apple-style-span" style="widows:2;text-transform:none;text-indent:0px;border-collapse:separate;font:14px arial, sans-serif;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;-webkit-text-decorations-in-effect:none;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;span class="Apple-style-span" style="border-collapse:collapse;font-size:13px;"&gt;&lt;span class="Apple-converted-space"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="widows:2;text-transform:none;text-indent:0px;border-collapse:separate;font:14px arial, sans-serif;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;-webkit-text-decorations-in-effect:none;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;span class="Apple-style-span" style="border-collapse:collapse;font-size:13px;"&gt;&lt;span class="Apple-converted-space"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="Apple-style-span" style="widows:2;text-transform:none;text-indent:0px;border-collapse:separate;font:14px arial, sans-serif;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;-webkit-text-decorations-in-effect:none;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;span class="Apple-style-span" style="border-collapse:collapse;font-size:13px;"&gt;&lt;span class="Apple-converted-space"&gt;&lt;a href="http://dv.componentart.com/toronto2010/"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=103017" width="1" height="1"&gt;</description></item><item><title>ComponentArt DataVisualization &amp; Visual Studio Design-Time</title><link>http://www.componentart.com/community/blogs/phil/archive/2010/10/26/componentart-datavisualization-amp-visual-studio-design-time.aspx</link><pubDate>Tue, 26 Oct 2010 18:59:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:102985</guid><dc:creator>phil</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;With the full release of ComponentArt DataVisualization now in the hands of the public I thought I&amp;#39;d take a minute and talk about some of the features we&amp;#39;ve added in regards to Visual Studio Design-Time integration. Visual Studio 2010 comes with unprecedented options as far as design-time is concerned and we&amp;#39;ve tried to take advantage of them all. Many tasks which would previously require XAML editing, endless searching through the Visual Studio Property Grid&amp;nbsp;or altering existing demo projects for inclusion can now be accomplished quickly and easily through our design-time adorners.&lt;/p&gt;
&lt;h3&gt;Using the ToolBox&lt;/h3&gt;
&lt;p&gt;Visual Studio users are probably already familiar with the Visual Studio control ToolBox. Once a project has been created it can be access through the File Menu &amp;gt; View &amp;gt; Toolbox. It contains controls which are available for use with the page or form which is currently being edited, Silverlight or WPF projects for example.&lt;/p&gt;
&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/0257.CommonConcepts_5F00_DesignTime_5F00_01.PNG"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/0257.CommonConcepts_5F00_DesignTime_5F00_01.PNG" border="0" alt="" /&gt;&lt;/a&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If one has installed ComponentArt DataVisualization for the current platform one will see a section dedicated to these controls. They can be placed on your page or form simply by dragging and dropping the icon onto the design surface. Alternately one can select the control by clicking on the icon, and then click on the design surface to drag a rectangle to which the new control should size*.&lt;i&gt;*Not all controls will adhere to this sizing practice&lt;/i&gt;&lt;/p&gt;
&lt;h3&gt;Using Adorners&lt;/h3&gt;
&lt;p&gt;Once a ComponentArt DataVisualization control has been placed on the design surface most of it&amp;#39;s common options can be configured easily through it&amp;#39;s design-time adorner. This is a small rounded button which appears at the top right of the control and contains the control icon in it.&lt;/p&gt;
&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/2308.CommonConcepts_5F00_DesignTime_5F00_02.PNG"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/2308.CommonConcepts_5F00_DesignTime_5F00_02.PNG" border="0" alt="" /&gt;&lt;/a&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Rolling the mouse over this adorner will cause it to expand and reveal the control type. Clicking on the adorner will reveal the control&amp;#39;s configuration panel.&lt;/p&gt;
&lt;h3&gt;Quick Start&lt;/h3&gt;
&lt;p&gt;Clicking on the adorner icon will reveal the initial panel for the control being designed. This initial panel has a number of sections, the first being the &lt;b&gt;Quick Start&lt;/b&gt; section.&lt;/p&gt;
&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/6661.CommonConcepts_5F00_DesignTime_5F00_03.PNG"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/6661.CommonConcepts_5F00_DesignTime_5F00_03.PNG" border="0" alt="" /&gt;&lt;/a&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Within the Quick Start is everything one needs to ready a control instance for runtime.&lt;/p&gt;
&lt;h3&gt;Start from Gallery&lt;/h3&gt;
&lt;p&gt;For most DataVisualization controls the first option in the Quick Start section will be &lt;b&gt;Start from Gallery&lt;/b&gt; this allows one to select a starting point from the most popular control settings, many of these templates are populated directly from our extensive demos. Once selected a template will replace the entire control instance on the design surface, it is for this reason that &lt;b&gt;Start from Gallery&lt;/b&gt; should be one&amp;#39;s first step in the design process.&lt;/p&gt;
&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/5504.CommonConcepts_5F00_DesignTime_5F00_04.PNG"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/5504.CommonConcepts_5F00_DesignTime_5F00_04.PNG" border="0" alt="" /&gt;&lt;/a&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Look and Feel&lt;/h3&gt;
&lt;p&gt;The second section in most designers is the &lt;b&gt;Look and Feel&lt;/b&gt; section. This contains relevant options in regards to Themes and Palettes.&lt;/p&gt;
&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/3343.CommonConcepts_5F00_DesignTime_5F00_05.PNG"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/3343.CommonConcepts_5F00_DesignTime_5F00_05.PNG" border="0" alt="" /&gt;&lt;/a&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Themes&lt;/b&gt; define the chrome of your dashboard - corner radius, line thickness, text color, margins are all controlled by the Theme. Unlike Templates, selecting a Theme from the Theme Gallery will not overwrite the control instance but simply set the Theme and ThemeVariant properties of the control. The Theme and ThemeVariant properties are also inherited and overridable.&lt;/p&gt;
&lt;p&gt;Much like Themes, &lt;b&gt;Palettes&lt;/b&gt; are inherited and overridable. Palettes specify the color sets used to render data in the DataVisualization controls, whether it is a RadialGauge, an XYChart or a Map, Palettes harmonize your dashboard as each control in the suite is given careful attention when defining a new Palette for it.&lt;/p&gt;
&lt;h3&gt;Other Control Settings&lt;/h3&gt;
&lt;p&gt;While the Quick Start section can help one design a control instance which is ready for run time in short order, there are almost always additional settings. The most popular additional settings can be found categorized within this section of the designer.&lt;/p&gt;
&lt;h3&gt;Help&lt;/h3&gt;
&lt;p&gt;The Help section of the design time adorner offers links to our online forums as well as documentation.&lt;/p&gt;
&lt;h3&gt;Licensing&lt;/h3&gt;
&lt;p&gt;The final section in our design time adorner is the Licensing section. This section allows one to quickly find the license status of the current workstation as well as license the current project, or visit our site in order to purchase a license.&lt;/p&gt;
&lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/5078.CommonConcepts_5F00_DesignTime_5F00_06.PNG"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/5078.CommonConcepts_5F00_DesignTime_5F00_06.PNG" border="0" alt="" /&gt;&lt;/a&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Selecting &lt;b&gt;License Active Project&lt;/b&gt; will launch the ComponentArt License Manager in the background, export a License File ( .LIC ) and add that License File as an Embedded Resource in the current project. Adding a valid License File to the current project will prevent the controls from displaying the unlicensed watermark at runtime. Licensing projects for deployment has always been&amp;nbsp;a sticky point of control suites, no longer,&amp;nbsp;it couldn&amp;#39;t be easier,&amp;nbsp;just takes a single click&amp;nbsp;and it&amp;#39;s ready for launch.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=102985" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/Design-Time/default.aspx">Design-Time</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/DesignTime/default.aspx">DesignTime</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/ComponentArt/default.aspx">ComponentArt</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/Data/default.aspx">Data</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/Adorner/default.aspx">Adorner</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/DataVisualization/default.aspx">DataVisualization</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/Visualization/default.aspx">Visualization</category></item><item><title>Dashboards Made Easy - The DrillDownManager Control</title><link>http://www.componentart.com/community/blogs/filip/archive/2010/03/05/dashboards-made-easy-the-drilldownmanager-control.aspx</link><pubDate>Fri, 05 Mar 2010 20:23:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:98468</guid><dc:creator>filipK</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The usability and value of most modern dashboards becomes seriously questioned if the data shown is fixed, and the user does not have the ability to zoom in or drill-down into the data to a more detailed view. &amp;nbsp;Implementing this functionality can sometimes be a time consuming task - a lot of plumbing code is needed to connect all the components and handle the events to interpret the drill-down actions and the parameters. &amp;nbsp;The whole purpose of the&amp;nbsp;&lt;a href="http://docs.componentart.com/default.aspx?content=ComponentArt.Web.UI.Silverlight.server/ComponentArt.Silverlight.UI.Common~ComponentArt.Silverlight.Data.DrillDownManager.html"&gt;DrillDownManager&lt;/a&gt; is to make this task simple for the developer.&lt;/p&gt;
&lt;h3&gt;The Concept&lt;/h3&gt;
&lt;p&gt;The idea behind the control is the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The page will contain an instance of the DrillDownManager control which will define all the available levels the end user can drill into. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;Each level will have a data source associated with it. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;Every control displaying the current data will bind to the DrillDownManager&amp;#39;s DataContext property. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;Actions such as drill-down and drill-back will all be handled through the DrillDownManager, which will notify all the managed controls of the actions currently taking place.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The&amp;nbsp;&lt;a href="http://silverlight.componentart.com/#SimpleDrillDown"&gt;Simple Drill-Down demo&lt;/a&gt;&amp;nbsp;is a perfect example of this concept in action. &amp;nbsp;Here we use the &lt;a href="http://www.componentart.com/community/blogs/filip/archive/2010/03/04/simplifying-the-wcfservice-connection-the-wcfservicedataprovider-control.aspx"&gt;WcfServiceDataProvider&lt;/a&gt; control to configure the data source for each of our four levels. &amp;nbsp;Even though we&amp;#39;ll be using the same WCF Service for each of our levels, we&amp;#39;ll be using a different method from the service for each level. &amp;nbsp;Because of this it is easiest to create four instances of the&amp;nbsp;WcfServiceDataProvider, like we do in the example:&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;CAdata&lt;/span&gt;:&lt;span style="color:#800000;"&gt;WcfServiceDataProvider&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x&lt;/span&gt;:&lt;span style="color:#ff0000;"&gt;Key&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Service1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;IsInitialLoadEnabled&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;EndPointConfigurationName&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;CustomBinding_SalesDataService&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;MethodName&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;GetAllData&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ObjectTypeRef&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;{StaticResource SalesDataServiceClient}&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;CAdata&lt;/span&gt;:&lt;span style="color:#800000;"&gt;WcfServiceDataProvider&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x&lt;/span&gt;:&lt;span style="color:#ff0000;"&gt;Key&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Service2&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;IsInitialLoadEnabled&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;EndPointConfigurationName&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;CustomBinding_SalesDataService&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;MethodName&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;GetYearlyDataFromDecade&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ObjectTypeRef&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;{StaticResource SalesDataServiceClient}&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;CAdata&lt;/span&gt;:&lt;span style="color:#800000;"&gt;WcfServiceDataProvider&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x&lt;/span&gt;:&lt;span style="color:#ff0000;"&gt;Key&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Service3&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;IsInitialLoadEnabled&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;EndPointConfigurationName&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;CustomBinding_SalesDataService&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;MethodName&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;GetMonthlyData&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ObjectTypeRef&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;{StaticResource SalesDataServiceClient}&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;CAdata&lt;/span&gt;:&lt;span style="color:#800000;"&gt;WcfServiceDataProvider&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x&lt;/span&gt;:&lt;span style="color:#ff0000;"&gt;Key&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Service4&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;IsInitialLoadEnabled&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;EndPointConfigurationName&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;CustomBinding_SalesDataService&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;MethodName&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;GetDailyData&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ObjectTypeRef&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;{StaticResource SalesDataServiceClient}&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Now we can instantiate the DrillDownManager to use these instances as data sources for each of its levels:&lt;/p&gt;
&lt;pre class="codeblock"&gt;&amp;lt;CAdata:DrillDownManager x:Name=&amp;quot;&lt;span style="color:#8b0000;"&gt;DDManager&lt;/span&gt;&amp;quot; ManagedControls=&amp;quot;&lt;span style="color:#8b0000;"&gt;Chart1&lt;/span&gt;&amp;quot;&amp;gt;
	&amp;lt;CAdata:DrillDownManager.Levels&amp;gt;
	    &amp;lt;CAdata:DrillDownLevel x:Name=&amp;quot;&lt;span style="color:#8b0000;"&gt;RootLevel&lt;/span&gt;&amp;quot; DataProvider=&amp;quot;&lt;span style="color:#8b0000;"&gt;{StaticResource Service1}&lt;/span&gt;&amp;quot; /&amp;gt;
	    &amp;lt;CAdata:DrillDownLevel x:Name=&amp;quot;&lt;span style="color:#8b0000;"&gt;Decade&lt;/span&gt;&amp;quot; DataProvider=&amp;quot;&lt;span style="color:#8b0000;"&gt;{StaticResource Service2}&lt;/span&gt;&amp;quot; /&amp;gt;
	    &amp;lt;CAdata:DrillDownLevel x:Name=&amp;quot;&lt;span style="color:#8b0000;"&gt;Year&lt;/span&gt;&amp;quot; DataProvider=&amp;quot;&lt;span style="color:#8b0000;"&gt;{StaticResource Service3}&lt;/span&gt;&amp;quot; /&amp;gt;
	    &amp;lt;CAdata:DrillDownLevel x:Name=&amp;quot;&lt;span style="color:#8b0000;"&gt;Month&lt;/span&gt;&amp;quot; DataProvider=&amp;quot;&lt;span style="color:#8b0000;"&gt;{StaticResource Service4}&lt;/span&gt;&amp;quot; /&amp;gt;
	&amp;lt;/CAdata:DrillDownManager.Levels&amp;gt;
&amp;lt;/CAdata:DrillDownManager&amp;gt;&lt;/pre&gt;
&lt;p&gt;We can now instantiate the Chart control to bind to our DrillDownManager instance&amp;#39;s DataContext property in order to automatically update the chart when the data is changed. &amp;nbsp;Our chart code can look like this:&lt;/p&gt;
&lt;pre class="codeblock"&gt;&amp;lt;Chart:Chart x:Name=&amp;quot;&lt;span style="color:#8b0000;"&gt;Chart1&lt;/span&gt;&amp;quot; ChartKind=&amp;quot;&lt;span style="color:#8b0000;"&gt;Rectangle&lt;/span&gt;&amp;quot; XValue=&amp;quot;&lt;span style="color:#8b0000;"&gt;Date&lt;/span&gt;&amp;quot; Height=&amp;quot;&lt;span style="color:#8b0000;"&gt;480&lt;/span&gt;&amp;quot; Width=&amp;quot;&lt;span style="color:#8b0000;"&gt;640&lt;/span&gt;&amp;quot; EnableAnimation=&amp;quot;&lt;span style="color:#8b0000;"&gt;True&lt;/span&gt;&amp;quot;
		MouseLeftButtonDownOnDataPoint=&amp;quot;&lt;span style="color:#8b0000;"&gt;MyChart_MouseLeftButtonDownOnDataPoint&lt;/span&gt;&amp;quot;
		DataSource=&amp;quot;&lt;span style="color:#8b0000;"&gt;{Binding DataContext, ElementName=DDManager}&lt;/span&gt;&amp;quot; 
		DrillDownTransitionDuration=&amp;quot;&lt;span style="color:#8b0000;"&gt;0:0:1&lt;/span&gt;&amp;quot; BackUpTransitionDuration=&amp;quot;&lt;span style="color:#8b0000;"&gt;0:0:1&lt;/span&gt;&amp;quot;&amp;gt;

    &amp;lt;Chart:Chart.DataSeries &amp;gt;
	&amp;lt;Chart:Series Id=&amp;quot;&lt;span style="color:#8b0000;"&gt;S0&lt;/span&gt;&amp;quot; YValue=&amp;quot;&lt;span style="color:#8b0000;"&gt;Sales&lt;/span&gt;&amp;quot; MarkerStyle=&amp;quot;&lt;span style="color:#8b0000;"&gt;Circle&lt;/span&gt;&amp;quot; /&amp;gt;
    &amp;lt;/Chart:Chart.DataSeries&amp;gt;
&amp;lt;/Chart:Chart&amp;gt;&lt;/pre&gt;
&lt;p&gt;Note also that in addition to binding the DataSource and setting the drill down and back up animation transition durations, we also register a handler for the&amp;nbsp;MouseLeftButtonDownOnDataPoint event. &amp;nbsp;This is where we want to initiate the drill down action. &amp;nbsp;The idea, as shown in the&amp;nbsp;&amp;nbsp;&lt;a href="http://silverlight.componentart.com/#SimpleDrillDown"&gt;Simple Drill-Down demo&lt;/a&gt;,&amp;nbsp;is that when a user clicks on a data point, we show a more granular view of that data. &amp;nbsp;Our event handler from the demo looks like this:&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; MyChart_MouseLeftButtonDownOnDataPoint(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, SelectedDataPointEventArgs e)
{
    DDManager.DrillDown(e.DataPointContext.DataPoint.X);
}&lt;/pre&gt;
&lt;p&gt;This calls the DrillDownMnager and tells it to go into the next level, passing the DataPoint&amp;#39;s X value to the call. &amp;nbsp;The DrillDownManager will move to the next level and refresh that level&amp;#39;s data with the provided parameter being passed directly to the method in the WCF Service that is registered as the data source of this level. &amp;nbsp;As such we must make sure that the method in the WCF service registered with each level, can take the type of parameter being passed. &amp;nbsp;In our case it is the X value of the DataPoints in the previous level.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;We can go back up a level simply by calling the DrillUp() method on the DrillDownManager instance. &amp;nbsp;In the Simple Drill-Down demo, this is done through the BreadCrumb control, which also makes use of DrillDownManagers Levels and CurrentLevel properties to show how deep we have drilled down. &amp;nbsp;Additionally, we can bind any other control we have on the page to the DataContext property of the DrillDownManager, and it will update automatically when the level changes.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=98468" width="1" height="1"&gt;</description></item><item><title>Simplifying the WCF Service Connection  - The WcfServiceDataProvider control</title><link>http://www.componentart.com/community/blogs/filip/archive/2010/03/04/simplifying-the-wcfservice-connection-the-wcfservicedataprovider-control.aspx</link><pubDate>Thu, 04 Mar 2010 15:25:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:98460</guid><dc:creator>filipK</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;WcfServiceDataProvider is a handy new control introduced to the &lt;a href="http://www.componentart.com/products/silverlight/"&gt;Silverlight&lt;/a&gt; and &lt;a href="http://www.componentart.com/products/wpf/"&gt;WPF&lt;/a&gt; suite of controls in the 2010.1 release. &amp;nbsp;The&amp;nbsp;&lt;a href="http://docs.componentart.com/default.aspx?content=ComponentArt.Web.UI.Silverlight.server/ComponentArt.Silverlight.UI.Common~ComponentArt.Silverlight.Data.WcfServiceDataProvider.html"&gt;control&lt;/a&gt;&amp;nbsp;is somewhat different from most of the other controls. &amp;nbsp;It has no visual aspect to it (hence the pictureless blog post) and its sole purpose is to simplify the task of connecting and retrieving data from an existing WCF Data Service and make the data&amp;nbsp;available&amp;nbsp;to other controls on the page.&lt;/p&gt;
&lt;p&gt;The idea is quite simple:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instantiate the control in XAML by giving it the end-point configuration name of the WCF service, the service client&amp;#39;s type and the method in the service used to retrieve the data.&lt;/li&gt;
&lt;li&gt;Updating the MethodParameters property will automatically call the registered method on the WCF service with the provided parameters, refreshing the data. &amp;nbsp;(Alternatively, you can just call Refresh() to update the data with the same parameters).&lt;/li&gt;
&lt;li&gt;You can bind to the&amp;nbsp;WcfServiceDataProvider&amp;#39;s Data property to get the latest data retrieved from the web-service. &amp;nbsp;(In WPF, binding directly to the&amp;nbsp;WcfServiceDataProvider&amp;nbsp;instance will have the same effect).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Example&lt;/h3&gt;
&lt;p&gt;The &lt;a href="http://silverlight.componentart.com/#SimpleDrillDown"&gt;Simple Drill-Down demo&lt;/a&gt; makes extensive use of this control. &amp;nbsp;In the Silverlight version, the&amp;nbsp;WcfServiceDataProvider is instantiated like this:&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;svc&lt;/span&gt;:&lt;span style="color:#800000;"&gt;SalesDataServiceClient&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x&lt;/span&gt;:&lt;span style="color:#FF0000;"&gt;Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;SalesDataServiceClient&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;CAdata&lt;/span&gt;:&lt;span style="color:#800000;"&gt;WcfServiceDataProvider&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;IsInitialLoadEnabled&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x&lt;/span&gt;:&lt;span style="color:#FF0000;"&gt;Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Service1&amp;quot;&lt;/span&gt; 
        &lt;span style="color:#FF0000;"&gt;EndPointConfigurationName&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;CustomBinding_SalesDataService&amp;quot;&lt;/span&gt; 
        &lt;span style="color:#FF0000;"&gt;MethodName&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;GetAllData&amp;quot;&lt;/span&gt; 
        &lt;span style="color:#FF0000;"&gt;ObjectTypeRef&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource SalesDataServiceClient}&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;The easiest way to look up the Service Client type is to use intellisense in a C# code file. &amp;nbsp;Find the type by typing in the WebService class followed by a &amp;quot;.&amp;quot; to look for the client type definition in the provided options. &amp;nbsp;Then instantiate the client giving it a type, and use this reference to set the ObjectTypeRef property in the control. &amp;nbsp;The&amp;nbsp;EndPointConfigurationName can be looked up in the ServiceReferences.ClientConfig file in the project.&lt;/p&gt;
&lt;p&gt;In WPF, the service client type can be looked up in the same way, but we can specify it directly in the control. &amp;nbsp;The code will look like this:&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;CAdata&lt;/span&gt;:&lt;span style="color:#800000;"&gt;WcfServiceDataProvider&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;IsInitialLoadEnabled&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x&lt;/span&gt;:&lt;span style="color:#ff0000;"&gt;Key&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Service1&amp;quot;&lt;/span&gt; 
        &lt;span style="color:#ff0000;"&gt;EndPointConfigurationName&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;BasicHttpBinding_SalesDataService&amp;quot;&lt;/span&gt; 
        &lt;span style="color:#ff0000;"&gt;MethodName&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;GetAllData&amp;quot;&lt;/span&gt; 
        &lt;span style="color:#ff0000;"&gt;ObjectType&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;{x:Type svc:SalesDataServiceClient}&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;The&amp;nbsp;EndPointConfigurationName can be looked up in the app.config file in the project.&lt;/p&gt;
&lt;p&gt;The only thing that&amp;#39;s needed to be done in the code behind is set the Remote address of the WCF Service. &amp;nbsp;Then we can finally set some parameters and issue the first refresh call to get our data. &amp;nbsp;This should be done in the Loaded handler of the UserControl:&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; remoteAddress = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Uri(Application.Current.Host.Source, &amp;quot;&lt;span style="color:#8b0000;"&gt;../SalesDataService.svc&lt;/span&gt;&amp;quot;).AbsoluteUri;

WcfServiceDataProvider dp = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Resources[&amp;quot;&lt;span style="color:#8b0000;"&gt;Service1&lt;/span&gt;&amp;quot;] &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; WcfServiceDataProvider;
dp.DeferRefresh();
dp.RemoteAddress = remoteAddress;
dp.MethodParameters.Clear();
dp.MethodParameters.Add(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; DateTime(2009, 1, 1));
dp.MethodParameters.Add(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; DateTime(2010, 1, 1));
dp.Refresh();&lt;/pre&gt;
&lt;p&gt;Finally, to make use of this data, we can bind a control to the Data property of the&amp;nbsp;WcfServiceDataProvider instance. &amp;nbsp;The code below binds a Chart control to the retrieved data:&lt;/p&gt;
&lt;pre class="codeblock"&gt;&amp;lt;Chart:Chart x:Name=&amp;quot;&lt;span style="color:#8b0000;"&gt;Chart1&lt;/span&gt;&amp;quot; ChartKind=&amp;quot;&lt;span style="color:#8b0000;"&gt;Rectangle&lt;/span&gt;&amp;quot; XValue=&amp;quot;&lt;span style="color:#8b0000;"&gt;Date&lt;/span&gt;&amp;quot;  
             DataSource=&amp;quot;&lt;span style="color:#8b0000;"&gt;{Binding Data, Source={StaticResource Service1}}&lt;/span&gt;&amp;quot;
             ...&amp;gt;

&amp;lt;/Chart:Chart&amp;gt;&lt;/pre&gt;
&lt;p&gt;This will cause the chart to auto update each time the&amp;nbsp;WcfServiceDataProvider refreshes the data.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=98460" width="1" height="1"&gt;</description></item><item><title>ItemFlow: Live XAML Content</title><link>http://www.componentart.com/community/blogs/phil/archive/2010/02/23/itemflow-live-xaml-content.aspx</link><pubDate>Tue, 23 Feb 2010 18:33:00 GMT</pubDate><guid isPermaLink="false">9ff84d31-80d1-44bd-98c8-eba0322b9d03:98250</guid><dc:creator>phil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp; &lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/1106.ItemFlow_5F00_Form.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/1106.ItemFlow_5F00_Form.png" border="0" style="border:1px solid black;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Along with ComponentArt UI Framework&amp;nbsp;2010.1 for Silverlight and WPF comes fantastic new funtionality for our ItemFlow control, the ability to utilize live XAML content within ItemFlowItems. This brings to bear endless possiblities, anything from a simple form wizard spanning multiple ItemFlowItems to nesting an entire ItemFlow within an ItemFlowItem. &lt;br /&gt;Previously ItemFlow utilized a technique of overlapping skewed images in order to attain a perspective transform. Silverlight 3.0 has introduced these types of transforms natively both with 3D Matrix Transforms and the ProjectionPlane along with Writeable Bitmaps. These additional features allow ItemFlow to properly transform any content, not just images.&lt;/p&gt;
&lt;pre class="codeblock"&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ComponentArt&lt;/span&gt;:&lt;span style="color:#800000;"&gt;ItemFlow&lt;/span&gt; 
	 &lt;span style="color:#FF0000;"&gt;x&lt;/span&gt;:&lt;span style="color:#FF0000;"&gt;Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;myItemFlow&amp;quot;&lt;/span&gt;
          &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;
          &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;800&amp;quot;&lt;/span&gt;
          &lt;span style="color:#FF0000;"&gt;ItemHeight&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;200&amp;quot;&lt;/span&gt;
          &lt;span style="color:#FF0000;"&gt;ItemWidth&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;200&amp;quot;&lt;/span&gt;
          &lt;span style="color:#FF0000;"&gt;ShowShading&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;False&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ComponentArt&lt;/span&gt;:&lt;span style="color:#800000;"&gt;ItemFlow.Items&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ComponentArt&lt;/span&gt;:&lt;span style="color:#800000;"&gt;ItemFlowItem&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ComponentArt&lt;/span&gt;:&lt;span style="color:#800000;"&gt;ItemFlowItem.ItemTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
       &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
         &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
           &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Border&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;200&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;200&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;BorderBrush&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Black&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;BorderThickness&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;2&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
             &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;HorizontalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Border&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
          &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ComponentArt&lt;/span&gt;:&lt;span style="color:#800000;"&gt;ItemFlowItem.ItemTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ComponentArt&lt;/span&gt;:&lt;span style="color:#800000;"&gt;ItemFlowItem&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ComponentArt&lt;/span&gt;:&lt;span style="color:#800000;"&gt;ItemFlow.Items&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585;"&gt;ComponentArt&lt;/span&gt;:&lt;span style="color:#800000;"&gt;ItemFlow&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;

&lt;/pre&gt;
&lt;p&gt;This example illustrates how XAML content can be used within an ItemTemplate.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;a href="http://www.componentart.com/community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/8765.ItemFlow_5F00_HelloWorld.png"&gt;&lt;img src="http://www.componentart.com/community/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/phil/8765.ItemFlow_5F00_HelloWorld.png" style="border:1px solid black;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;While this example does have the effect of adding a reflection to your XAML, ItemFlow requires a couple more items in order to shine. Tranditional ImageSource based items can be used along with items utilizing ItemTemplates, however&amp;nbsp;an ItemTemplate specified for an item will override ImageSource.&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Focus&lt;/h3&gt;
&lt;p&gt;When using ItemFlow with XAML content focus quickly becomes an issue. Depending on one&amp;#39;s implementation they may require ItemFlow to prevent focus on XAML elements which are not contained within the currently&amp;nbsp;selected ItemFlowItem. Take for instance&amp;nbsp;the form wizard in the image at the top of this post, TextBoxes in flanking ItemFlowItems should not react to mouse clicks, instead these clicks should bring the flanking ItemFlowItem to the center where it can then be edited. This issue is solved by ItemFlow&amp;#39;s shading, setting ShowShading=&amp;quot;True&amp;quot; ( the default ) will prevent mouse interaction with flanking ItemFlowItems. When ShowShading is set to &amp;quot;False&amp;quot; the shading which overlaps items will not be shown and therefore will not prevent mouse events from interacting with XAML elements.&lt;/p&gt;
&lt;h3&gt;Loading&lt;/h3&gt;
&lt;p&gt;Another issue which arises along with XAML content is the question of load events and item sizing. ItemFlow is not aware of the current state of XAML content elements loaded into it&amp;#39;s ItemTemplates. It is up to the developer to size the ItemWidth and ItemHeight properly and in some cases call ItemFlow.Initialize() from Loaded events of relevant elements.&lt;/p&gt;
&lt;h3&gt;Accessing Elements&lt;/h3&gt;
&lt;p&gt;XAML content within ItemFlowItems would not be of much use if we could not access elements in order to retrieve values, or apply changes. Finding elements within DataTemplates is not as simple as one might hope, however we have included a method in our ComponentArt.Silverlight.UI.Utils namespace which helps with this endeavor:&lt;/p&gt;
&lt;pre class="codeblock"&gt;TextBlock myHelloWorldBlock = (TextBlock)ComponentArt.Silverlight.UI.Utils.Visual.FindElementByName(myItemFlow, &amp;quot;&lt;span style="color:#8B0000;"&gt;helloWorldBlock&lt;/span&gt;&amp;quot;);

&lt;/pre&gt;
&lt;p&gt;Elements may also register themselves with a pointer through their own Loaded events, or any other event in which they are a sender.&lt;/p&gt;
&lt;h3&gt;Final Notes&lt;/h3&gt;
&lt;p&gt;Although it may take some tweaking of settings and positions. Combining&amp;nbsp;the techniques described above to create a unique ItemFlow implementation can result in some very interesting innovations.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/community/aggbug.aspx?PostID=98250" width="1" height="1"&gt;</description><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/Xaml/default.aspx">Xaml</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/WPF/default.aspx">WPF</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/ItemFlow/default.aspx">ItemFlow</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/ItemFlowItem/default.aspx">ItemFlowItem</category><category domain="http://www.componentart.com/community/blogs/phil/archive/tags/Silverlight/default.aspx">Silverlight</category></item></channel></rss>