<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Yan Wang's Blog : Prism</title><link>http://blogs.technet.com/yanwang/archive/tags/Prism/default.aspx</link><description>Tags: Prism</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>A sample solution kit to demonstrate WPF &amp; SQL Server Data Services Technologies-Part 2</title><link>http://blogs.technet.com/yanwang/archive/2008/09/10/a-sample-solution-kit-to-demonstrate-wpf-sql-server-data-services-technologies-part-2.aspx</link><pubDate>Wed, 10 Sep 2008 05:18:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3121755</guid><dc:creator>yanwang</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/yanwang/comments/3121755.aspx</comments><wfw:commentRss>http://blogs.technet.com/yanwang/commentrss.aspx?PostID=3121755</wfw:commentRss><description>&lt;P&gt;&lt;FONT size=4&gt;&lt;U&gt;The&amp;nbsp;&lt;STRONG&gt;WCFServicesAgent &lt;/STRONG&gt;Project has 2 functionalities:&lt;/U&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;1.Act as &amp;nbsp;proxy client for Workshop Service which has exposed below two&amp;nbsp; methods:-&lt;/P&gt;
&lt;P&gt;--------------------------------------------------------------&amp;nbsp;&lt;/P&gt;
&lt;P&gt;[OperationContract]&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;Entity&amp;gt; &lt;STRONG&gt;QuEntityList&lt;/STRONG&gt;(string kind);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;[OperationContract]&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CompositeType&amp;nbsp; &lt;STRONG&gt;GetBlob&lt;/STRONG&gt;(string entityid, string accepttype);&lt;/P&gt;
&lt;P&gt;-----------------------------------------------------------------&lt;/P&gt;
&lt;P&gt;2.&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;Xmlhelper.cs&lt;/STRONG&gt; class : this is&amp;nbsp; to fetch workshop data from SSDS and cache in client local file folder c:\workshopdata, it has implemented below 2 methods:-&lt;/P&gt;
&lt;P&gt;public static bool CreatXml_WSList(string _savePath){}&lt;BR&gt;public static bool CreatXml_WSData(string _path, string _key)&lt;/P&gt;
&lt;P&gt;So, by default, &lt;STRONG&gt;DPEMS &lt;/STRONG&gt;Project will access the workshop data from local file&amp;nbsp;cache instead of SSDS for most efficiency. To refresh the local cache, you can open &lt;STRONG&gt;Main.Xaml.cs&lt;/STRONG&gt; of &lt;STRONG&gt;DPEMS Project&amp;nbsp;&lt;/STRONG&gt;and&amp;nbsp;uncomment&amp;nbsp;below code line in&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;Function MainGrid_Loaded()&lt;/STRONG&gt; :&lt;/P&gt;
&lt;P&gt;------------------------------------------------------------------------------------&lt;/P&gt;
&lt;P&gt;&amp;nbsp;private void MainGrid_Loaded(object sender, RoutedEventArgs e)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Enable here to refresh workshop data from SSDS&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //WCFServicesAgent.Xmlhelper.CreatXml_WSList("c:\\");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // WCFServicesAgent.Xmlhelper.CreatXml_WSData( "c:\\WorkShopData\\", "Pic");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // WCFServicesAgent.Xmlhelper.CreatXml_WSData("c:\\WorkShopData\\", "Doc");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // WCFServicesAgent.Xmlhelper.CreatXml_WSData("c:\\WorkShopData\\", "Video");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;FONT size=3&gt;The Client Project &lt;STRONG&gt;DPEMS &lt;/STRONG&gt;is architected via &lt;/FONT&gt;&lt;/U&gt;&lt;A title="Composite Application for WPF Patterns" href="http://msdn.microsoft.com/en-us/magazine/cc785479.aspx" mce_href="http://msdn.microsoft.com/en-us/magazine/cc785479.aspx"&gt;&lt;FONT size=3&gt;Composite Application for WPF Patterns&lt;/FONT&gt;&lt;/A&gt;&lt;U&gt;&lt;FONT size=3&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;/U&gt; &lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 600px; HEIGHT: 503px" src="http://byfiles.storage.live.com/y1pPNy-lVx4ahx0qyUoC4dUwrVw1-Tb_746YBjRtMUaCXEUnF8sipSWR6VVmNyhOesbsdb5vXy5xkI3MeKFPVLMCA" width=600 height=503 mce_src="http://byfiles.storage.live.com/y1pPNy-lVx4ahx0qyUoC4dUwrVw1-Tb_746YBjRtMUaCXEUnF8sipSWR6VVmNyhOesbsdb5vXy5xkI3MeKFPVLMCA"&gt;&lt;/P&gt;
&lt;P&gt;Figure1. Composite Application for WPF&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It&amp;nbsp;mainly exposed two patterns:-&lt;/P&gt;
&lt;P&gt;1. The &lt;STRONG&gt;Model-View-Presenter&lt;/STRONG&gt; Pattern: Each Module&amp;nbsp;has MVP implemented.&amp;nbsp;Take a look at&amp;nbsp;&lt;STRONG&gt;WorkshopModule&amp;nbsp;&lt;/STRONG&gt;Project&amp;nbsp;,each view file has a corresponding presenter file. e.g. &lt;STRONG&gt;WorkShopMain.xaml&lt;/STRONG&gt;&amp;nbsp;contains XAML UI Interface while&amp;nbsp; &lt;STRONG&gt;WorkShopMainPresenter.cs&lt;/STRONG&gt;&amp;nbsp;handles XAML user event &amp;amp; business logic to process model.&amp;nbsp;&amp;nbsp;Also, all domain entity classes are in &lt;STRONG&gt;Model &lt;/STRONG&gt;folder.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 460px; HEIGHT: 716px" title="Solution Structure" alt="Solution Structure" src="http://akqypg.bay.livefilestore.com/y1ptWl2sEyY26BmjeJJthT0x4T2-4dmwyPUvg0R69k1gehnbPL0gMt-Xpmymk1ESs2Ux0hNeGwGnE90fFcW85mBmA" width=546 height=822 mce_src="http://akqypg.bay.livefilestore.com/y1ptWl2sEyY26BmjeJJthT0x4T2-4dmwyPUvg0R69k1gehnbPL0gMt-Xpmymk1ESs2Ux0hNeGwGnE90fFcW85mBmA"&gt;&lt;/P&gt;
&lt;P&gt;Figure 2. Project structure &lt;/P&gt;
&lt;P mce_keep="true"&gt;2.The &lt;STRONG&gt;Modularity &lt;/STRONG&gt;Pattern:&amp;nbsp; Each WPF Modules such as &lt;STRONG&gt;WorkshopModule&lt;/STRONG&gt;,&lt;STRONG&gt;ISVExplorerModule&lt;/STRONG&gt; is a separate WPF Project , and the main client project &lt;STRONG&gt;DPEMS &lt;/STRONG&gt;contains a Shell XAML file - the &lt;STRONG&gt;Main.xaml &lt;/STRONG&gt;file&lt;STRONG&gt; &lt;/STRONG&gt;which will assemble all WPF modules. It's mainly&amp;nbsp;done via&amp;nbsp; &lt;A title=Regions href="http://msdn.microsoft.com/en-us/library/cc707906.aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc707906.aspx"&gt;Prism&amp;nbsp;Regions&lt;/A&gt;&amp;nbsp;concept. The related XAML snippet is as below:-&lt;/P&gt;
&lt;P mce_keep="true"&gt;----------------------------------&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;lt;ItemsControl cal:RegionManager.RegionName="WorkShopRegion" Panel.ZIndex="0"&amp;nbsp;&amp;nbsp; Width="auto" /&amp;gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;lt;ItemsControl cal:RegionManager.RegionName="ISVExplorRegion" x:Name="ISVExplorRegion"&amp;nbsp;&amp;nbsp; Width="auto"&amp;nbsp; &amp;nbsp;Visibility="Hidden" &amp;gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;-----------------------------&lt;/P&gt;
&lt;P mce_keep="true"&gt;In each Module Project, there will be a Class&amp;nbsp;file&amp;nbsp;inheriting &lt;STRONG&gt;Microsoft.Practices.Composite.ModularityIModule &lt;/STRONG&gt;interface to add the Module XAML view to Shell when module is initialized. e.g.&lt;STRONG&gt;WorkShopModule.cs&lt;/STRONG&gt; is like below:-&lt;/P&gt;
&lt;P mce_keep="true"&gt;---------------------&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;public class WorkShopModule:IModule&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public IRegionManager RegionManager { get; private set; }&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public WorkShopModule(IRegionManager regionManager)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.RegionManager = regionManager;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Initialize()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRegion mainRegion = this.RegionManager.Regions["WorkShopRegion"];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WorkShopMain view = new WorkShopMain();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mainRegion.Add(view);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mainRegion.Activate(view);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P mce_keep="true"&gt;-------------------------------------&lt;/P&gt;
&lt;P mce_keep="true"&gt;Note that we also have 3 separate projects for reusable WPF controls, they are &lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;crfly.PhotoBookControl project&lt;/STRONG&gt;- the WPF control to animate paging-up-down effect of Albums.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Kiosk.Controls.VolumeChart project&lt;/STRONG&gt;-WPF Chart control&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;WpfVirtualEarthControl Project&lt;/STRONG&gt; - WPF Virtual Earth control&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 396px; HEIGHT: 322px" title=Album alt=Album src="http://byfiles.storage.live.com/y1pTEszRsqxHV67quBHqUnNmJAY5DkJ9ZIn9Wx4SbD7wr_B2NOvTRzC3bTJrTqE5yyL3LtMa0-XjO4" width=479 height=385 mce_src="http://byfiles.storage.live.com/y1pTEszRsqxHV67quBHqUnNmJAY5DkJ9ZIn9Wx4SbD7wr_B2NOvTRzC3bTJrTqE5yyL3LtMa0-XjO4"&gt;&lt;IMG style="WIDTH: 380px; HEIGHT: 331px" title="Chart " alt="Chart " src="http://byfiles.storage.live.com/y1p8ut1v44VLu6tZJpUBzzhB2XUmYMwyKN9_20L795toxjAE6ee7QAdBVQzijdE-VhWx56z3XBSpKc" width=487 height=389 mce_src="http://byfiles.storage.live.com/y1p8ut1v44VLu6tZJpUBzzhB2XUmYMwyKN9_20L795toxjAE6ee7QAdBVQzijdE-VhWx56z3XBSpKc"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Figure 3:Album Animation&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Figure4: Main Dashboard for Workshop Module including Chart&amp;nbsp; WPF control&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 410px; HEIGHT: 285px" title="Virtual Earth " alt="Virtual Earth " src="http://byfiles.storage.live.com/y1pyuYRo9ZGfA3_PU6RE0t4ryOLp7v7ALTPfhgH8X-wJqo2mKO9X8yJfBxjUNQ0JSkjEQ2g1zPvYMY" width=533 height=400 mce_src="http://byfiles.storage.live.com/y1pyuYRo9ZGfA3_PU6RE0t4ryOLp7v7ALTPfhgH8X-wJqo2mKO9X8yJfBxjUNQ0JSkjEQ2g1zPvYMY"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Figure 5: Main Dashboard for ISVExplorer module including VirtualEarth WPF Control&lt;/P&gt;
&lt;P mce_keep="true"&gt;Now, we've finished all introduction of this solution kit, you can download source code of this solution from &lt;A title="source code" href="http://cid-3454e46ce755f688.skydrive.live.com/self.aspx/BlogAttachment/WorkshopKit%7C_V1.rar" mce_href="http://cid-3454e46ce755f688.skydrive.live.com/self.aspx/BlogAttachment/WorkshopKit|_V1.rar"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3121755" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/yanwang/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.technet.com/yanwang/archive/tags/Prism/default.aspx">Prism</category><category domain="http://blogs.technet.com/yanwang/archive/tags/Composite+Application+for+WPF/default.aspx">Composite Application for WPF</category></item></channel></rss>