<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.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>Brad Abrams  : RIAServices</title><link>http://blogs.msdn.com/brada/archive/tags/RIAServices/default.aspx</link><description>Tags: RIAServices</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Bytes by MSDN: Brad Abrams Interview with Billy Hollis: Silverlight 4, RIA Services and VS2010</title><link>http://blogs.msdn.com/brada/archive/2009/12/09/bytes-by-msdn-brad-abrams-interview-with-billy-hollis-silverlight-4-ria-services-and-vs2010.aspx</link><pubDate>Wed, 09 Dec 2009 19:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9934439</guid><dc:creator>BradA</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/brada/comments/9934439.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9934439</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/bytes.aspx"&gt;Bytes by MSDN&lt;/a&gt; is doing a bunch of really interesting interviews with folks behind the technology.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/ee836085.aspx"&gt;In this interview&lt;/a&gt; I talked to Billy Hollis about Silverlight 4, RIA Services and VS2010.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/ee836085.aspx"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 25px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/BytesbyMSDNBradAbramsInterviewwithBillyH_144E0/image_3.png" width="244" height="243" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Tune in with Brad Abrams and Billy Hollis as they discuss the latest Silverlight 4 release and the exciting new features and functionalities now available.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Video Downloads&lt;/strong&gt;    &lt;br /&gt;&lt;a href="http://download.microsoft.com/download/0/C/C/0CCD857D-1028-4215-959E-92ABFCC523D0/BytesByMSDN-winvideo-BradAbrams.zip"&gt;WMV (Zip)&lt;/a&gt; | &lt;a href="http://download.microsoft.com/download/0/C/C/0CCD857D-1028-4215-959E-92ABFCC523D0/BytesByMSDN-winvideo-BradAbrams.wmv"&gt;WMV&lt;/a&gt; | &lt;a href="http://download.microsoft.com/download/0/C/C/0CCD857D-1028-4215-959E-92ABFCC523D0/BytesByMSDN-ipod-BradAbrams(2).mp4"&gt;iPod&lt;/a&gt; | &lt;a href="http://download.microsoft.com/download/0/C/C/0CCD857D-1028-4215-959E-92ABFCC523D0/BytesByMSDN-mp4video-BradAbrams(4).m4v"&gt;MP4&lt;/a&gt; | &lt;a href="http://download.microsoft.com/download/0/C/C/0CCD857D-1028-4215-959E-92ABFCC523D0/BytesByMSDN-3gp-BradAbrams(1).3gp"&gt;3GP&lt;/a&gt; | &lt;a href="http://download.microsoft.com/download/0/C/C/0CCD857D-1028-4215-959E-92ABFCC523D0/BytesByMSDN-zune-BradAbrams(3).wmv"&gt;Zune&lt;/a&gt; | &lt;a href="http://download.microsoft.com/download/0/C/C/0CCD857D-1028-4215-959E-92ABFCC523D0/BytesByMSDN-psp-BradAbrams.zip"&gt;PSP&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Audio Downloads&lt;/strong&gt;    &lt;br /&gt;&lt;a href="http://download.microsoft.com/download/0/C/C/0CCD857D-1028-4215-959E-92ABFCC523D0/BytesByMSDN-aac-BradAbrams(9).aac"&gt;AAC&lt;/a&gt; | &lt;a href="http://download.microsoft.com/download/0/C/C/0CCD857D-1028-4215-959E-92ABFCC523D0/BytesByMSDN-wma-BradAbrams(5).wma"&gt;WMA&lt;/a&gt; | &lt;a href="http://download.microsoft.com/download/0/C/C/0CCD857D-1028-4215-959E-92ABFCC523D0/BytesByMSDN-mp2-BradAbrams(6).mp2"&gt;MP2&lt;/a&gt; | &lt;a href="http://download.microsoft.com/download/0/C/C/0CCD857D-1028-4215-959E-92ABFCC523D0/BytesByMSDN-mp3-BradAbrams(7).mp3"&gt;MP3&lt;/a&gt; | &lt;a href="http://download.microsoft.com/download/0/C/C/0CCD857D-1028-4215-959E-92ABFCC523D0/BytesByMSDN-mp4audio-BradAbrams(8).m4a"&gt;MP4&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9934439" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/brada/archive/tags/RIAServices/default.aspx">RIAServices</category></item><item><title>Field Level Access with RIA Services</title><link>http://blogs.msdn.com/brada/archive/2009/12/08/field-level-access-with-ria-services.aspx</link><pubDate>Tue, 08 Dec 2009 18:56:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9934210</guid><dc:creator>BradA</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/brada/comments/9934210.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9934210</wfw:commentRss><description>&lt;p&gt;There are lots of reason you may need to customize the access to given fields within an entity.&amp;#160; For example, &lt;a href="http://www.hipaa.org/"&gt;HIPPA&lt;/a&gt; compliance requires that some data not be exposed to only employees with a need to know.&amp;#160;&amp;#160; It is often not sufficient to just NOT show the data in the Silverlight client, you need to not even send it over the wire.&amp;#160; &lt;/p&gt;  &lt;p&gt;This example works with &lt;a href="http://silverlight.net/getstarted/silverlight-4-beta/"&gt;Silverlight 4\RIA Services Beta&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx"&gt;Visual Studio 2010 Beta2&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I built a very simple RIA Services + Silverlight 4 example to show how this could be done.&amp;#160;&amp;#160; First, let’s run the app, then we can look at how we built it. &lt;/p&gt;  &lt;p&gt;The first thing to notice is when we run it, no users are logged in, so we get no access to the data at all.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/FieldLevelAccesswithRIAServices_97B4/image3.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/FieldLevelAccesswithRIAServices_97B4/image3_thumb.png" width="396" height="272" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;First, let’s log in as a Rocky, who is a jr. employee at our company.&amp;#160; He should NOT have access to the social security numbers of employees, but the other information is good for him to be able to access.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/FieldLevelAccesswithRIAServices_97B4/image6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/FieldLevelAccesswithRIAServices_97B4/image6_thumb.png" width="675" height="363" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;As you can see, no SSNs are displayed.&lt;/p&gt;  &lt;p&gt;Now, let’s log in as Billy, who is our HR Manager…&amp;#160; As you can see, Billy has a need to know what the SSN is for most employees, so those are visible to him.&amp;#160; But notice, even he can not see VP level personal information.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/FieldLevelAccesswithRIAServices_97B4/image9.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/FieldLevelAccesswithRIAServices_97B4/image9_thumb.png" width="687" height="340" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;OK, now let’s look at how we implemented this.&amp;#160;&amp;#160; Really the key code is the domain service on which runs on the server:&lt;/p&gt;  &lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;  1:     [RequiresAuthentication]
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;  2:     [EnableClientAccess()]
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;  3:     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; EmployeesDomainService : LinqToEntitiesDomainService&amp;lt;NORTHWNDEntities&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;  4:     {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;  5: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;  6:         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; IQueryable&amp;lt;Employee&amp;gt; GetEmployees()
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;  7:         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;  8:             &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (var e &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.ObjectContext.Employees)
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;  9:             {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt; 10:                 &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.ServiceContext.User.IsInRole(&amp;quot;&lt;span style="color: #8b0000"&gt;HRManagers&lt;/span&gt;&amp;quot;))
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt; 11:                 {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt; 12:                     e.SSN = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt; 13:                 }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt; 14:                 &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (e.Title.Contains(&amp;quot;&lt;span style="color: #8b0000"&gt;Vice President&lt;/span&gt;&amp;quot;))
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt; 15:                 {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt; 16:                     e.SSN = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt; 17:                 }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt; 18:             }
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt; 19:             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.ObjectContext.Employees;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt; 20:         }
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt; 21: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt; 22: &lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;In line 1, we mark this services are only accessible to users that are logged in.&lt;/p&gt;

&lt;p&gt;In line 10, we are making sure that only the user making the request is in the role that enables them to have access to the SSN, if not, we null it out.&lt;/p&gt;

&lt;p&gt;In line 14, we have a (lame) example to show accessing data on the entity to decide if the user should have access.&amp;#160; In this case, even the HRManager can’t access the VP’s SSN.&amp;#160; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Some notes on running the app:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://brad_abrams.members.winisp.net/Projects/PDC2009/FieldCustomAuth.zip"&gt;Download the source code&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;Billy and Rocky’s passwords are “password1!” &lt;/li&gt;

  &lt;li&gt;Be sure the refresh the page after logging in or out&lt;/li&gt;

  &lt;li&gt;You can customize the roles by using the IIS Admin tool or the ASP.NET configuration properties on the Web solution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9934210" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/brada/archive/tags/RIAServices/default.aspx">RIAServices</category></item><item><title>PDC09 Talk: Building Amazing Business Applications with Silverlight 4, RIA Services and Visual Studio 2010 – Now in Visual Basic!!</title><link>http://blogs.msdn.com/brada/archive/2009/11/27/pdc09-talk-building-amazing-business-applications-with-silverlight-4-ria-services-and-visual-studio-2010-now-in-visual-basic.aspx</link><pubDate>Sat, 28 Nov 2009 06:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9929580</guid><dc:creator>BradA</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/brada/comments/9929580.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9929580</wfw:commentRss><description>&lt;p&gt;I had a great time at &lt;a href="http://microsoftpdc.com/Sessions/CL21"&gt;my talk&amp;#160; PDC2009&lt;/a&gt; talk, but i was disappointed that I could not demo in both C# and VB… So here is the next best thing: A full play-by-play of the demo, but all in VB!&amp;#160;&amp;#160; Enjoy.&lt;/p&gt;  &lt;p&gt;What you need to get started:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx"&gt;Visual Studio 2010 Beta2&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://silverlight.net/"&gt;Silverlight 4 Beta&lt;/a&gt; (now includes &lt;a href="http://silverlight.net/riaservices/"&gt;RIA Services&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://brad_abrams.members.winisp.net/Projects/PDC2009/MyApp.VB.zip"&gt;Completed Solution (in VB) &lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Check out &lt;a href="http://brad_abrams.members.winisp.net/Projects/PDC2009/RIAServicesOverviewPDC2009.pptx"&gt;the slides and video &lt;/a&gt;&amp;#160; from the talk&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Starting Off&lt;/h3&gt;  &lt;p&gt;I am starting off with the new Business Application Template that gets installed with RIA Services.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_10E81/image.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_10E81/image_thumb.png" width="368" height="255" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This new template includes:&lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;Pattern for page navigation &lt;/li&gt;      &lt;li&gt;Log\Logout and new user registration support &lt;/li&gt;      &lt;li&gt;Localizable &lt;/li&gt;      &lt;li&gt;User settings &lt;/li&gt;      &lt;li&gt;Shared Code &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;For this demo, I am going to used a customized version of the template..&lt;/p&gt;  &lt;p&gt;After you create the project, you see we have a simple solution setup that follows the “RIA Application” pattern.&amp;#160; That is one application that happens to span a client (Silverlight) and server (asp.net) tiers.&amp;#160; These two are tied such that any change in the Silverlight client is reflected in the server project (a new XAP is placed in client bin) and appropriate changes in the server result in new functionality being exposed to the Silverlight client. To parts of the same application. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_10E81/image_3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_10E81/image_thumb_3.png" width="131" height="240" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h5&gt;Exposing the Data&lt;/h5&gt;  &lt;p&gt;I started out with an Entity Framework model.&amp;#160; RIA Services supports any DAL including Linq2Sql, NHibernate as well as DataSets and DataReader\Writer.&amp;#160;&amp;#160; But EF has made some great improvements in .NET 4, so I felt it was a good place to start.&amp;#160; &lt;/p&gt;  &lt;p&gt;So here is the EF model I created.&amp;#160; Basically we have a set of restaurants, each of which has a set of plates they serve.&amp;#160; A very simple model designed many to show off the concepts.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_4.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_4.png" width="281" height="292" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then we need to place to write our business logic that controls how the Silverlight client can interact with this data.&amp;#160;&amp;#160;&amp;#160; To do this create a new DomainService.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_10E81/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_10E81/image_thumb_4.png" width="361" height="250" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then select the tables you want to expose:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_6.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_6.png" width="196" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, let’s look at our code for the DomainService…&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:9175ffe7-1d0c-42bb-962f-369ef061822c" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Imports&lt;/span&gt; MyApp.VB&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;Imports&lt;/span&gt; System&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Imports&lt;/span&gt; System.Data&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;Imports&lt;/span&gt; System.Linq&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Imports&lt;/span&gt; System.Web.DomainServices&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;Imports&lt;/span&gt; System.Web.Ria&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Imports&lt;/span&gt; System.Web.DomainServices.Providers&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;EnableClientAccess&lt;/span&gt;()&amp;gt; _&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;PlateViewDomainService&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Inherits&lt;/span&gt; &lt;span style="color:#2b91af"&gt;LinqToEntitiesDomainService&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;Of&lt;/span&gt; &lt;span style="color:#2b91af"&gt;DishViewEntities&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Function&lt;/span&gt; GetRestaurants() &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IQueryable&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;Of&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Restaurant&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Return&lt;/span&gt; &lt;span style="color:#0000ff"&gt;From&lt;/span&gt; r &lt;span style="color:#0000ff"&gt;In&lt;/span&gt; ObjectContext.Restaurants&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Where&lt;/span&gt; r.City &amp;lt;&amp;gt; &lt;span style="color:#a31515"&gt;"Raligh"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Order&lt;/span&gt; &lt;span style="color:#0000ff"&gt;By&lt;/span&gt; r.ID&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Function&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Class&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;In line 10 – we are enabling this service to be accessed from clients.. without this, the DomainService is only accessible from on the machine (for example for an ASP.NET hosted on the same machine). &lt;/p&gt;  &lt;p&gt;In line 11: we are defining the DomainService – you should think of a DomainService as just a special kind of WCF Service.. one that is higher level and has all the right defaults set so that there is zero configuration needed.&amp;#160;&amp;#160; Of course the good news is that if you *need* to you can get access to the full richness of WCF and configure the services however you’d like. &lt;/p&gt;  &lt;p&gt;In line 12: you see we are using the LinqToEntitiesDomainService.&amp;#160; RIA Services supports any DAL including LinqToSql or NHibernate.&amp;#160; Or what I think is very common is just POCO.. that is deriving from DomainService directly.&amp;#160; See examples of these here…&lt;/p&gt;  &lt;p&gt;In line 14:&amp;#160; We are defining a Query method.. this is based on LINQ support added in VS2008.&amp;#160; Here we define the business logic involved in return data to the client.&amp;#160; When the framework calls this method, it will compose a LINQ query including paging, sorting, filtering from the client then execute it directly against the EF model which translate it into optimized TSQL code.&amp;#160; So no big chunks of unused data are brought to the mid-tier or the client.&amp;#160; &lt;/p&gt;  &lt;h3&gt;Consuming the data on the client&lt;/h3&gt;  &lt;p&gt;Now let’s switch over the client project and look at how we consume this.&amp;#160; &lt;/p&gt;  &lt;p&gt;in Views\Home.xaml we have a very simple page with just a DataGrid defined.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:51f75bb6-8b22-4930-b796-f29522947075" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGrid&lt;/span&gt;&lt;span style="color:#ff0000"&gt; AutoGenerateColumns&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="True"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="dataGrid1"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="456"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="618" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;now let’s flip over to codebhind.. &lt;/p&gt;  &lt;p&gt;Notice we have a MyApp.Web namespace available on the client. Notice that is the same namespace we defined our DomainService in..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_10E81/image_5.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_10E81/image_thumb_5.png" width="473" height="203" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So, let’s create a local context for accessing our DomainService.&amp;#160; First thing you will notice is that VS2010 Intellisense makes it very easy to find what we want.. it now matches on any part of the class name..&amp;#160; So just typing “domainc” narrows our options to the right one..&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_10E81/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_10E81/image_thumb_6.png" width="453" height="132" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:907892a2-2b0b-4e40-849d-1b6862126705" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Dim&lt;/span&gt; context = &lt;span style="color:#0000ff"&gt;New&lt;/span&gt; &lt;span style="color:#2b91af"&gt;PlateViewDomainContext&lt;/span&gt;()&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;dataGrid1.ItemsSource = context.Restaurants&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;context.Load(context.GetRestaurantsQuery())&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;In line 2, notice there is a property on context called Restaurants.&amp;#160; How did we get that there?&amp;#160; Well, there is a query method defined on the DomainService returning a type of type Restaurant.&amp;#160; This gives us a very clean way to do databinding.&amp;#160; Notice this call is actually happening async, but we don’t have to deal with any of that complexity.&amp;#160; No event handlers, callbacks, etc.&amp;#160; &lt;/p&gt;  &lt;p&gt;In line 4, while the whole point of RIA Services is to make n-tier development as easy as two-tier development that most of us are used to, we want to make sure the applications that are created are well behaved.&amp;#160;&amp;#160; So part of this is we want to be explicit when a network call is being made.. this is not transparent remoting.&amp;#160; Network calls must be explicit.&amp;#160;&amp;#160;&amp;#160; In this line we are mentioning which query method to use as you might define more than one for the same type with different logic.&amp;#160; &lt;/p&gt;  &lt;p&gt;Now we run it.. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_9.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_9.png" width="381" height="267" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is very cool and simple.&amp;#160; But in a real world case, i am guessing you have more than 20 records… sometimes you might have 100s, or thousands or more.&amp;#160; You can’t just send all those back to the client.&amp;#160; Let’s see how you can implement paging and look at some of the new design time features in VS2010 as well.&amp;#160; &lt;/p&gt;  &lt;h5&gt;RIA Services support in Visual Studio 2010&lt;/h5&gt;  &lt;p&gt;Let’s delete that code we just wrote and flip over to the design surface and delete that datagrid.&amp;#160; &lt;/p&gt;  &lt;p&gt;Drop down the DataSources window (you may need to look under the Data menu for “Show Data Sources”&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_10.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_10.png" width="240" height="201" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you are familiar with WinForms or WPF development, this will look at least somewhat familiar to you.&amp;#160;&amp;#160; Notice our DishViewDomainContext is listed there with a table called Restaurant.&amp;#160; Notice this is exactly what we saw in the code above because this window is driven off that same DomainContext.&amp;#160; &lt;/p&gt;  &lt;p&gt;Dropping down the options on Restaurant, we see we have a number of options for different controls that can be used to view this data… of course this is extensible and we expect 3rd party as well as your custom controls to work here.&amp;#160;&amp;#160;&amp;#160; Next see the query method here that is checked.&amp;#160; That lists all the available options for query methods that return Restaurant.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_11.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_11.png" width="240" height="235" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now if we expand the view on Restaurant, we see all the data member we have exposed.&amp;#160; This view gives us a chance to change how each data member will be rendered.&amp;#160; Notice I have turned off the ID and changed the Imagepath to an Image control.&amp;#160; Again this is an extensible and we expect 3rd party controls to plug in here nicely.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_12.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_12.png" width="170" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, drag and drop Restaurant onto the form and we get some UI&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_13.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_13.png" width="458" height="252" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And for you Xaml heads that want to know what really happens… Two things.&amp;#160; First if the DomainDataSource is not already created, one is created for you. &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:aae94855-1f75-43e0-9fc6-425770ec9ee7" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;riaControls&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DomainDataSource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; AutoLoad&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="True"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="0"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="RestaurantDomainDataSource"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; QueryName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="GetRestaurantsQuery"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="0"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;riaControls&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DomainDataSource.DomainContext&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;my&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;PlateViewDomainContext&lt;/span&gt;&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;riaControls&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DomainDataSource.DomainContext&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;riaControls&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DomainDataSource&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Finally, the DataGrid is created with a set of columns.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:81b9bf5c-4749-4b5c-a15a-e0ec3c24fb76" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGrid&lt;/span&gt;&lt;span style="color:#ff0000"&gt; AutoGenerateColumns&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="False"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="200"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Left"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; ItemsSource&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ElementName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=RestaurantDomainDataSource,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=Data}"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="190,110,0,0"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="RestaurantDataGrid"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; RowDetailsVisibilityMode&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="VisibleWhenSelected"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Top"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="400"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGrid.Columns&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTextColumn&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="AddressColumn"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Binding&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=Address}"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; Header&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Address"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="SizeToHeader" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Then setup a grid cell by click 4/5ths of the way down on the left grid adorner.&amp;#160; Then select the grid, right click, select reset layout all.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_14.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_14.png" width="403" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;.. add poof! VS automatically lays out the DataGrid to fill the cell just right.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_15.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_15.png" width="240" height="172" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, personally, I always like the Name column to come first.&amp;#160; Let’s go fix that by using the DataGrid column designer.&amp;#160; Right click on the DataGrid select properties then click on the Columns property..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_16.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_16.png" width="240" height="144" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In this designer you can control the order of columns and the layout, etc.&amp;#160;&amp;#160; I moved the image and name fields to the top.&lt;/p&gt;  &lt;p&gt;Now, let’s add a DataPager such that we only download a manageable number of records at a time. From the toolbox, simply drag the datapager out.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_17.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_17.png" width="240" height="155" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We use our same trick to have VS auto layout the control&amp;#160; Right click on it and select Reset Layout\All.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_18.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_18.png" width="240" height="102" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;That is cool, but there is a big&amp;#160; gap between the DataGrid and the DataPager.. I really want them to be right.&amp;#160; This is easy to fix.&amp;#160; Right click on the grid adorner and select “Auto”.. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_19.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_19.png" width="414" height="81" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Perfect!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_20.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_20.png" width="342" height="104" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, we just need to wire this up to the same DataSource our DataGrid is using “connect-the-dots” databinding.&amp;#160; Simply drag the Restaurant from the DataSources window on top of the DataGrid.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_21.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_21.png" width="240" height="180" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For you Xaml heads, you’ll be interested in the Xaml this creates..&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:cfff4ac3-601d-44b1-b306-91cb3d7efcb7" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataPager&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Grid.Row&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="1"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="DataPager1"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; PageSize&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="10"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Source&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ElementName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=RestaurantDomainDataSource,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=Data}" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Notice, we don’t need to create a new DomainDataSource here… we will use the one that is already on the page. &lt;/p&gt;  &lt;p&gt;Now, we are doing an async call.. so let’s drag a&amp;#160; BusyIndicator from the new Silverlight 4 Toolkit.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_22.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_22.png" width="240" height="171" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We need to write up the IsBusy to the restaurantDomainDataSource.DomainContext.IsLoading… Luckily there is some nice databinding&amp;#160; helper in VS2010.&amp;#160; Select properties, then IsBusy, then DataBinding. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_23.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_23.png" width="374" height="234" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Again, for you Xaml heads, the Xaml that gets generated is pretty much what you’d expect.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:61154244-76ee-4612-a182-130a8d2e7075" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;controlsToolkit&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;BusyIndicator&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="83"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Left"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="274,137,0,0"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="BusyIndicator1"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Top"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="188"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; IsBusy&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ElementName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=RestaurantDomainDataSource,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=DomainContext.IsLoading}" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Loading…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_24.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_24.png" width="240" height="168" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;and once it is loaded…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_25.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_25.png" width="240" height="168" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Very cool…&amp;#160; that was a very easy was to get your data.&amp;#160;&amp;#160;&amp;#160; Page through it and notice that with each page we are going back all the way to the data tier to load more data.&amp;#160; So you could just as easily do this on a dataset of million+ records.&amp;#160;&amp;#160;&amp;#160; But what is more, is that sorting works as well and just as you’d expect.&amp;#160; It doesn’t sort just the local data, it sorts the full dataset and it does it all way back onto the data tier and just pulls forward the page of data you need to display.&lt;/p&gt;  &lt;p&gt;But our pictures are not showing up… let’s look at how we wire up the pictures.&amp;#160; The reason they are not showing up is that our database returns just the simple name of the image, not the full path.&amp;#160; This allows us to be flexible about the where the images are stored.&amp;#160;&amp;#160; The standard way to handle this is to write a &lt;a href="http://timheuer.com/blog/archive/2008/07/30/format-data-in-silverlight-databinding-valueconverter.aspx"&gt;value converter&lt;/a&gt;.&amp;#160;&amp;#160;&amp;#160;&amp;#160; Here is a simple example:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:05602e5f-9b51-497a-b989-7eb46fbcf9fe" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;ImagePathConverter&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Implements&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IValueConverter&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Function&lt;/span&gt; Convert(&lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; value &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Object&lt;/span&gt;, &lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; targetType &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;, &lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; parameter &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Object&lt;/span&gt;, &lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; culture &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; Globalization.&lt;span style="color:#2b91af"&gt;CultureInfo&lt;/span&gt;) &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Object&lt;/span&gt; _&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Implements&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IValueConverter&lt;/span&gt;.Convert&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Dim&lt;/span&gt; path &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;String&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;path = value.ToString()&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;path = path.Replace(&lt;span style="color:#a31515"&gt;":"&lt;/span&gt;, &lt;span style="color:#a31515"&gt;""&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;path = path.Replace(&lt;span style="color:#a31515"&gt;"/"&lt;/span&gt;, &lt;span style="color:#a31515"&gt;""&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;path = path.Replace(&lt;span style="color:#a31515"&gt;"&amp;#92;&amp;#92;"&lt;/span&gt;, &lt;span style="color:#a31515"&gt;""&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;If&lt;/span&gt; path.Length &amp;gt; &lt;span style="color:#a52a2a"&gt;100&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Then&lt;/span&gt;&lt;/li&gt; &lt;li&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;path = path.Substring(&lt;span style="color:#a52a2a"&gt;0&lt;/span&gt;, &lt;span style="color:#a52a2a"&gt;100&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;If&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Return&lt;/span&gt; &lt;span style="color:#a31515"&gt;"http://hanselman.com/abrams/Images/Plates/"&lt;/span&gt; + path&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Function&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now, let’s look at how we wire this converter to the UI.&amp;#160;&amp;#160; First, let’s use the Document Outline to drill through the visual tree to find the Image control.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_26.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_26.png" width="152" height="368" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then we select the properties on the image and wire up this converter.&amp;#160; If you have done this in Xaml directly before, you know it is hard to get right.&amp;#160; VS2010 makes this very easy!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_27.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_27.png" width="240" height="201" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Oh, and for you Xaml heads… here is what VS created..&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ca9a86d5-7ca2-42ba-badb-6e990bbb7b84" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;navigation&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;Page.Resources&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;my&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;ImagePathConverter&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Key&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="ImagePathConverter1" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;navigation&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;Page.Resources&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;and&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a7ffb2aa-07ec-42cb-9746-592efe75a813" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="ImagePathColumn"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Header&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Image Path"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="SizeToHeader"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn.CellTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&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;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Image&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Source&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=ImagePath,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Converter&lt;/span&gt;&lt;span style="color:#0000ff"&gt;={&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ImagePathConverter1&lt;/span&gt;&lt;span style="color:#0000ff"&gt;}}" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn.CellTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;h3&gt;Silverlight Navigation&lt;/h3&gt;  &lt;p&gt;Now let’s look at how we drill down and get the details associated with each of these records.&amp;#160; I want to show this is a “web” way… So I’ll show how to create a deep link to a new page that will list just the plates for the restaurant you select.&amp;#160; &lt;/p&gt;  &lt;p&gt;First we add a bit of Xaml to add the link to the datagrid..&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:47d4f28f-ff27-4d55-9b0d-1a2462ec9b43" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGrid.Columns&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Header&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=""&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&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;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn.CellTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Button&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Content&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="+"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Style&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; DetailsButtonStyle&lt;/span&gt;&lt;span style="color:#0000ff"&gt;}"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; Click&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Button_Click"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Button&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&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;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn.CellTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;And to implement the button click handler…&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:47e35b6d-5ca1-421d-9135-ea21fd76b038" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Sub&lt;/span&gt; Button_Click(&lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; System.&lt;span style="color:#2b91af"&gt;Object&lt;/span&gt;, &lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; System.Windows.&lt;span style="color:#2b91af"&gt;RoutedEventArgs&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Dim&lt;/span&gt; res &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Restaurant&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;res = RestaurantDomainDataSource.DataView.CurrentItem&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NavigationService.Navigate(&lt;span style="color:#0000ff"&gt;New&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Uri&lt;/span&gt;(&lt;span style="color:#a31515"&gt;"/Plates?restaurantId="&lt;/span&gt; _&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp; res.ID, &lt;span style="color:#2b91af"&gt;UriKind&lt;/span&gt;.Relative))&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Sub&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Here we are getting the currently selected Restaurant, then we cons up a new URL to the page “Plates”.&amp;#160; We pass a query string parameter of restaurantId… &lt;/p&gt;  &lt;p&gt;Now, let’s build out the Plates page that will the list of Plates for this restaurant.&amp;#160; First let’s great a a Plates page.&amp;#160; Let’s add a new Plates under the Views directory.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_28.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_28.png" width="240" height="171" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now we need to define a query to return the Plates.&amp;#160; Notice that only the data you select is exposed.&amp;#160; So we get to go back to the server, to our DishViewDomainService and add a new query method.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:abb275a1-c460-4c3a-8ee3-a36b294ba725" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Function&lt;/span&gt; GetPlates() &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IQueryable&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;Of&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Plate&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Return&lt;/span&gt; &lt;span style="color:#0000ff"&gt;From&lt;/span&gt; r &lt;span style="color:#0000ff"&gt;In&lt;/span&gt; ObjectContext.Plates&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Order&lt;/span&gt; &lt;span style="color:#0000ff"&gt;By&lt;/span&gt; r.ID&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Function&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Now we go back to the client, and see your DataSources window now offers a new datasource: Plates. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_29.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_29.png" width="173" height="282" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, just as we saw above, I will drag and drop that data source onto the form and i get a nice datagrid alreayd wired up to a DomainDataSource.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_30.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_30.png" width="240" height="170" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then, with a little formatting exactly as we saw above, we end up with…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_31.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_31.png" width="240" height="120" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And when we run it… First, you see the link we added to the list of Restaurants.. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_32.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_32.png" width="240" height="168" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Clicking on anyone of them navigates us to our Plates page we just built.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_33.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_33.png" width="240" height="108" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Customized Data Access&lt;/h3&gt;  &lt;p&gt;This is cool, but notice we are actually returning *all* the plates, not just the plates from the restaurant selected.&amp;#160;&amp;#160;&amp;#160; To address this first we need modify our GetPlates() query method to take in a resource id.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c283982c-8af1-41f7-9fd9-edb2b5493694" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Function&lt;/span&gt; GetPlates(&lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; resId &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Integer&lt;/span&gt;) &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IQueryable&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;Of&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Plate&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Return&lt;/span&gt; &lt;span style="color:#0000ff"&gt;From&lt;/span&gt; r &lt;span style="color:#0000ff"&gt;In&lt;/span&gt; ObjectContext.Plates&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Where&lt;/span&gt; r.RestaurantID = resId&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Order&lt;/span&gt; &lt;span style="color:#0000ff"&gt;By&lt;/span&gt; r.ID&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Function&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now, back on the client, we just need to pass the query string param…&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1569a8a1-389a-44b4-a70a-cf7bf8ab9e93" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Protected&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Overrides&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Sub&lt;/span&gt; OnNavigatedTo(&lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; System.Windows.Navigation.&lt;span style="color:#2b91af"&gt;NavigationEventArgs&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Dim&lt;/span&gt; param = &lt;span style="color:#0000ff"&gt;New&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Parameter&lt;/span&gt;()&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;param.ParameterName = &lt;span style="color:#a31515"&gt;"resId"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;param.Value = NavigationContext.QueryString(&lt;span style="color:#a31515"&gt;"restaurantId"&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PlateDomainDataSource.QueryParameters.Add(param)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Sub&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Now, we run it and we get the just the plates for the restaurant we selected.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_34.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_34.png" width="360" height="162" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;what’s more is we now have a deep link such that it works when I email, IM or tweet this link to my buddy who happens to run a different browser ;-)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_35.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_35.png" width="353" height="150" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ok… now for a details view…&amp;#160; Let’s do a bit more layout in the Plates.xaml.&amp;#160;&amp;#160; First, let’s split the form in half vertically to give us some cells to work in.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_36.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_36.png" width="240" height="159" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the bottom left we will put the details view to allow us to edit this plate data.&amp;#160; Let’s go back to the DataSources window and change the UI type to Details.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_37.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_37.png" width="160" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Dragging that Details onto the form… we get some great UI generation that we can go in and customize. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_38.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_38.png" width="240" height="171" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In particular, let’s format that Price textbox as a “currency”… using the new String Formatting support in Silverlight 4.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_39.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_39.png" width="402" height="178" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And again, for you Xaml heads… this created:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Text=&amp;quot;{Binding Path=Price, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, StringFormat=\{0:c\}}&amp;quot; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Now, let’s add an image to the other side.&amp;#160; Simply drop an Image control on the form and select Reset Layout\All&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_40.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_40.png" width="240" height="183" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now we can easily change the image to be “Uniform”&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_41.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_41.png" width="404" height="249" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now we need to write up the binding here so that as selection changes, this image is update.&amp;#160; Luckily, that is very easy to do.&amp;#160;&amp;#160;&amp;#160; Simply drag and drop from the Data Sources window…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_42.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_42.png" width="359" height="290" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then we need to wire up our converter just as we saw before..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_43.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_43.png" width="240" height="171" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Run it…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_44.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_44.png" width="240" height="173" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;That looks great!&amp;#160; &lt;/p&gt;  &lt;p&gt;But when we try edit something, we get this error..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_45.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_45.png" width="240" height="126" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Editing Data&lt;/h3&gt;  &lt;p&gt;Ahh, that is a good point, we need to go back and explicitly define a Update method to our DomainService on the server. &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ed197d74-4d93-4477-b8f5-e3757d4f3ece" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Sub&lt;/span&gt; UpdatePlate(&lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; currentPlate &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Plate&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentPlate.NumberUpdates += &lt;span style="color:#a52a2a"&gt;1&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Dim&lt;/span&gt; orginal = ChangeSet.GetOriginal(currentPlate)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;If&lt;/span&gt; orginal.Price &amp;lt;&amp;gt; currentPlate.Price &lt;span style="color:#0000ff"&gt;Then&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000"&gt;' add 1 dollar fee for changing price &lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentPlate.Price += &lt;span style="color:#a52a2a"&gt;1&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;If&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ObjectContext() _&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.AttachAsModified(currentPlate, orginal)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Sub&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;In line 2, notice we take the NumberUpdates and increment by one.&amp;#160; it is nice that we send the entry entity back and forth, so we can do entity level operations very easily.&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Next in line 3, we pull out the original value.. .this is the plate instance as the client saw it &lt;em&gt;before&lt;/em&gt; it was updated.&amp;#160; &lt;/p&gt;  &lt;p&gt;In line 4-7, we first check to see if the price has changed, if it has, we add a fee of one dollar for a price change.&amp;#160; &lt;/p&gt;  &lt;p&gt;Finally&amp;#160; in line 8-9, we submit this change to the database.&amp;#160; &lt;/p&gt;  &lt;p&gt;Now we just need to drop a button on the form.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_46.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_46.png" width="240" height="206" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then write some codebehind..&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a2cbcb96-6eae-4f98-88fc-1c3847cae724" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Sub&lt;/span&gt; Button1_Click(&lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; System.&lt;span style="color:#2b91af"&gt;Object&lt;/span&gt;, &lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; System.Windows.&lt;span style="color:#2b91af"&gt;RoutedEventArgs&lt;/span&gt;) &lt;span style="color:#0000ff"&gt;Handles&lt;/span&gt; Button1.Click&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PlateDomainDataSource.SubmitChanges()&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Sub&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;What this is going to do is find all the entities that are dirty (that have changes) and package them up and send them to the server.&amp;#160; &lt;/p&gt;  &lt;p&gt;Now notice if you make a change price to the data and hit submit the NumberUpdates goes up by one and the the price has the one dollar fee added. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_47.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_47.png" width="240" height="191" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then submit..&amp;#160; NumberUpdates is now 63 and the price is $73.84.. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_48.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_48.png" width="240" height="198" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then if you set a breakpoint on the server, change two or three records on the client.&amp;#160; Notice the breakpoint gets hit for each change.&amp;#160;&amp;#160;&amp;#160; We are batching these changes to make an efficient communication pattern.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_49.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_49.png" width="387" height="276" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Great.. now let’s look at data validation.&lt;/p&gt;  &lt;p&gt;We get some validation for free.&amp;#160; for example Calorie Count is a int, if we put a string in, we get a stock error message.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_50.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_50.png" width="240" height="168" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If we want to customize this a bit more, we can go back to the server and specify our validation there.&amp;#160; It is important to do it on the server because you want validation to happen&amp;#160; on the client for good UI, but on the server for the tightest security.&amp;#160; Following the DRY principle (Don’t Repeat Yourself) we have a single place to put this validation data that works on the client and the server. &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:56fe31cc-931a-4448-8492-debd2340a4e8" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;Required&lt;/span&gt;(ErrorMessage:=&lt;span style="color:#a31515"&gt;"Please provide a name"&lt;/span&gt;)&amp;gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; Name &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;String&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; NumberUpdates &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Nullable&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;Of&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Integer&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;Range&lt;/span&gt;(&lt;span style="color:#a52a2a"&gt;0&lt;/span&gt;, &lt;span style="color:#a52a2a"&gt;99&lt;/span&gt;)&amp;gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; Price &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Nullable&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;Of&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Decimal&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;RegularExpression&lt;/span&gt;(&lt;span style="color:#a31515"&gt;"^http&amp;#92;://[a-zA-Z0-9&amp;#92;-&amp;#92;.]+&amp;#92;.[a-zA-Z]{2,3}(/&amp;#92;S*)?$"&lt;/span&gt;,&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ErrorMessage:=&lt;span style="color:#a31515"&gt;"Please use standard Url format"&lt;/span&gt;)&amp;gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; Uri &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;String&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The data validation attributes are a core part of .NET with ASP.NET Dynamic Data and ASP.NET MVC using the exact same model.&lt;/p&gt;  &lt;p&gt;But what if they are not expressive enough for you?&amp;#160; For example, say I have a custom validation I have for making sure the description is valid..&amp;#160;&amp;#160; To do that, I can write some .NET code that executes on the server AND the client.&amp;#160; Let’s see how to do that.&amp;#160; First I create a class on the server..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_51.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_51.png" width="310" height="221" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Notice the name here PlateValidationRules.shared.cs…. the “.shared” part is important… it is what tells us that this code is meant to be on the client and the server. &lt;/p&gt;  &lt;p&gt;In this case, i am saying a valid description is one that has 5 more more words&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:33ad119f-66cd-4d58-bd3e-74339f129060" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;PlateValidationRules&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Shared&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Function&lt;/span&gt; IsDescriptionValid(&lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; description &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;String&lt;/span&gt;) &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#2b91af"&gt;ValidationResult&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;If&lt;/span&gt; (description &amp;lt;&amp;gt; &lt;span style="color:#0000ff"&gt;Nothing&lt;/span&gt; &lt;span style="color:#0000ff"&gt;And&lt;/span&gt; description.Split().Length &amp;lt; &lt;span style="color:#a52a2a"&gt;5&lt;/span&gt;) &lt;span style="color:#0000ff"&gt;Then&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&lt;span style="color:#0000ff"&gt;Dim&lt;/span&gt; vr = &lt;span style="color:#0000ff"&gt;New&lt;/span&gt; &lt;span style="color:#2b91af"&gt;ValidationResult&lt;/span&gt;(&lt;span style="color:#a31515"&gt;"Valid descriptions must have 5 or more words."&lt;/span&gt;)&lt;/li&gt; &lt;li&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;&lt;span style="color:#0000ff"&gt;Return&lt;/span&gt; vr&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;If&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Return&lt;/span&gt; &lt;span style="color:#2b91af"&gt;ValidationResult&lt;/span&gt;.Success&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Function&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Class&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Then to wire this up to the description property…&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:fc526784-965e-4701-9402-92e890f48ff8" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;CustomValidation&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;GetType&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;PlateValidationRules&lt;/span&gt;),&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&lt;span style="color:#a31515"&gt;"IsDescriptionValid"&lt;/span&gt;)&amp;gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; Description &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;String&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Then running the app, we see all our validations…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_52.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_52.png" width="240" height="173" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h5&gt;Personalization and Authentication&lt;/h5&gt;  &lt;p&gt;Lots of times in business applications we are dealing with valuable data that we need to make sure the user is authentication before we return in.&amp;#160; Luckily this is very easy to do with RIA Services.&amp;#160; Let’s go back to our DomainServices on the server and add the RequiresAuthentication attribute.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:d7a5b493-d395-4a17-bbd4-425100ad948d" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;RequiresAuthentication&lt;/span&gt;()&amp;gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;EnableClientAccess&lt;/span&gt;()&amp;gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;PlateViewDomainService&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Inherits&lt;/span&gt; &lt;span style="color:#2b91af"&gt;LinqToEntitiesDomainService&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;Of&lt;/span&gt; &lt;span style="color:#2b91af"&gt;DishViewEntities&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Then when you run the application..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_53.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_53.png" width="322" height="110" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So let’s log in…&amp;#160; I don’t have an account created yet, luckily the Business Application Template supports new user registration.&amp;#160; All this is based on ASP.NET Authentication system that has been around sense ASP.NET 2.0.&amp;#160; &lt;/p&gt;  &lt;p&gt;Here we are creating a new user…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_54.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_54.png" width="240" height="173" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And now we get our data…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_55.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_55.png" width="240" height="153" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, that we have a user concept.. why don’t we add one more setting to let the user customize this page.&amp;#160;&amp;#160;&amp;#160; So we edit the web.config file to add a BackgroundColor.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b020147d-6f49-47fd-9824-c159c78addb8" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a31515"&gt;xml&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;version&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;1.0&lt;/span&gt;"&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;encoding&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;utf-8&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;?&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;configuration&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;system.web&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;profile&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;properties&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;FriendlyName&lt;/span&gt;"&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;BackgroundColor&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;properties&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;profile&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;And we go into the User.cs class on the server and add our BackgroundColor.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c94c05d7-ba3f-49e0-b0a1-c24463123fbb" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Partial&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;User&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Inherits&lt;/span&gt; &lt;span style="color:#2b91af"&gt;UserBase&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Private&lt;/span&gt; _FriendlyName &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;String&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Private&lt;/span&gt; _BackgroundColor &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;String&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Property&lt;/span&gt; FriendlyName() &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;String&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Get&lt;/span&gt;&lt;/li&gt; &lt;li&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;&lt;span style="color:#0000ff"&gt;Return&lt;/span&gt; _FriendlyName&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Get&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Set&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; value &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;String&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;_FriendlyName = value&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Set&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Property&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Property&lt;/span&gt; BackgroundColor() &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;String&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Get&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&lt;span style="color:#0000ff"&gt;Return&lt;/span&gt; _BackgroundColor&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Get&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Set&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; value &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;String&lt;/span&gt;)&lt;/li&gt; &lt;li&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;_BackgroundColor = value&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Set&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Property&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Now, back on the client, let’s build out UI using the DataSources window just as we have seen above.&amp;#160; But this time, I have created a very simple ColorPicker control in order to show that it is possible to use your own custom control.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_56.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_56.png" width="302" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Drag and drop that onto the form..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_57.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_57.png" width="240" height="107" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then change the binding to be TwoWay using the databinding picker.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_58.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_58.png" width="240" height="136" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then I think we need a nice header here with the User name in it.&amp;#160; To so that, let’s add a TextBlock, set the fontsize to be big.&amp;#160;&amp;#160; Then do connect the dots databinding to write up to the user name.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_59.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_59.png" width="240" height="124" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then let’s use the string format databinding to customize this a bit..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_60.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_60.png" width="321" height="194" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Next we put a Submit button.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a9c52475-ebbd-41e7-875b-b3f020584e98" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Sub&lt;/span&gt; Button1_Click(&lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; System.&lt;span style="color:#2b91af"&gt;Object&lt;/span&gt;, &lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; System.Windows.&lt;span style="color:#2b91af"&gt;RoutedEventArgs&lt;/span&gt;) &lt;span style="color:#0000ff"&gt;Handles&lt;/span&gt; Button1.Click&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Dim&lt;/span&gt; context = &lt;span style="color:#2b91af"&gt;WebContext&lt;/span&gt;.Current.Authentication&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UserDomainDataSource.SubmitChanges()&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;AddHandler&lt;/span&gt; UserDomainDataSource.SubmittedChanges, &lt;span style="color:#0000ff"&gt;AddressOf&lt;/span&gt; SubmittedChanges&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Sub&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Sub&lt;/span&gt; SubmittedChanges(&lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Object&lt;/span&gt;, &lt;span style="color:#0000ff"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff"&gt;As&lt;/span&gt; &lt;span style="color:#2b91af"&gt;SubmittedChangesEventArgs&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;Dim&lt;/span&gt; context = &lt;span style="color:#2b91af"&gt;WebContext&lt;/span&gt;.Current.Authentication&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;If&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Not&lt;/span&gt; context.IsBusy &lt;span style="color:#0000ff"&gt;Then&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;context.LoadUser()&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;If&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Sub&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Now when we run it… we can modify the user settings.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_61.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_61.png" width="240" height="157" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The really cool part is that if the user goes to another machine and logs in, they get the exact same experience.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_62.png"&gt;&lt;img title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_62.png" width="240" height="159" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;Wow, we have seen a lot here.. We walked through end-to-end how to build a Business Application in Silverlight with .NET RIA Services.&amp;#160; We saw the query support, validating update, authorization and personalization as well as all the great new support in VS2010.&amp;#160;&amp;#160;&amp;#160; Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9929580" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/VB/default.aspx">VB</category><category domain="http://blogs.msdn.com/brada/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/brada/archive/tags/RIAServices/default.aspx">RIAServices</category><category domain="http://blogs.msdn.com/brada/archive/tags/PDC09/default.aspx">PDC09</category></item><item><title>Silverlight and RIA Services: Implementing Search</title><link>http://blogs.msdn.com/brada/archive/2009/11/25/silverlight-and-ria-services-implementing-search.aspx</link><pubDate>Wed, 25 Nov 2009 19:11:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9928730</guid><dc:creator>BradA</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/brada/comments/9928730.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9928730</wfw:commentRss><description>&lt;p&gt;Some of you likely noticed that my &lt;a href="http://blogs.msdn.com/brada/archive/2009/11/19/pdc09-talk-building-amazing-business-applications-with-silverlight-4-ria-services-and-visual-studio-2010.aspx"&gt;PDC09 demo included&lt;/a&gt; a stubbed out Search function that I didn’t really get to walkthrough during the talk.&amp;#160;&amp;#160; I thought I’d do a blog post showing how it is done.&lt;/p&gt;  &lt;p&gt;To get started you need: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx"&gt;Visual Studio 2010 Beta 2&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://silverlight.net/getstarted/silverlight-4-beta/"&gt;Silverlight 4&lt;/a&gt; Beta&amp;#160; (which includes RIA Services)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You can download the &lt;a href="http://brad_abrams.members.winisp.net/Projects/PDC2009/MyApp.Search.zip"&gt;completed solution as well.&lt;/a&gt;&amp;#160; and be sure to check out &lt;a href="http://blogs.msdn.com/brada/archive/2009/11/19/pdc09-talk-building-amazing-business-applications-with-silverlight-4-ria-services-and-visual-studio-2010.aspx"&gt;the full talk&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesImplementingSearch_14424/image.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesImplementingSearch_14424/image_thumb.png" width="383" height="192" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;First let’s write a new method on the DomainService to return the search results.&amp;#160; In this case I want to return any Plates who’s name matches (grouped by Restaurant)&amp;#160; and any Restaurant who’s name matches.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:4a3298e5-1df5-4c0a-937e-e5f7af0ea945" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IQueryable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;Restaurant&lt;/span&gt;&amp;gt; SearchRestaurants(&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; term)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000"&gt;//Find all plates that match, grouped by restaurant&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; restaurantPlatesList = &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.ObjectContext.Restaurants&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Where (r =&amp;gt; r.Plates.Any (p=&amp;gt;p.Name.Contains(term)))&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.OrderBy(k =&amp;gt; k.ID);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; restaurant &lt;span style="color:#0000ff"&gt;in&lt;/span&gt; restaurantPlatesList)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; plateList = ObjectContext.Plates&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;.Where(p =&amp;gt; p.RestaurantID == restaurant.ID)&lt;/li&gt; &lt;li&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;.Where(p =&amp;gt; p.Name.Contains(term));&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; plate &lt;span style="color:#0000ff"&gt;in&lt;/span&gt; plateList)&lt;/li&gt; &lt;li&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;restaurant.Plates.Add(plate);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000"&gt;//Find all restaurants that match&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; restaurantsList = &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.ObjectContext.Restaurants&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Where(r =&amp;gt; r.Name.Contains(term) &amp;amp;&amp;amp;&lt;/li&gt; &lt;li&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!restaurantPlatesList.Contains(r));&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; restaurantPlatesList.Concat(restaurantsList);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;In line 1, you see that we are defining a new query that returns Restaurants… this one has a different name, and takes a search term as an argument.&amp;#160; &lt;/p&gt;  &lt;p&gt;In line 4-6, we are getting all the restaurants that that have any plates that match the search term.&lt;/p&gt;  &lt;p&gt;In line 7-14, we are looping through all those restaurants and manually adding the plates that match to the collection we will return.&amp;#160; Effectively, we are manually creating the instance in just the shape we need it for the client.&lt;/p&gt;  &lt;p&gt;In line 17-18, we are getting the Restaurants that match and that are not already included.&amp;#160; &lt;/p&gt;  &lt;p&gt;and finally, in line 21, we return the concatenation of the two queries.&amp;#160; &lt;/p&gt;  &lt;p&gt;Notice that this query is designed to return Restaurants AND the Plates that are related.&amp;#160;&amp;#160; By default, related entities are not included (in order to save bandwidth).. so we need to go into the metadata file and explicitly include them.&lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:5388a514-7769-46bd-9c45-2ce0329c3a8f" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;internal&lt;/span&gt; &lt;span style="color:#0000ff"&gt;sealed&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;RestaurantMetadata&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color:#2b91af"&gt;Include&lt;/span&gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;EntityCollection&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;Plate&lt;/span&gt;&amp;gt; Plates;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now, in the Silverlight client.&amp;#160; First we need to wire up the Search button on MainPage.xaml..&amp;#160;&amp;#160; There we just need to follow the same pattern we saw in the earlier post:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:4cacc041-2637-4b22-ae05-9b9a2e7964dc" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; button1_Click(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ContentFrame.Navigate(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Uri&lt;/span&gt;(&lt;span style="color:#a31515"&gt;"/Search?term="&lt;/span&gt; + searchBox.Text,&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#2b91af"&gt;UriKind&lt;/span&gt;.Relative));&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Then the search page, again we build it the same way as we saw in the earlier post, by simply drag and dropping from the data sources window.&amp;#160;&amp;#160; Notice that we now have two different query methods for Restaurants.&amp;#160; So we simply select the right one and then drag and drop on the form as we saw in the earlier post:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesImplementingSearch_14424/image_3.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesImplementingSearch_14424/image_thumb_3.png" width="291" height="411" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;After we get the UI laid out correctly you end up with a pager and all the columns set right. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesImplementingSearch_14424/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesImplementingSearch_14424/image_thumb_4.png" width="420" height="264" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then wire up the parameter to the SearchRestaurants query method to the query string…&lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:0044bbcb-5a30-4232-93e3-d8c794c747d1" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; OnNavigatedTo(&lt;span style="color:#2b91af"&gt;NavigationEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.restaurantDomainDataSource.QueryParameters.Add(&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; System.Windows.Data.&lt;span style="color:#2b91af"&gt;Parameter&lt;/span&gt;()&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ParameterName = &lt;span style="color:#a31515"&gt;"term"&lt;/span&gt;,&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Value = NavigationContext.QueryString[&lt;span style="color:#a31515"&gt;"term"&lt;/span&gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/p&gt;  &lt;p&gt;Now i’d like to display the Plates for each Restaurant that is returned.&amp;#160; To do that, i’ll make use of the RowDetails feature of DataGrid. &lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:518fb955-c692-470b-a31d-7b2addcde609" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGrid.RowDetailsTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&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;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ListBox&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ItemsSource&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Plates&lt;/span&gt;&lt;span style="color:#0000ff"&gt;}"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Orientation&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Horizontal"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&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;&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;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Image&lt;/span&gt; &lt;span style="color:#ff0000"&gt; Source&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=IconPath,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Converter&lt;/span&gt;&lt;span style="color:#0000ff"&gt;={&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ImagePathConverter1&lt;/span&gt;&lt;span style="color:#0000ff"&gt;}}"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="40,0,10,0"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Image&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&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;&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;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&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;&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;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#ff0000"&gt; Text&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=Name}"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="400"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; TextWrapping&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Wrap"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; FontWeight&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Bold"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&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;&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;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Text&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=Description}"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="400"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; TextWrapping&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Wrap"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&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;&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;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;HyperlinkButton&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Click&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="HyperlinkButton_Click"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Content&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Details..."&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; NavigateUri&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ID&lt;/span&gt;&lt;span style="color:#0000ff"&gt;}" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&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;&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;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&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;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ListBox&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGrid.RowDetailsTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/p&gt;  &lt;p&gt;Run it and we get this sort of view… &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesImplementingSearch_14424/image_5.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesImplementingSearch_14424/image_thumb_5.png" width="507" height="349" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice the URL includes the search term, so I can send this around in email to share my search results bookmark it for future reference.&amp;#160; &lt;/p&gt;  &lt;p&gt;Now, you might want to drill into the details on what of these plates… so let’s handle that “Details..” hyperlink.&amp;#160; In the code behind for the search page, we handle navigating to the Plates page with a the right query string paramaters.&lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:7ef8ce23-10cf-46a0-9fe4-ddd80b75dd3c" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; HyperlinkButton_Click(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; button = sender &lt;span style="color:#0000ff"&gt;as&lt;/span&gt; &lt;span style="color:#2b91af"&gt;HyperlinkButton&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; plate = button.DataContext &lt;span style="color:#0000ff"&gt;as&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Plate&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NavigationService.Navigate(&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Uri&lt;/span&gt;(&lt;span style="color:#a31515"&gt;"/Plates?restaurantId="&lt;/span&gt; + plate.RestaurantID + &lt;span style="color:#a31515"&gt;"&amp;amp;"&lt;/span&gt; +&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#a31515"&gt;"plateId="&lt;/span&gt; + plate.ID,&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;UriKind&lt;/span&gt;.Relative));&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now we need to make a slight tweak to the Plates page because it does no know about the plateId query string parameter.&amp;#160; &lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:35d1edfd-622d-4b53-a8ad-7f4172d687f8" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; OnNavigatedTo(&lt;span style="color:#2b91af"&gt;NavigationEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000"&gt;//Handle RestaurantID&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plateDomainDataSource.QueryParameters.Add(&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; System.Windows.Data.&lt;span style="color:#2b91af"&gt;Parameter&lt;/span&gt;()&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&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;ParameterName = &lt;span style="color:#a31515"&gt;"resId"&lt;/span&gt;,&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;Value = NavigationContext.QueryString[&lt;span style="color:#a31515"&gt;"restaurantId"&lt;/span&gt;]&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000"&gt;//Handle PlateID&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; qs = NavigationContext.QueryString;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (qs.ContainsKey(&lt;span style="color:#a31515"&gt;"plateId"&lt;/span&gt;))&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.plateDomainDataSource.FilterDescriptors = &lt;/li&gt; &lt;li&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;&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;FilterDescriptorCollection&lt;/span&gt;();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.plateDomainDataSource.FilterDescriptors.Add(&lt;/li&gt; &lt;li&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;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;FilterDescriptor&lt;/span&gt;(&lt;span style="color:#a31515"&gt;"ID"&lt;/span&gt;,&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;FilterOperator&lt;/span&gt;.IsEqualTo, qs[&lt;span style="color:#a31515"&gt;"plateId"&lt;/span&gt;]));&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The first few lines to handle the RestaurantID were already there, so we just needed to add the code to handle the PlateID..&amp;#160; Notice we don’t need to change the query method on the server for this, we just add a new where clause that will get sent to the server and executed there.&amp;#160; &lt;/p&gt;  &lt;p&gt;The result:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesImplementingSearch_14424/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesImplementingSearch_14424/image_thumb_6.png" width="489" height="336" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Again, notice the URL, something we can bookmark or send around in email, etc.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I hope you got something valuable from this walkthrough… You can download the &lt;a href="http://brad_abrams.members.winisp.net/Projects/PDC2009/MyApp.Search.zip"&gt;completed solution as well&lt;/a&gt; and be sure to check out &lt;a href="http://blogs.msdn.com/brada/archive/2009/11/19/pdc09-talk-building-amazing-business-applications-with-silverlight-4-ria-services-and-visual-studio-2010.aspx"&gt;the full talk&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Have fun!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9928730" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/brada/archive/tags/RIAServices/default.aspx">RIAServices</category></item><item><title>RIA Services: A DomainService IS A WCF Service – Add Service Reference</title><link>http://blogs.msdn.com/brada/archive/2009/11/22/ria-services-a-domainservice-is-a-wcf-service-add-service-reference.aspx</link><pubDate>Mon, 23 Nov 2009 07:57:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9927146</guid><dc:creator>BradA</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/brada/comments/9927146.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9927146</wfw:commentRss><description>&lt;p&gt;I made the fairly bold statement at &lt;a href="http://blogs.msdn.com/brada/archive/2009/11/19/pdc09-talk-building-amazing-business-applications-with-silverlight-4-ria-services-and-visual-studio-2010.aspx"&gt;my PDC09 talk&lt;/a&gt; that a DomainService IS A WCF Service.&amp;#160; That is, everything you know about a WCF service should be true of a DomainService.&amp;#160; I didn’t have time to get into this in my talk, so I thought I’d hit the highlights here.&amp;#160; And in the process show how to consume a DomainService from a WinForms.&amp;#160;&amp;#160;&amp;#160; You can also see more examples at: &lt;a title="http://code.msdn.microsoft.com/RiaServices" href="http://code.msdn.microsoft.com/RiaServices"&gt;http://code.msdn.microsoft.com/RiaServices&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;You need:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx"&gt;Visual Studio 2010 Beta 2&lt;/a&gt; (this actually works exactly the same in VS2008 and the corresponding &lt;a href="http://silverlight.net/getstarted/riaservices/"&gt;RIA Services drop&lt;/a&gt;)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://silverlight.net/getstarted/silverlight-4-beta/"&gt;Silverlight 4&lt;/a&gt; Beta&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;You can download the &lt;a href="http://brad_abrams.members.winisp.net/Projects/PDC2009/MyApp.WCF.zip"&gt;completed solution as well.&lt;/a&gt;&amp;#160; and be sure to check out &lt;a href="http://blogs.msdn.com/brada/archive/2009/11/19/pdc09-talk-building-amazing-business-applications-with-silverlight-4-ria-services-and-visual-studio-2010.aspx"&gt;the full talk&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;1. Getting to the Service&lt;/h3&gt;  &lt;p&gt;The first thing we need to do is get at the data underlying service.&amp;#160; In the mainstream Silverlight case this is all handled for you by the implicit link between the Silverlight client and the ASP.NET server.&amp;#160; However, in the vanilla WCF case, you get the full control.&amp;#160; The URL to the service is of the following format: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://[hostname]/[namespacename]-[classname].svc"&gt;http://[hostname]/[namespacename]-[classname].svc&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;so in my case that is:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://localhost:30335/Services/MyApp-Web-DishViewDomainService.svc"&gt;http://localhost:30335/Services/MyApp-Web-DishViewDomainService.svc&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Hitting that URL in the browser gives you the very familiar WCF proxy help screen:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesADomainServiceISAWCFServiceAd_14E29/image.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesADomainServiceISAWCFServiceAd_14E29/image_thumb.png" width="240" height="166" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And tacking on the ?wsdl gives you the WSDL for this service&lt;/p&gt;  &lt;p&gt;&lt;a title="http://localhost:30335/Services/MyApp-Web-DishViewDomainService.svc?wsdl" href="http://localhost:30335/Services/MyApp-Web-DishViewDomainService.svc?wsdl"&gt;http://localhost:30335/Services/MyApp-Web-DishViewDomainService.svc?wsdl&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesADomainServiceISAWCFServiceAd_14E29/image_3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesADomainServiceISAWCFServiceAd_14E29/image_thumb_3.png" width="240" height="166" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The rest is easy for anyone halfway familiar with WCF… Create a new WinForms project and select Add Service Reference.&amp;#160; Enter the URL (note discover doesn’t work for this sort of service yet)…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesADomainServiceISAWCFServiceAd_14E29/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesADomainServiceISAWCFServiceAd_14E29/image_thumb_4.png" width="240" height="194" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The you have a service!&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;2. Querying for the Data&lt;/h2&gt;  &lt;p&gt;Now, we have a service, let’s look at actually getting data out of it.&amp;#160; In this case I already have a WinForms DataGridView on my form.&amp;#160; So getting data into it should be no problem.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:db378a50-24c7-496f-89a1-14771c5bea02" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; Form1_Load(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af"&gt;EventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; context = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;DishViewDomainServiceClient&lt;/span&gt;(&lt;span style="color:#a31515"&gt;"BasicHttpBinding_DishViewDomainService"&lt;/span&gt;);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; plates = context.GetPlates(&lt;span style="color:#a52a2a"&gt;4&lt;/span&gt;);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.dataGridView1.DataSource = plates.RootResults;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af"&gt;DataGridViewRow&lt;/span&gt; row &lt;span style="color:#0000ff"&gt;in&lt;/span&gt; dataGridView1.Rows)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PlatesListOriginals.Add(ToPlate(row));&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataGridView1.CellEndEdit += dataGridView1_CellEndEdit;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataGridView1.SelectionChanged += dataGridView1_SelectionChanged;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;In line 3, we create a new instance of the web service client and point it at the right binding.&amp;#160;&amp;#160;&amp;#160; The service exposes a couple of different bindings as you can see in the app.config file for the WinForms app:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:fd6d80c9-99d9-4a10-977a-7f14ceefc7c1" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;endpoint&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;address&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;http://localhost:30335/Services/MyApp-Web-DishViewDomainService.svc/soap&lt;/span&gt;"&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;binding&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;basicHttpBinding&lt;/span&gt;"&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;bindingConfiguration&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;BasicHttpBinding_DishViewDomainService&lt;/span&gt;"&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;contract&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;ServiceReference1.DishViewDomainService&lt;/span&gt;"&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;BasicHttpBinding_DishViewDomainService&lt;/span&gt;"&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;endpoint&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;address&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;http://localhost:30335/Services/MyApp-Web-DishViewDomainService.svc/binary&lt;/span&gt;"&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;binding&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;customBinding&lt;/span&gt;"&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;bindingConfiguration&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;BinaryHttpBinding_DishViewDomainService&lt;/span&gt;"&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;contract&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;ServiceReference1.DishViewDomainService&lt;/span&gt;"&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;BinaryHttpBinding_DishViewDomainService&lt;/span&gt;"&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;In line 4, we call the service to get our list of Plates… in this case we are doing things synchronously.. you could of course do it async if you’d like.&lt;/p&gt;  &lt;p&gt;In line&amp;#160; 5, we bind the DataGridView to the results of this call. &lt;/p&gt;  &lt;p&gt;In lines 6-9, we are saving off the “original” values..&amp;#160; for each item we got.. this will help us when we do updates.&lt;/p&gt;  &lt;p&gt;In line 10, we handle the cell edit event, we will come back to look at that later.&lt;/p&gt;  &lt;p&gt;in line 11, we sign up for the selection changed event so we can initialize the picture…&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:932028f2-4030-458c-a58c-5a8fa8009ce4" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;void&lt;/span&gt; dataGridView1_SelectionChanged(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af"&gt;EventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;Plate&lt;/span&gt; currentPlate = ToPlate(dataGridView1.CurrentRow);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.pictureBox1.ImageLocation = &lt;span style="color:#a31515"&gt;"http://hanselman.com/abrams/Images/Plates/"&lt;/span&gt; + currentPlate.ImagePath;&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt; Be patient with this one… sometimes it takes a while load a picture.&amp;#160; it is using hanselman’s server which gets slammed sometimes ;-) &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesADomainServiceISAWCFServiceAd_14E29/image_5.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesADomainServiceISAWCFServiceAd_14E29/image_thumb_5.png" width="522" height="198" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now we have our data, we can scroll through it and view the pretty pictures.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;3. Updating the Data&lt;/h2&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;But how do we update the data… well, let’s take a look at CellEditEnd event handler…&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:10ecc502-496c-4e61-9854-792a2277da0d" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;void&lt;/span&gt; dataGridView1_CellEndEdit(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af"&gt;DataGridViewCellEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; context = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;DishViewDomainServiceClient&lt;/span&gt;(&lt;span style="color:#a31515"&gt;"BasicHttpBinding_DishViewDomainService"&lt;/span&gt;);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;Plate&lt;/span&gt; currentPlate = ToPlate(dataGridView1.Rows[e.RowIndex]);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;ChangeSetEntry&lt;/span&gt;[] changeSet = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt;[] {&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;ChangeSetEntry&lt;/span&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OriginalEntity = PlatesListOriginals[e.RowIndex],&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Entity = currentPlate,&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Operation = &lt;span style="color:#2b91af"&gt;DomainOperation&lt;/span&gt;.Update&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;context.SubmitChanges(changeSet);&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;In line 3, we are creating a new context.&amp;#160; we could be sharing with the load method, but I thought this would be cleaner to follow.&lt;/p&gt;  &lt;p&gt;In line 4, we save off the currently selected plate.&lt;/p&gt;  &lt;p&gt;In lines 5-10 we are building up a changeset to send to the server.&amp;#160; &lt;/p&gt;  &lt;p&gt;Notice we need to give it the original values we saved off in the load method.&amp;#160;&amp;#160;&amp;#160; Getting the original values right is the likely the hardest part here.&amp;#160; Keep in mind that assignment in C# (and VB) is by default by reference.&amp;#160; So you can’t just store off a reference, you must actually make a copy of the original values. &lt;/p&gt;  &lt;p&gt;Then in line 12, we submit the changes.&amp;#160; &lt;/p&gt;  &lt;p&gt;Make a change, tab off it..&amp;#160; This will call the server and post your update.&amp;#160;&amp;#160; Re run the app to see that it took. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesADomainServiceISAWCFServiceAd_14E29/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/RIAServicesADomainServiceISAWCFServiceAd_14E29/image_thumb_6.png" width="240" height="74" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice here we are sending one item in the change set.&amp;#160; You could of course build up a change set on the client with many entries and then send them as a batch.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I hope that helps to make it clear how a DomainService IS A WCF Service… You can download the &lt;a href="http://brad_abrams.members.winisp.net/Projects/PDC2009/MyApp.WCF.zip"&gt;completed solution as well.&lt;/a&gt;&amp;#160; and be sure to check out &lt;a href="http://blogs.msdn.com/brada/archive/2009/11/19/pdc09-talk-building-amazing-business-applications-with-silverlight-4-ria-services-and-visual-studio-2010.aspx"&gt;the full talk&lt;/a&gt;.&amp;#160; &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9927146" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://blogs.msdn.com/brada/archive/tags/RIAServices/default.aspx">RIAServices</category><category domain="http://blogs.msdn.com/brada/archive/tags/WCF/default.aspx">WCF</category></item><item><title>PDC09 Talk: Building Amazing Business Applications with Silverlight 4, RIA Services and Visual Studio 2010</title><link>http://blogs.msdn.com/brada/archive/2009/11/19/pdc09-talk-building-amazing-business-applications-with-silverlight-4-ria-services-and-visual-studio-2010.aspx</link><pubDate>Thu, 19 Nov 2009 21:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9925774</guid><dc:creator>BradA</dc:creator><slash:comments>29</slash:comments><comments>http://blogs.msdn.com/brada/comments/9925774.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9925774</wfw:commentRss><description>&lt;p&gt;I had a great time at &lt;a href="http://microsoftpdc.com/Sessions/CL21"&gt;my talk today at PDC2009&lt;/a&gt;.&amp;#160; I was able to spend much of the time in a demo…&amp;#160;&amp;#160; Here is a summary of that demo so you can walk through it on your own machine:&lt;/p&gt;  &lt;p&gt;What you need to get started:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx"&gt;Visual Studio 2010 Beta2&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://silverlight.net/"&gt;Silverlight 4 Beta&lt;/a&gt; (now includes &lt;a href="http://silverlight.net/riaservices/"&gt;RIA Services&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://brad_abrams.members.winisp.net/Projects/PDC2009/MyApp.zip"&gt;Completed Solution&lt;/a&gt; (starting step and &lt;a href="http://brad_abrams.members.winisp.net/Projects/PDC2009/MyApp.Starter.zip"&gt;demo files&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;Check out &lt;a href="http://brad_abrams.members.winisp.net/Projects/PDC2009/RIAServicesOverviewPDC2009.pptx"&gt;the slides&lt;/a&gt;&amp;#160; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Starting Off&lt;/h3&gt;  &lt;p&gt;I am starting off with the new Business Application Template that gets installed with RIA Services.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb.png" width="358" height="255" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This new template includes:&lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;Pattern for page navigation &lt;/li&gt;      &lt;li&gt;Log\Logout and new user registration support &lt;/li&gt;      &lt;li&gt;Localizable &lt;/li&gt;      &lt;li&gt;User settings &lt;/li&gt;      &lt;li&gt;Shared Code &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For this demo, I am going to used a customized version of the template..&lt;/p&gt;  &lt;p&gt;After you create the project, you see we have a simple solution setup that follows the “RIA Application” pattern.&amp;#160; That is one application that happens to span a client (Silverlight) and server (asp.net) tiers.&amp;#160; These two are tied such that any change in the Silverlight client is reflected in the server project (a new XAP is placed in client bin) and appropriate changes in the server result in new functionality being exposed to the Silverlight client. To parts of the same application. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_3.png" width="158" height="335" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Exposing the Data&lt;/h3&gt;  &lt;p&gt;I started out with an Entity Framework model.&amp;#160; RIA Services supports any DAL including Linq2Sql, NHibernate as well as DataSets and DataReader\Writer.&amp;#160;&amp;#160; But EF has made some great improvements in .NET 4, so I felt it was a good place to start.&amp;#160; &lt;/p&gt;  &lt;p&gt;So here is the EF model I created.&amp;#160; Basically we have a set of restaurants, each of which has a set of plates they serve.&amp;#160; A very simple model designed many to show off the concepts.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_4.png" width="281" height="292" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Then we need to place to write our business logic that controls how the Silverlight client can interact with this data.&amp;#160;&amp;#160;&amp;#160; To do this create a new DomainService.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_5.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_5.png" width="305" height="217" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then select the tables you want to expose:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_6.png" width="196" height="240" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now, let’s look at our code for the DomainService…&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ab56b491-32f8-4c87-a5a4-827f09522860" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;using&lt;/span&gt; System.Linq;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;using&lt;/span&gt; System.Web.Ria;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;using&lt;/span&gt; System.Web.DomainServices.Providers;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;namespace&lt;/span&gt; MyApp.Web&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color:#2b91af"&gt;EnableClientAccess&lt;/span&gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;DishViewDomainService&lt;/span&gt; : &lt;/li&gt; &lt;li&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;&lt;span style="color:#2b91af"&gt;LinqToEntitiesDomainService&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;DishViewEntities&lt;/span&gt;&amp;gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IQueryable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;Restaurant&lt;/span&gt;&amp;gt; GetRestaurants()&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&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;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.ObjectContext.Restaurants&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Where (r=&amp;gt;r.City != &lt;span style="color:#a31515"&gt;"Raleigh"&lt;/span&gt;)&lt;/li&gt; &lt;li&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.OrderBy(r=&amp;gt;r.ID);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;In line 7 – we are enabling this service to be accessed from clients.. without this, the DomainService is only accessible from on the machine (for example for an ASP.NET hosted on the same machine). &lt;/p&gt;  &lt;p&gt;In line 8: we are defining the DomainService – you should think of a DomainService as just a special kind of WCF Service.. one that is higher level and has all the right defaults set so that there is zero configuration needed.&amp;#160;&amp;#160; Of course the good news is that if you *need* to you can get access to the full richness of WCF and configure the services however you’d like. &lt;/p&gt;  &lt;p&gt;In line 9: you see we are using the LinqToEntitiesDomainService.&amp;#160; RIA Services supports any DAL including LinqToSql or NHibernate.&amp;#160; Or what I think is very common is just POCO.. that is deriving from DomainService directly.&amp;#160; See examples of these here…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;In line 11:&amp;#160; We are defining a Query method.. this is based on LINQ support added in VS2008.&amp;#160; Here we define the business logic involved in return data to the client.&amp;#160; When the framework calls this method, it will compose a LINQ query including paging, sorting, filtering from the client then execute it directly against the EF model which translate it into optimized TSQL code.&amp;#160; So no big chunks of unused data are brought to the mid-tier or the client.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Consuming the data on the client&lt;/h3&gt;  &lt;p&gt;Now let’s switch over the client project and look at how we consume this.&amp;#160; &lt;/p&gt;  &lt;p&gt;in Views\Home.xaml we have a very simple page with just a DataGrid defined.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:35f739d2-a8df-472c-827b-586cd8a99556" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="LayoutRoot"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGrid&lt;/span&gt;&lt;span style="color:#ff0000"&gt; AutoGenerateColumns&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="True"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="dataGrid1"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="456"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="618" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;now let’s flip over to codebhind.. &lt;/p&gt;  &lt;p&gt;Notice we have a MyApp.Web namespace available on the client. Notice that is the same namespace we defined our DomainService in..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_7.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_7.png" width="240" height="77" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So, let’s create a local context for accessing our DomainService.&amp;#160; First thing you will notice is that VS2010 Intellisense makes it very easy to find what we want.. it now matches on any part of the class name..&amp;#160; So just typing “domainc” narrows our options to the right one..&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_8.png" width="347" height="103" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:aa381008-c2cd-4001-bce2-b7a8ec5c0d5f" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; context = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;DishViewDomainContext&lt;/span&gt;();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;dataGrid1.ItemsSource = context.Restaurants;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;context.Load(context.GetRestaurantsQuery());&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;In line 2, notice there is a property on context called Restaurants.&amp;#160; How did we get that there?&amp;#160; Well, there is a query method defined on the DomainService returning a type of type Restaurant.&amp;#160; This gives us a very clean way to do databinding.&amp;#160; Notice this call is actually happening async, but we don’t have to deal with any of that complexity.&amp;#160; No event handlers, callbacks, etc.&amp;#160; &lt;/p&gt;  &lt;p&gt;In line 4, while the whole point of RIA Services is to make n-tier development as easy as two-tier development that most of us are used to, we want to make sure the applications that are created are well behaved.&amp;#160;&amp;#160; So part of this is we want to be explicit when a network call is being made.. this is not transparent remoting.&amp;#160; Network calls must be explicit.&amp;#160;&amp;#160;&amp;#160; In this line we are mentioning which query method to use as you might define more than one for the same type with different logic.&amp;#160; &lt;/p&gt;  &lt;p&gt;Now we run it.. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_9.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_9.png" width="381" height="267" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is very cool and simple.&amp;#160; But in a real world case, i am guessing you have more than 20 records… sometimes you might have 100s, or thousands or more.&amp;#160; You can’t just send all those back to the client.&amp;#160; Let’s see how you can implement paging and look at some of the new design time features in VS2010 as well.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;RIA Services support in Visual Studio 2010&lt;/h3&gt;  &lt;p&gt;Let’s delete that code we just wrote and flip over to the design surface and delete that datagrid.&amp;#160; &lt;/p&gt;  &lt;p&gt;Drop down the DataSources window (you may need to look under the Data menu for “Show Data Sources”&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_10.png" width="240" height="201" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If you are familiar with WinForms or WPF development, this will look at least somewhat familiar to you.&amp;#160;&amp;#160; Notice our DishViewDomainContext is listed there with a table called Restaurant.&amp;#160; Notice this is exactly what we saw in the code above because this window is driven off that same DomainContext.&amp;#160; &lt;/p&gt;  &lt;p&gt;Dropping down the options on Restaurant, we see we have a number of options for different controls that can be used to view this data… of course this is extensible and we expect 3rd party as well as your custom controls to work here.&amp;#160;&amp;#160;&amp;#160; Next see the query method here that is checked.&amp;#160; That lists all the available options for query methods that return Restaurant.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_11.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_11.png" width="240" height="235" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;Now if we expand the view on Restaurant, we see all the data member we have exposed.&amp;#160; This view gives us a chance to change how each data member will be rendered.&amp;#160; Notice I have turned off the ID and changed the Imagepath to an Image control.&amp;#160; Again this is an extensible and we expect 3rd party controls to plug in here nicely.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_12.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_12.png" width="170" height="240" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now, drag and drop Restaurant onto the form and we get some UI&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_13.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_13.png" width="458" height="252" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;And for you Xaml heads that want to know what really happens… Two things.&amp;#160; First if the DomainDataSource is not already created, one is created for you. &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:fbad467c-23df-4b10-8333-66abf592b249" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;riaControls&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DomainDataSource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; AutoLoad&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="True"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="0"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; LoadedData&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="restaurantDomainDataSource_LoadedData"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="restaurantDomainDataSource"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; QueryName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="GetRestaurantsQuery"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="0"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="320,240,320,144"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;riaControls&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DomainDataSource.DomainContext&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;my&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DishViewDomainContext&lt;/span&gt;&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;riaControls&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DomainDataSource.DomainContext&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;riaControls&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DomainDataSource&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;If you notice the LoadedData event is wired up… This is to give a nice user experience in the case of an error.&amp;#160; You should certainly customize what is defaulted for you… but it is a good place to start.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:34d527d0-3e5f-4c0f-8534-05e9fce2cf1c" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; restaurantDomainDataSource_LoadedData(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;LoadedDataEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li&gt;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (e.HasError)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;MessageBox&lt;/span&gt;.Show(e.Error.ToString(), &lt;span style="color:#a31515"&gt;"Load Error"&lt;/span&gt;,&lt;/li&gt; &lt;li&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;&lt;span style="color:#2b91af"&gt;MessageBoxButton&lt;/span&gt;.OK);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.MarkErrorAsHandled();&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Finally, the DataGrid is created with a set of columns.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a4304f7f-8fe2-4810-9278-b11ad33acf11" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGrid&lt;/span&gt;&lt;span style="color:#ff0000"&gt; AutoGenerateColumns&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="False"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; ItemsSource&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ElementName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=restaurantDomainDataSource,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=Data}"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="restaurantDataGrid"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; RowDetailsVisibilityMode&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="VisibleWhenSelected"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGrid.Columns&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="imagePathColumn"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; Header&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Image Path"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="SizeToHeader"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&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;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn.CellTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Image&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Source&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=ImagePath}" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&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;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn.CellTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTextColumn&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="nameColumn"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Binding&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=Name}"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; Header&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Name"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="SizeToHeader" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTextColumn&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="addressColumn"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Binding&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=Address}"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; Header&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Address"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="SizeToHeader" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Then setup a grid cell by click 4/5ths of the way down on the left grid adorner.&amp;#160; Then select the grid, right click, select reset layout all.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_14.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_14.png" width="403" height="240" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;.. add poof! VS automatically lays out the DataGrid to fill the cell just right.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_15.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_15.png" width="240" height="172" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now, personally, I always like the Name column to come first.&amp;#160; Let’s go fix that by using the DataGrid column designer.&amp;#160; Right click on the DataGrid select properties then click on the Columns property..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_16.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_16.png" width="240" height="144" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In this designer you can control the order of columns and the layout, etc.&amp;#160;&amp;#160; I moved the image and name fields to the top.&lt;/p&gt;  &lt;p&gt;Now, let’s add a DataPager such that we only download a manageable number of records at a time. From the toolbox, simply drag the datapager out.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_17.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_17.png" width="240" height="155" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We use our same trick to have VS auto layout the control&amp;#160; Right click on it and select Reset Layout\All.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_18.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_18.png" width="240" height="102" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;That is cool, but there is a big&amp;#160; gap between the DataGrid and the DataPager.. I really want them to be right.&amp;#160; This is easy to fix.&amp;#160; Right click on the grid adorner and select “Auto”.. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_19.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_19.png" width="414" height="81" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Perfect!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_20.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_20.png" width="342" height="104" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now, we just need to wire this up to the same DataSource our DataGrid is using “connect-the-dots” databinding.&amp;#160; Simply drag the Restaurant from the DataSources window on top of the DataGrid.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_21.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_21.png" width="240" height="180" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;For you Xaml heads, you’ll be interested in the Xaml this creates..&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:54d50385-13af-4ad0-aa07-38d9fa2d625a" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataPager&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Grid.Row&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="1"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="dataPager1"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Source&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ElementName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=restaurantDomainDataSource,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=Data}" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Notice, we don’t need to create a new DomainDataSource here… we will use the one that is already on the page. &lt;/p&gt;  &lt;p&gt;Now, we are doing an async call.. so let’s drag a&amp;#160; BusyIndicator from the new Silverlight 4 Toolkit.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_22.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_22.png" width="240" height="171" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;We need to write up the IsBusy to the restaurantDomainDataSource.DomainContext.IsLoading… Luckily there is some nice databinding&amp;#160; helper in VS2010.&amp;#160; Select properties, then IsBusy, then DataBinding. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_23.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_23.png" width="374" height="234" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Again, for you Xaml heads, the Xaml that gets generated is pretty much what you’d expect.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:521f6b94-d209-442f-a03a-220e7af5ed10" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;controlsToolkit&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;BusyIndicator&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="78"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Left"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="226,201,0,0"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="busyIndicator1"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Top"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="177"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&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;&lt;span style="color:#ff0000"&gt; IsBusy&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ElementName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=restaurantDomainDataSource,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=DomainContext.IsLoading}" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Loading…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_24.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_24.png" width="240" height="168" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;and once it is loaded…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_25.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_25.png" width="240" height="168" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Very cool…&amp;#160; that was a very easy was to get your data.&amp;#160;&amp;#160;&amp;#160; Page through it and notice that with each page we are going back all the way to the data tier to load more data.&amp;#160; So you could just as easily do this on a dataset of million+ records.&amp;#160;&amp;#160;&amp;#160; But what is more, is that sorting works as well and just as you’d expect.&amp;#160; It doesn’t sort just the local data, it sorts the full dataset and it does it all way back onto the data tier and just pulls forward the page of data you need to display.&lt;/p&gt;  &lt;p&gt;But our pictures are not showing up… let’s look at how we wire up the pictures.&amp;#160; The reason they are not showing up is that our database returns just the simple name of the image, not the full path.&amp;#160; This allows us to be flexible about the where the images are stored.&amp;#160;&amp;#160; The standard way to handle this is to write a &lt;a href="http://timheuer.com/blog/archive/2008/07/30/format-data-in-silverlight-databinding-valueconverter.aspx"&gt;value converter&lt;/a&gt;.&amp;#160;&amp;#160;&amp;#160;&amp;#160; Here is a simple example:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:fb8b7b47-1890-49d0-b1b8-aadc7d2614a7" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;ImagePathConverter&lt;/span&gt; : &lt;span style="color:#2b91af"&gt;IValueConverter&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; value, &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt; targetType, &lt;span style="color:#0000ff"&gt;object&lt;/span&gt; parameter, System.Globalization.&lt;span style="color:#2b91af"&gt;CultureInfo&lt;/span&gt; culture)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; path = value.ToString();&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;path = path.Replace(&lt;span style="color:#a31515"&gt;":"&lt;/span&gt;, &lt;span style="color:#a31515"&gt;""&lt;/span&gt;);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;path = path.Replace(&lt;span style="color:#a31515"&gt;"/"&lt;/span&gt;, &lt;span style="color:#a31515"&gt;""&lt;/span&gt;);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;path = path.Replace(&lt;span style="color:#a31515"&gt;"&amp;#92;&amp;#92;"&lt;/span&gt;, &lt;span style="color:#a31515"&gt;""&lt;/span&gt;);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (path.Length &amp;gt; &lt;span style="color:#a52a2a"&gt;100&lt;/span&gt;)&lt;/li&gt; &lt;li&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;path = path.Substring(&lt;span style="color:#a52a2a"&gt;0&lt;/span&gt;, &lt;span style="color:#a52a2a"&gt;100&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; &lt;span style="color:#a31515"&gt;"http://localhost/Images/"&lt;/span&gt; + path&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now, let’s look at how we wire this converter to the UI.&amp;#160;&amp;#160; First, let’s use the Document Outline to drill through the visual tree to find the Image control.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_26.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_26.png" width="99" height="240" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Then we select the properties on the image and wire up this converter.&amp;#160; If you have done this in Xaml directly before, you know it is hard to get right.&amp;#160; VS2010 makes this very easy!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_27.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_27.png" width="240" height="201" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Oh, and for you Xaml heads… here is what VS created..&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1fb04c20-8bdb-470f-83f7-1a628957500b" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;navigation&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;Page.Resources&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;my1&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;ImagePathConverter&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Key&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="ImagePathConverter1" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;navigation&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;Page.Resources&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;and&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6b96698e-43e4-4fb4-9e62-49e1013bdaf3" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn.CellTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Image&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Source&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=ImagePath,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Converter&lt;/span&gt;&lt;span style="color:#0000ff"&gt;={&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ImagePathConverter1&lt;/span&gt;&lt;span style="color:#0000ff"&gt;}}" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn.CellTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h3&gt;Silverlight Navigation&lt;/h3&gt;  &lt;p&gt;Now let’s look at how we drill down and get the details associated with each of these records.&amp;#160; I want to show this is a “web” way… So I’ll show how to create a deep link to a new page that will list just the plates for the restaurant you select.&amp;#160; &lt;/p&gt;  &lt;p&gt;First we add a bit of Xaml to add the link to the datagrid..&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:641cb7a0-1504-42cb-9847-ca04b568b8f1" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGrid.Columns&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Header&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=""&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn.CellTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&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;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Button&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Content&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="+"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Style&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; DetailsButtonStyle&lt;/span&gt;&lt;span style="color:#0000ff"&gt;}"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Click&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Button_Click"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Button&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&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;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn.CellTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataGridTemplateColumn&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;And to implement the button click handler…&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:adee9c9c-c9f0-4fcb-90a3-0e78733ac7b9" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; Button_Click(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, System.Windows.&lt;span style="color:#2b91af"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; res = &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.restaurantDomainDataSource.DataView.CurrentItem &lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;as&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Restaurant&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NavigationService.Navigate(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Uri&lt;/span&gt;(&lt;span style="color:#a31515"&gt;"/Plates?restaurantId="&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ res.ID, &lt;span style="color:#2b91af"&gt;UriKind&lt;/span&gt;.Relative));&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Here we are getting the currently selected Restaurant, then we cons up a new URL to the page “Plates”.&amp;#160; We pass a query string parameter of restaurantId… &lt;/p&gt;  &lt;p&gt;Now, let’s build out the Plates page that will the list of Plates for this restaurant.&amp;#160; First let’s great a a Plates page.&amp;#160; Let’s add a new Plates under the Views directory.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_28.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_28.png" width="240" height="171" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now we need to define a query to return the Plates.&amp;#160; Notice that only the data you select is exposed.&amp;#160; So we get to go back to the server, to our DishViewDomainService and add a new query method.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6304dd52-b111-4442-b337-99c31b3bc0f8" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IQueryable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;Plate&lt;/span&gt;&amp;gt; GetPlates()&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.ObjectContext.Plates&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.OrderBy(p =&amp;gt; p.Name);&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Now we go back to the client, and see your DataSources window now offers a new datasource: Plates. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_29.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_29.png" width="173" height="282" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now, just as we saw above, I will drag and drop that data source onto the form and i get a nice datagrid alreayd wired up to a DomainDataSource.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_30.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_30.png" width="240" height="170" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then, with a little formatting exactly as we saw above, we end up with…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_31.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_31.png" width="240" height="120" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And when we run it… First, you see the link we added to the list of Restaurants.. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_32.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_32.png" width="240" height="168" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Clicking on anyone of them navigates us to our Plates page we just built.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_33.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_33.png" width="240" height="108" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Customized Data Access&lt;/h3&gt;  &lt;p&gt;This is cool, but notice we are actually returning *all* the plates, not just the plates from the restaurant selected.&amp;#160;&amp;#160;&amp;#160; To address this first we need modify our GetPlates() query method to take in a resource id.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f2d2a784-e2df-4ab6-8850-2f21ec8261a2" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IQueryable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;Plate&lt;/span&gt;&amp;gt; GetPlates(&lt;span style="color:#0000ff"&gt;int&lt;/span&gt; resId)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.ObjectContext.Plates&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Where (p=&amp;gt;p.RestaurantID == resId)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.OrderBy(p =&amp;gt; p.Name);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Now, back on the client, we just need to pass the query string param…&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1c3a6a0b-1607-40f4-8751-56b7b84f081e" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; OnNavigatedTo(&lt;span style="color:#2b91af"&gt;NavigationEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plateDomainDataSource.QueryParameters.Add(&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; System.Windows.Data.&lt;span style="color:#2b91af"&gt;Parameter&lt;/span&gt;()&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ParameterName = &lt;span style="color:#a31515"&gt;"resId"&lt;/span&gt;,&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Value = NavigationContext.QueryString[&lt;span style="color:#a31515"&gt;"restaurantId"&lt;/span&gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Now, we run it and we get the just the plates for the restaurant we selected.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_34.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_34.png" width="360" height="162" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;what’s more is we now have a deep link such that it works when I email, IM or tweet this link to my buddy who happens to run a different browser ;-)&lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_35.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_35.png" width="353" height="150" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Ok… now for a details view…&amp;#160; Let’s do a bit more layout in the Plates.xaml.&amp;#160;&amp;#160; First, let’s split the form in half vertically to give us some cells to work in.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_36.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_36.png" width="240" height="159" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In the bottom left we will put the details view to allow us to edit this plate data.&amp;#160; Let’s go back to the DataSources window and change the UI type to Details.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_37.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_37.png" width="160" height="240" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Dragging that Details onto the form… we get some great UI generation that we can go in and customize. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_38.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_38.png" width="240" height="171" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In particular, let’s format that Price textbox as a “currency”… using the new String Formatting support in Silverlight 4.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_39.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_39.png" width="402" height="178" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And again, for you Xaml heads… this created:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:7bd698af-9b34-452b-bca6-e6736481bb86" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#ff0000"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=Price,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Mode&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=TwoWay,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ValidatesOnExceptions&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=true,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; NotifyOnValidationError&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=true,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; StringFormat&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;#92;&lt;span style="color:#0000ff"&gt;{&lt;/span&gt;0&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;c&lt;/span&gt;&amp;#92;&lt;span style="color:#0000ff"&gt;}}"&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Now, let’s add an image to the other side.&amp;#160; Simply drop an Image control on the form and select Reset Layout\All&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_40.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_40.png" width="240" height="183" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now we can easily change the image to be “Uniform”&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_41.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_41.png" width="404" height="249" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now we need to write up the binding here so that as selection changes, this image is update.&amp;#160; Luckily, that is very easy to do.&amp;#160;&amp;#160;&amp;#160; Simply drag and drop from the Data Sources window…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_42.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_42.png" width="359" height="290" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then we need to wire up our converter just as we saw before..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_43.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_43.png" width="240" height="171" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Run it…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_44.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_44.png" width="240" height="173" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;That looks great!&amp;#160; &lt;/p&gt;  &lt;p&gt;But when we try edit something, we get this error..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_45.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_45.png" width="240" height="126" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Editing Data&lt;/h3&gt;  &lt;p&gt;Ahh, that is a good point, we need to go back and explicitly define a Update method to our DomainService on the server. &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1f8de4e3-2436-4af6-bf60-cd79ff00f2e3" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; UpdatePlate(&lt;span style="color:#2b91af"&gt;Plate&lt;/span&gt; currentPlate)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentPlate.NumberUpdates++;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; orginal = &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.ChangeSet.GetOriginal(currentPlate);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (orginal.Price != currentPlate.Price)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentPlate.Price += &lt;span style="color:#a52a2a"&gt;1&lt;/span&gt;; &lt;span style="color:#008000"&gt;// add 1 dollar fee for changing price&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.ObjectContext&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.AttachAsModified(currentPlate, orginal);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;In line 3, notice we take the NumberUpdates and increment by one.&amp;#160; it is nice that we send the entry entity back and forth, so we can do entity level operations very easily.&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Next in line 5, we pull out the original value.. .this is the plate instance as the client saw it &lt;em&gt;before&lt;/em&gt; it was updated.&amp;#160; &lt;/p&gt;  &lt;p&gt;In line 7-10, we first check to see if the price has changed, if it has, we add a fee of one dollar for a price change.&amp;#160; &lt;/p&gt;  &lt;p&gt;Finally&amp;#160; in line 12-13, we submit this change to the database.&amp;#160; &lt;/p&gt;  &lt;p&gt;Now we just need to drop a button on the form.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_46.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_46.png" width="240" height="206" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then write some codebehind..&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c3d2c7ac-f5ff-43e1-bc2a-420e87ac1bbf" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; button1_Click(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.plateDomainDataSource.SubmitChanges();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;What this is going to do is find all the entities that are dirty (that have changes) and package them up and send them to the server.&amp;#160; &lt;/p&gt;  &lt;p&gt;Now notice if you make a change price to the data and hit submit the NumberUpdates goes up by one and the the price has the one dollar fee added. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_47.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_47.png" width="240" height="191" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then submit..&amp;#160; NumberUpdates is now 63 and the price is $73.84.. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_48.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_48.png" width="240" height="198" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then if you set a breakpoint on the server, change two or three records on the client.&amp;#160; Notice the breakpoint gets hit for each change.&amp;#160;&amp;#160;&amp;#160; We are batching these changes to make an efficient communication pattern.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_49.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_49.png" width="387" height="276" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Great.. now let’s look at data validation.&lt;/p&gt;  &lt;p&gt;We get some validation for free.&amp;#160; for example Calorie Count is a int, if we put a string in, we get a stock error message.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_50.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_50.png" width="240" height="168" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If we want to customize this a bit more, we can go back to the server and specify our validation there.&amp;#160; It is important to do it on the server because you want validation to happen&amp;#160; on the client for good UI, but on the server for the tightest security.&amp;#160; Following the DRY principle (Don’t Repeat Yourself) we have a single place to put this validation data that works on the client and the server. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:9ea30ba3-5520-4792-97a2-6ea78228abc9" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;[&lt;span style="color:#2b91af"&gt;Required&lt;/span&gt;(ErrorMessage = &lt;span style="color:#a31515"&gt;"Please provide a name"&lt;/span&gt;)]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; Name;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color:#0000ff"&gt;int&lt;/span&gt;&amp;gt; NumberUpdates;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;[&lt;span style="color:#2b91af"&gt;Range&lt;/span&gt;(&lt;span style="color:#a52a2a"&gt;0&lt;/span&gt;, &lt;span style="color:#a52a2a"&gt;999&lt;/span&gt;)]&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color:#0000ff"&gt;decimal&lt;/span&gt;&amp;gt; Price;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;[&lt;span style="color:#2b91af"&gt;RegularExpression&lt;/span&gt;(&lt;span style="color:#a31515"&gt;@"^http&amp;#92;://[a-zA-Z0-9&amp;#92;-&amp;#92;.]+&amp;#92;.[a-zA-Z]{2,3}(/&amp;#92;S*)?$"&lt;/span&gt;,&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ErrorMessage = &lt;span style="color:#a31515"&gt;"Please use standard Url format"&lt;/span&gt;)]&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; Uri;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;The data validation attributes are a core part of .NET with ASP.NET Dynamic Data and ASP.NET MVC using the exact same model.&lt;/p&gt;  &lt;p&gt;But what if they are not expressive enough for you?&amp;#160; For example, say I have a custom validation I have for making sure the description is valid..&amp;#160;&amp;#160; To do that, I can write some .NET code that executes on the server AND the client.&amp;#160; Let’s see how to do that.&amp;#160; First I create a class on the server..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_51.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_51.png" width="310" height="221" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice the name here PlateValidationRules.shared.cs…. the “.shared” part is important… it is what tells us that this code is meant to be on the client and the server. &lt;/p&gt;  &lt;p&gt;In this case, i am saying a valid description is one that has 5 more more words&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f4202dea-eb8a-48d3-87f2-cb2bc32f9236" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;PlateValidationRules&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af"&gt;ValidationResult&lt;/span&gt; IsDescriptionValid(&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; description)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (description != &lt;span style="color:#0000ff"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; description.Split().Length &amp;lt; &lt;span style="color:#a52a2a"&gt;5&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&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;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; vr = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;ValidationResult&lt;/span&gt;(&lt;span style="color:#a31515"&gt;"Valid descriptions must have 5 or more words."&lt;/span&gt;);&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; vr;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; &lt;span style="color:#2b91af"&gt;ValidationResult&lt;/span&gt;.Success;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Then to wire this up to the description property…&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:75d76ff4-eac9-444c-935d-6c08893d03f3" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;[&lt;span style="color:#2b91af"&gt;CustomValidation&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;typeof&lt;/span&gt;(MyApp.Web.&lt;span style="color:#2b91af"&gt;PlateValidationRules&lt;/span&gt;),&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#a31515"&gt;"IsDescriptionValid"&lt;/span&gt;)]&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; Description;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Then running the app, we see all our validations…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_52.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_52.png" width="240" height="173" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Personalization and Authentication&lt;/h3&gt;  &lt;p&gt;Lots of times in business applications we are dealing with valuable data that we need to make sure the user is authentication before we return in.&amp;#160; Luckily this is very easy to do with RIA Services.&amp;#160; Let’s go back to our DomainServices on the server and add the RequiresAuthentication attribute.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b2098e00-a5de-4bbb-873b-8fb60c0a0bca" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;[&lt;span style="color:#2b91af"&gt;EnableClientAccess&lt;/span&gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;[&lt;span style="color:#2b91af"&gt;RequiresAuthentication&lt;/span&gt;] &lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;DishViewDomainService&lt;/span&gt; : &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;LinqToEntitiesDomainService&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;DishViewEntities&lt;/span&gt;&amp;gt;&lt;/li&gt; &lt;li&gt;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Then when you run the application..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_53.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_53.png" width="322" height="110" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So let’s log in…&amp;#160; I don’t have an account created yet, luckily the Business Application Template supports new user registration.&amp;#160; All this is based on ASP.NET Authentication system that has been around sense ASP.NET 2.0.&amp;#160; &lt;/p&gt;  &lt;p&gt;Here we are creating a new user…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_54.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_54.png" width="240" height="173" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And now we get our data…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_55.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_55.png" width="240" height="153" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now, that we have a user concept.. why don’t we add one more setting to let the user customize this page.&amp;#160;&amp;#160;&amp;#160; So we edit the web.config file to add a BackgroundColor.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e5ec48d1-04b8-4793-ad10-1fa230c688a4" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a31515"&gt;xml&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;version&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;1.0&lt;/span&gt;"&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;encoding&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;utf-8&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;?&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;configuration&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;system.web&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;profile&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;properties&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;FriendlyName&lt;/span&gt;"&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;BackgroundColor&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;properties&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;profile&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;And we go into the User.cs class on the server and add our BackgroundColor.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f68ad934-f08e-47bd-8acf-9e31647ff459" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;User&lt;/span&gt; : &lt;span style="color:#2b91af"&gt;UserBase&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; FriendlyName { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff"&gt;set&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; BackgroundColor { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff"&gt;set&lt;/span&gt;; }&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Now, back on the client, let’s build out UI using the DataSources window just as we have seen above.&amp;#160; But this time, I have created a very simple ColorPicker control in order to show that it is possible to use your own custom control.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_56.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_56.png" width="302" height="314" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Drag and drop that onto the form..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_57.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_57.png" width="240" height="107" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Then change the binding to be TwoWay using the databinding picker.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_58.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_58.png" width="240" height="136" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then I think we need a nice header here with the User name in it.&amp;#160; To so that, let’s add a TextBlock, set the fontsize to be big.&amp;#160;&amp;#160; Then do connect the dots databinding to write up to the user name.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_59.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_59.png" width="240" height="124" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then let’s use the string format databinding to customize this a bit..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_60.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_60.png" width="321" height="194" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Next we put a Submit button.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:bc36b887-3ae8-427f-9bea-dc794bb97000" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; button1_Click(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, System.Windows.&lt;span style="color:#2b91af"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; context = &lt;span style="color:#2b91af"&gt;WebContext&lt;/span&gt;.Current.Authentication;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.userDomainDataSource.SubmitChanges();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;userDomainDataSource.SubmittedChanges += (s, ev) =&amp;gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (!context.IsBusy) context.LoadUser();&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Now when we run it… we can modify the user settings.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_61.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_61.png" width="240" height="157" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The really cool part is that if the user goes to another machine and logs in, they get the exact same experience.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_62.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/PDC09TalkBuildingAmazingBusinessApplicat_A92D/image_thumb_62.png" width="240" height="159" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;Wow, we have seen a lot here.. We walked through end-to-end how to build a Business Application in Silverlight with .NET RIA Services.&amp;#160; We saw the query support, validating update, authorization and personalization as well as all the great new support in VS2010.&amp;#160;&amp;#160;&amp;#160; Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9925774" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/brada/archive/tags/Mix09/default.aspx">Mix09</category><category domain="http://blogs.msdn.com/brada/archive/tags/RIAServices/default.aspx">RIAServices</category></item><item><title>Welcome to WCF RIA Services Beta!</title><link>http://blogs.msdn.com/brada/archive/2009/11/18/welcome-to-wcf-ria-services-beta.aspx</link><pubDate>Wed, 18 Nov 2009 16:57:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9924374</guid><dc:creator>BradA</dc:creator><slash:comments>30</slash:comments><comments>http://blogs.msdn.com/brada/comments/9924374.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9924374</wfw:commentRss><description>&lt;p&gt;Today at &lt;a href="http://microsoftpdc.com/"&gt;PDC09&lt;/a&gt;, Scott Guthrie Announced the beta of &lt;a href="http://silverlight.net/riaservices"&gt;WCF RIA Services&lt;/a&gt;.&amp;#160; As you may know RIA Services is a set of end-to-end experiences that makes it as easy to build Silverlight based n-tier applications as it is to build traditional 2 tier apps.&amp;#160;&amp;#160; I am very excited about this release as it represents a lot of great feedback we have heard from many of you.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;A few goodies in this release based on your feedback&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;You told us you wanted to get up and running with the UI quicker, so we enabled the “DataSources” window that allows you to drag and drop “tables” exposed by your Domain Service onto the form and get meaningful UI to start with.&amp;#160;&amp;#160; No more guessing about the Xaml syntax for databinding, or incantation for layout, etc.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/BlogPictures/WelcometoWCFRIAServicesBeta_6A60/image.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://brad_abrams.members.winisp.net/BlogPictures/WelcometoWCFRIAServicesBeta_6A60/image_thumb.png" width="211" height="240" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You told us error handling was not intuitive\consistent with the rest of the framework, so we we simplified error handing both on the server and client.&amp;#160; This will help errors get noticed quicker at development time so they don’t sneak into production&lt;/li&gt;    &lt;li&gt;You told us you wanted Inheritance support from the Data Model to just flow through the Domain Service to the client, so we gave it to you, works exactly as you’d expect.&lt;/li&gt;    &lt;li&gt;You told us you didn’t always want to expose DAL types to the client, but rather a custom “presentation model” where you can customize the shape of the entities, so we gave it to you.. and in a complete way where we handle all&amp;#160; the update and error cases.&lt;/li&gt;    &lt;li&gt;You told us you wanted the fastest possible communication channel between the client and the server, so we gave an optimized binary channel by default!&amp;#160; &lt;/li&gt;    &lt;li&gt;You told us it was a pain to install so we integrated the RIA Services installer into the Silverlight 4 installer making it very easy to get started.&amp;#160;&amp;#160; We also created a “server only” installer to use on your production boxes.&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;You told us real world data models use a lot of Compositional hierarchy (Order-&amp;gt;OrderDetails) so we have improved the handling of this scenario by making it more built in.&amp;#160; &lt;/li&gt;    &lt;li&gt;You told us you wanted GAC *and* bin deployment.&amp;#160; So we gave it to you. By default RIA Services look for our server assemblies in the GAC as this is the most secure and efficient model, but just like ASP.NET MVC, you can simply select “copy local” in your VS project and those assemblies work fine bin deployed.&amp;#160; &lt;/li&gt;    &lt;li&gt;You told us you really liked the easy on ramp with the Business Application Template, but that you wanted it to be more complete.&amp;#160; So we added globalization support, user state example, persisted sign in, etc.&amp;#160; &lt;/li&gt;    &lt;li&gt;You told us you wanted to go live today (and many of you already have) so we are providing .NET Framework 3.5\Visual Studio 2008\Silverlight 3 based bits that are ready for you to go live on today!&amp;#160;&amp;#160; We hope that this release will be a bridge to you that will make it easier for you to (eventually, when you are ready) move to our finally RTM bits which will be on .NET Framework 4, Visual Studio 2010 and Silverlight 4.&amp;#160; &lt;/li&gt;    &lt;li&gt;You gave us a LOT of other feedback as well, some of which will come in V1, and some will have to wait until the next releases, but please keep it coming.&amp;#160; &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;WCF: What’s in a Name?&lt;/h3&gt;  &lt;p&gt;Many of you will notice the slight change in the branding around RIA Services.&amp;#160; RIA Services is now part of the WCF family (as is &lt;a href="http://msdn.microsoft.com/en-us/data/bb931106.aspx"&gt;ADO.NET Data Services&lt;/a&gt;, which is now WCF Data Services).&amp;#160; This branding change is a direct result of some significant work we are releasing in this beta and it hopefully makes it very clear that we have one technology base for doing services on the .NET platform and that is WCF.&amp;#160; &lt;/p&gt;  &lt;p&gt;Our driving principle with using WCF has been “All the power and none of the complexity”.&amp;#160; That is we wanted to enable all the power that WCF brings (for example, the binary end-point, data contract serialization, all the extensibility points, fully management support with the AppFabric we announced yesterday).&amp;#160; But none of the complexity.&amp;#160; Just look at the web.config file… there is no&amp;#160; tedious config to get right.. there is no fragile contract interface and implementation class to keep in sync, none of the deployment headache around configuration.&amp;#160; This is still the RIA Services model where you can expect a deep simplicity across development, deployment and maintenance.&amp;#160; We accomplish this by creating a custom service host at runtime based on how you define your DomainService. &lt;/p&gt;  &lt;p&gt;I am also very excited to get &lt;a href="http://www.odata.org/"&gt;OData&lt;/a&gt; support into RIA Services.&amp;#160; OData is the protocol from “Astoria” that is already widely used in products like Sharepoint and PowerPivot.&amp;#160; Look for more details on that in future.&amp;#160; &lt;/p&gt;  &lt;p&gt;Check out Henrik Frystyk Nielsen’s talk &lt;a href="http://microsoftpdc.com/Sessions/FT55"&gt;Developing REST Applications with the .NET Framework&lt;/a&gt; which will cover how WCF Data Services and WCF RIA Services work together.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Call to Action&lt;/h3&gt;  &lt;p&gt;1. Please install &lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx"&gt;Visual Studio 2010&lt;/a&gt; and &lt;a href="http://silverlight.net/getstarted/silverlight-4-beta/"&gt;Silverlight 4&lt;/a&gt; (this includes RIA Services)&lt;/p&gt;  &lt;p&gt;2. Build something cool and tell us about it! &lt;/p&gt;  &lt;p&gt;3. &lt;a href="http://forums.silverlight.net/forums/53.aspx"&gt;Send in your feedback&lt;/a&gt;.. we want to hear what rocked, and what needs more polish&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9924374" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/brada/archive/tags/RIAServices/default.aspx">RIAServices</category><category domain="http://blogs.msdn.com/brada/archive/tags/PDC09/default.aspx">PDC09</category></item><item><title>http://silverlight.net/riaservices/ is Live!</title><link>http://blogs.msdn.com/brada/archive/2009/11/07/http-silverlight-net-riaservices-is-live.aspx</link><pubDate>Sun, 08 Nov 2009 02:03:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9919170</guid><dc:creator>BradA</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/brada/comments/9919170.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9919170</wfw:commentRss><description>&lt;p&gt;We have been working for a while to get a community site together where we can aggregate all the great buzz, resources and discussions about .NET RIA Services.&amp;#160;&amp;#160; We hope you enjoy the content we already have up there and help us get more good stuff up there.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://silverlight.net/riaservices/"&gt;http://silverlight.net/riaservices/&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://silverlight.net/riaservices/ "&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/httpsilverlight.netriaservicesisLive_FDD2/image_3.png" width="420" height="345" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9919170" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/brada/archive/tags/RIAServices/default.aspx">RIAServices</category></item><item><title>Lightweight Linq Parser</title><link>http://blogs.msdn.com/brada/archive/2009/10/28/lightweight-linq-parser.aspx</link><pubDate>Wed, 28 Oct 2009 19:28:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9914272</guid><dc:creator>BradA</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/brada/comments/9914272.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9914272</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/jasonall/"&gt;Jason Allor&lt;/a&gt;, dev manager for my team, recently posted about a cool &lt;a href="http://blogs.msdn.com/jasonall/archive/2009/10/27/linqlite.aspx"&gt;lightweight LINQ parser&lt;/a&gt;.&amp;#160; The idea was to make it much easier to create a LINQ provider over any arbitrary data source (a web service, custom business objects, etc).&amp;#160; This makes it much easier to get all the sorting, paging, filtering benefits of RIA Services for any arbitrary data store.&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Check it out, and be sure to subscribe to Jason’s blog as I expect he will have more goodies coming in the future! &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/jasonall/archive/2009/10/27/linqlite.aspx"&gt;LinqLite&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9914272" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/RIAServices/default.aspx">RIAServices</category></item><item><title>Index for Business Apps Example for Silverlight 3 RTM and .NET RIA Services July Update</title><link>http://blogs.msdn.com/brada/archive/2009/10/27/index-for-business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update.aspx</link><pubDate>Tue, 27 Oct 2009 15:46:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9913548</guid><dc:creator>BradA</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/brada/comments/9913548.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9913548</wfw:commentRss><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Thanks to all of you who asked…&amp;#160; I had to take a sick day today, so this was nice mindless work to get done.&amp;#160;&amp;#160; Hope you enjoy it!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/10/amazing-business-apps-example-updated-for-silverlight-3-rtm-and-net-ria-services-july-update.aspx"&gt;Part 1: Navigation Basics&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/11/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-1-rich-data-query.aspx"&gt;Part 2: Rich Data Query&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/13/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-3-authentication.aspx"&gt;Part 3: Authentication&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/14/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-4-seo-export-to-excel-and-out-of-browser.aspx"&gt;Part 4: SEO, Export to Excel and Out of Browser&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/15/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-5-astoria-add-reference-and-winforms.aspx"&gt;Part 5: Astoria, Add Service Reference and WinForms&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/16/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-6-data-transfer-objects-dtos.aspx"&gt;Part 6: Data Transfer Objects (DTOs)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/21/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-7-services-based-data-store.aspx"&gt;Part 7: ADO.NET Data Services Based Data Store&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/17/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-8-wcf-based-data-source.aspx"&gt;Part 8: WCF Based Data Source&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/22/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-6-poco-and-authentication-provider.aspx"&gt;Part 9: POCO and Authentication Provider&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/23/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-9-linqtosql.aspx"&gt;Part 10: LinqToSql&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/24/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-11-the-client-only-world.aspx"&gt;Part 11: The Client-Only World&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/27/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-9-dataset.aspx"&gt;Part 12: DataSet&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/28/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-11-the-new-class-library-project.aspx"&gt;Part 13: The New Class Library Project&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/29/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-xx-visual-basic-vb-and-wpf-support.aspx"&gt;Part 14: Visual Basic (VB) and WPF Support&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/30/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-xx-asp-net-mvc.aspx"&gt;Part 15: ASP.NET MVC&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/31/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-xx-exposing-a-wcf-service.aspx"&gt;Part 16: Exposing a WCF Service&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/08/03/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-xx-evolving-an-application.aspx"&gt;Part 17: Evolving an Application&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/08/04/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-xx-custom-linq-provider.aspx"&gt;Part 18: Custom Linq Provider&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/08/05/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-asp-net-dynamic-data.aspx"&gt;Part 19: ASP.NET Dynamic Data&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/08/06/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-nhibernate.aspx"&gt;Part 20: NHibernate&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/08/10/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-hierarchal-data.aspx"&gt;Part 21: Hierarchical Data&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/08/11/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-22-separate-solution-files.aspx"&gt;Part 22: Separate Solution Files&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/08/21/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-23-azure.aspx"&gt;Part 23: Azure&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/08/24/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-24-stored-procedures.aspx"&gt;Part 24: Stored Procedures&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/09/07/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-viewmodel.aspx"&gt;Part 25: ViewModel&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/10/05/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-26-authentication-and-personalization.aspx"&gt; Part 26: Authentication and Personalization&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/09/06/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-comments-about-adding.aspx"&gt;Comments about Adding…&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/08/02/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-summary.aspx"&gt;Summary&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9913548" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/brada/archive/tags/RIAServices/default.aspx">RIAServices</category></item><item><title>RIA Services Blog Posts – Now in French!</title><link>http://blogs.msdn.com/brada/archive/2009/10/15/ria-services-blog-posts-now-in-french.aspx</link><pubDate>Fri, 16 Oct 2009 05:21:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9907966</guid><dc:creator>BradA</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/brada/comments/9907966.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9907966</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/RIAServicesBlogPostsNowinFrench_13A73/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/RIAServicesBlogPostsNowinFrench_13A73/image_thumb.png" width="240" height="151" /&gt;&lt;/a&gt;Thanks to &lt;a href="http://aristidi.blogspot.com/"&gt;Yannick Aristidi&lt;/a&gt; we are getting many of the &lt;a href="http://blogs.msdn.com/brada/archive/2009/08/02/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-summary.aspx"&gt;RIA Services posts&lt;/a&gt; from my series translated into French!&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://pagesperso-orange.fr/aristidi/files/Partie1.pdf"&gt;Partie 1: les bases de la navigation&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://pagesperso-orange.fr/aristidi/files/Partie2.pdf"&gt;Partie 2: l'accès aux données&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://pagesperso-orange.fr/aristidi/files/Partie3.pdf"&gt;Partie 3: L’authentification&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Thanks Yannick, i hope there are many more to come!&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9907966" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/brada/archive/tags/RIAServices/default.aspx">RIAServices</category></item><item><title>Business Apps Example for Silverlight 3 RTM and .NET RIA Services July Update: Part 26: Authentication and Personalization</title><link>http://blogs.msdn.com/brada/archive/2009/10/05/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-26-authentication-and-personalization.aspx</link><pubDate>Tue, 06 Oct 2009 03:04:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9903482</guid><dc:creator>BradA</dc:creator><slash:comments>17</slash:comments><comments>http://blogs.msdn.com/brada/comments/9903482.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9903482</wfw:commentRss><description>&lt;p&gt;The data we work with in business application is valuable.&amp;#160; We need to protect the data.. sometimes by keeping up with exactly who accesses and updates what data when and other times we need to actively prevent data from being accessed expected by trust parties.&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;The web is increasingly becoming a personal place – applications often “know about you” enabling users to having customized settings that work everywhere the apps works.&amp;#160; &lt;/p&gt;  &lt;p&gt;In this example, I will take our ever popular SuperEmployees application and augment it to show more details on the authentication and personalization.&amp;#160; &lt;/p&gt;  &lt;p&gt;You can see the &lt;a href="http://blogs.msdn.com/brada/archive/2009/08/02/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-summary.aspx"&gt;full series here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The demo requires (all 100% free and always free):&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/express/download/"&gt;VS2008 SP1&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://silverlight.net/getstarted/silverlight3/default.aspx"&gt;Silverlight 3 RTM&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://code.msdn.microsoft.com/RiaServices"&gt;.NET RIA Services July '09 Preview&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://brad_abrams.members.winisp.net/Projects/Silverlight3RTM/MyApp.Auth.zip"&gt;download the full demo files&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Basic Authentication &lt;/h3&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Let’s start by looking at how we ensure that only authenticated users can access access the data and keep a very simple log of who access the data.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Starting with the &lt;a href="http://blogs.msdn.com/brada/archive/2009/07/11/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-1-rich-data-query.aspx"&gt;original example&lt;/a&gt;,&amp;#160; let’s look at adding authentication to the GetSuperEmployees() method on the DomainService in the server project. &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a085a725-0d0c-415e-bd01-f85202480494" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; [&lt;span style="color:#2b91af"&gt;RequiresAuthentication&lt;/span&gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IQueryable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;SuperEmployee&lt;/span&gt;&amp;gt; GetSuperEmployees()&lt;/li&gt; &lt;li&gt;{&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Once we use the RequiresAuthentication attribute, the system will ensure that only calls from authenticated users make it through.&amp;#160; That means we can do some very simple such as logging who is accessing the data and when:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:68d06743-acea-417e-8c2c-6b7952c08c9a" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; [&lt;span style="color:#2b91af"&gt;RequiresAuthentication&lt;/span&gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IQueryable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;SuperEmployee&lt;/span&gt;&amp;gt; GetSuperEmployees()&lt;/li&gt; &lt;li&gt;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;File&lt;/span&gt;.AppendAllText(&lt;span style="color:#a31515"&gt;@"C:&amp;#92;users&amp;#92;brada&amp;#92;desktop&amp;#92;userslog.txt"&lt;/span&gt;,&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;String&lt;/span&gt;.Format(&lt;span style="color:#a31515"&gt;"{0}: {1} {2}"&lt;/span&gt;, &lt;span style="color:#2b91af"&gt;DateTime&lt;/span&gt;.Now,&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ServiceContext.User.Identity.Name, &lt;span style="color:#2b91af"&gt;Environment&lt;/span&gt;.NewLine));&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt; (check out a package such as &lt;a href="http://logging.apache.org/log4net/"&gt;Log4net&lt;/a&gt; for a complete solution for logging).&lt;/p&gt;  &lt;p&gt;Now when we run the application, no results are returned.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb.png" width="240" height="194" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We need to log in to see some results… Luckily the Business Application Template that ships with .NET RIA Services includes great support for this.&amp;#160; &lt;/p&gt;  &lt;p&gt;Click on login&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_1.png" width="240" height="52" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice here, we could change to use window auth to get integrated NTLM security, either way works fine. &lt;/p&gt;  &lt;p&gt;Then register now&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_2.png" width="240" height="90" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;and we can create a new user directly from the Silverlight client.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_3.png" width="240" height="174" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice if you want to customize the look and feel of any of these dialogs, it is easy to do by looking in the Views\LoginControl.xaml, Views\LoginWindow.xaml.&lt;/p&gt;  &lt;p&gt;And if you want to control the backend on how these are implemented, you can by looking in server project under Services\AuthenticationService.cs and UserRegistrationService.cs.&amp;#160; By default these go against the ASP.NET Membership and roles system, but you can customize them to do whatever you’d like by simply overriding the methods there.&amp;#160; &lt;/p&gt;  &lt;p&gt;Now, we just need to react to the logged in event.&amp;#160; In this case, I am going to simply reload the data when the user logs in.&amp;#160; Lines 10-13 signs up for the logged in event and sets reloads the data, this time, as an authenticated user.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:cdc223ac-06c9-4da2-bb4a-640cfb6be12c" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; Home()&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitializeComponent();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; context = dds.DomainContext &lt;span style="color:#0000ff"&gt;as&lt;/span&gt; &lt;span style="color:#2b91af"&gt;SuperEmployeeDomainContext&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;originFilterBox.ItemsSource = context.Origins;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;context.Load(context.GetOriginsQuery());&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;RiaContext&lt;/span&gt;.Current.Authentication.LoggedIn += (s, e) =&amp;gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (dds != &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;) dds.Load();&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_10.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_4.png" width="240" height="187" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;And notice, the client knows who I am:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_12.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_5.png" width="240" height="47" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And the server knows as well..&amp;#160; If you go look at the log file we create in the DomainService we will see:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_14.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_6.png" width="240" height="96" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So, that is cool, but I think we can do a bit better on the client user experience.&amp;#160;&amp;#160; After all, I get no error whatsoever to tell me I need to log in to see the data.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;First, let’s follow best practice and handle the DDS.LoadedData event and simply show any errors that are returned.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:836f94fa-2ecc-4f33-aab6-7f613ffd4eb6" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;riaControls&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DomainDataSource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="dds"&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; AutoLoad&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="True"&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; QueryName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="GetSuperEmployeesQuery"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; LoadedData&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="dds_LoadedData"&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; LoadSize&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="20"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Then the implementation is very simple:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a770351e-64ab-4f1f-880d-fad3ea0562d9" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; dds_LoadedData(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af"&gt;LoadedDataEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&amp;nbsp;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (e.Error != &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; win = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;ErrorWindow&lt;/span&gt;(e.Error);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;win.Show();&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Now, when we run this app, we get this error:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_16.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_7.png" width="354" height="202" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;That is helpful, maybe for a developer, but for an end user, maybe we want something more explicit.&amp;#160; &lt;/p&gt;  &lt;p&gt;The first step is to not even make the request if the user is not authenticated.&amp;#160; We know that on the client, so this is very easy to do.&lt;/p&gt;  &lt;p&gt;First, let’s sign up for the DDS.DataLoading event to capture the load before it happens.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:726fcaca-bc1c-4f11-bf1e-4b5db0ce2b7a" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;riaControls&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DomainDataSource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="dds"&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; AutoLoad&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="True"&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; QueryName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="GetSuperEmployeesQuery"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; LoadedData&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="dds_LoadedData"&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; LoadingData&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="dds_LoadingData"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; LoadSize&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="20"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;then we will simple cancel the load if the user is not authenticated.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:eeb64f5f-6f4f-4973-a1d6-64161b6dad19" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; dds_LoadingData(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af"&gt;LoadingDataEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.Cancel = !&lt;span style="color:#2b91af"&gt;RiaContext&lt;/span&gt;.Current.User.IsAuthenticated;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now, let’s provide an alternate way to tell the user they need to log on.&amp;#160;&amp;#160;&amp;#160;&amp;#160; We simply add some text and make it visible only when the user is not authenticated.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e776c179-dd4b-4551-8521-450ab8b0ca5c" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Text&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Data is only available to authenticated users"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Foreground&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Red"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; DataContext&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; RiaContext&lt;/span&gt;&lt;span style="color:#0000ff"&gt;}"&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Visibility&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=User.IsAuthenticated,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Converter&lt;/span&gt;&lt;span style="color:#0000ff"&gt;={&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; VisibilityConverter&lt;/span&gt;&lt;span style="color:#0000ff"&gt;}}"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;The implementation of the value convert is pretty simple.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:87a5f45c-cf07-4b0c-8062-b8a66230df3a" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;VisibilityConverter&lt;/span&gt; : &lt;span style="color:#2b91af"&gt;IValueConverter&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;object&lt;/span&gt; Convert(&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; value,&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;Type&lt;/span&gt; targetType,&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; parameter,&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;CultureInfo&lt;/span&gt; culture)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;bool&lt;/span&gt; visibility = (&lt;span style="color:#0000ff"&gt;bool&lt;/span&gt;)value;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; visibility ? &lt;span style="color:#2b91af"&gt;Visibility&lt;/span&gt;.Collapsed : &lt;span style="color:#2b91af"&gt;Visibility&lt;/span&gt;.Visible;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;object&lt;/span&gt; ConvertBack(&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; value,&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;Type&lt;/span&gt; targetType,&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; parameter,&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;CultureInfo&lt;/span&gt; culture)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;Visibility&lt;/span&gt; visibility = (&lt;span style="color:#2b91af"&gt;Visibility&lt;/span&gt;)value;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; (visibility != &lt;span style="color:#2b91af"&gt;Visibility&lt;/span&gt;.Visible);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now, when we run this, we get a nice UX:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_18.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_8.png" width="240" height="136" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then when we log in, it looks nice.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_20.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_9.png" width="240" height="142" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;We can even make it a bit better by giving users an easy to to log in from here:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e954c167-a1b5-4959-abda-e21f3e19d701" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Text&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Data is only available to authenticated users.&amp;nbsp;&amp;nbsp;Please click here to log in."&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Foreground&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Red"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; DataContext&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; RiaContext&lt;/span&gt;&lt;span style="color:#0000ff"&gt;}"&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Visibility&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=User.IsAuthenticated,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Converter&lt;/span&gt;&lt;span style="color:#0000ff"&gt;={&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; VisibilityConverter&lt;/span&gt;&lt;span style="color:#0000ff"&gt;}}"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; MouseLeftButtonUp&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="TextBlock_MouseLeftButtonUp"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e7f52d42-2441-4c2e-9deb-1297a2a4f947" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; TextBlock_MouseLeftButtonUp(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af"&gt;MouseButtonEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;LoginWindow&lt;/span&gt;().Show();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_22.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_10.png" width="285" height="151" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;What we showed in this section is how easy it is to require authentication for data and how to create a great user experience for this on the client.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Personalization &lt;/h3&gt;  &lt;p&gt;Now that we have the basics of authentication down, let’s see how we can provide a bit more of a personalized experience.&amp;#160; For many applications, uses spend a huge amount of time in the application, we want them to feel comfortable and in control of their experience.&amp;#160;&amp;#160;&amp;#160; For the first part of this, let’s create a user setting for the background color of the application.&amp;#160; Each user can have a different value and it should follow them no mater what machine they run the application on.&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Let’s start be defining a profile property in the web.config file.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3be7be3c-1a11-481d-8f74-707c71568b69" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;profile&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;enabled&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;true&lt;/span&gt;"&lt;span style="color:#0000ff"&gt; &amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;properties&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;PageBackgroundColor&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;defaultValue&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;White&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;properties&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;profile&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Then we can make this strongly typed by adding it to the AuthenticationService.cs file on the server.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8088db2d-9893-4a1a-a3fc-055962139241" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;User&lt;/span&gt; : &lt;span style="color:#2b91af"&gt;UserBase&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; PageBackgroundColor { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff"&gt;set&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now we can simply access this on the client.&amp;#160; First let’s define a page to set this value.&amp;#160; in MyFirstPage.xaml… let’s add some UI:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:93b48f26-34b0-49b7-85bd-99effd3b5bbf" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Orientation&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Horizontal" &amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Text&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Enter background color: "/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="colorTextBox"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; KeyDown&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="colorTextBox_KeyDown"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="100" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Button&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Content&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Save"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Click&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Button_Click" /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="saveStatus"/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We can handle the save button click as follows.. &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2381edab-2a86-4a2f-80d9-22856003580d" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; Button_Click(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; colorString = &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.colorTextBox.Text.Trim().ToLower();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;colorString = colorString.Substring(0, 1).ToUpper() + colorString.Substring(1, colorString.Length - 1);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;RiaContext&lt;/span&gt;.Current.User.PageBackgroundColor = colorString;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.saveStatus.Text = &lt;span style="color:#a31515"&gt;"setting saving.."&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;RiaContext&lt;/span&gt;.Current.Authentication.SaveUser((o) =&amp;gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.saveStatus.Text = &lt;span style="color:#a31515"&gt;"setting saved"&lt;/span&gt;; },&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;null&lt;/span&gt;);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; colorTextBox_KeyDown(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af"&gt;KeyEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li&gt;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.saveStatus.Text = &lt;span style="color:#a31515"&gt;""&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Notice in lines 3-4 we are normalizing the string name of the color so that it is “xaml compliant”..    &lt;br /&gt;Then in line 5 we are setting the strongly typed User.PageBackgroundColor property.&amp;#160; &lt;br /&gt;Then in lines 6-9 we are simply giving some UI hints as we save this value back to the server.&amp;#160; &lt;/p&gt;  &lt;p&gt;Of course this will only work if the user is logged in first, so this time, let’s be proactice and encourage the user to log in when they hit the page for the first time.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b32807a4-f4db-4ba8-a63d-6e90402d85d2" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; OnNavigatedTo(&lt;span style="color:#2b91af"&gt;NavigationEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (!&lt;span style="color:#2b91af"&gt;RiaContext&lt;/span&gt;.Current.User.IsAuthenticated)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;LoginWindow&lt;/span&gt;().Show();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The last step here is the honor this value when it is set.&amp;#160; That turns out to be pretty easy in this case.&amp;#160; Just go to MainPage.Xaml and databind the LayoutRoot’s backgroun color to this value.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f26e2b97-aab3-4b0f-b5e8-f216ebbda1c1" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="LayoutRoot"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Style&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; LayoutRootGridStyle&lt;/span&gt;&lt;span style="color:#0000ff"&gt;}"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; DataContext&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; RiaContext&lt;/span&gt;&lt;span style="color:#0000ff"&gt;}"&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Background&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=User.PageBackgroundColor}"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_24.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_11.png" width="240" height="187" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;then when we log in…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_26.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_12.png" width="240" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And if we change the color to blue…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_28.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_13.png" width="240" height="182" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And notice the color change effects the whole app.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_30.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_14.png" width="240" height="189" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And if I hit the app from a different machine, on a different browser, my setting still carries forward… We start off not logged in we get the default:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_32.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_15.png" width="240" height="196" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;but when we log in… our settings show up. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_34.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_16.png" width="240" height="196" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now this is a user specific setting, so if I create a new user “Glenn” and set his background color to pink&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_36.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_17.png" width="240" height="67" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;that doesn’t effect the background color for Darb…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_38.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_18.png" width="240" height="189" /&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_40.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_19.png" width="240" height="189" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;OK, background color is fun and all, but what might be even more useful is to store some state on how I last left the application.&amp;#160;&amp;#160; This ensures that as I access the application from over time, the context of my work is preserved.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;So, let’s add a few more fields to our profile..&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:df6640be-a723-4974-a883-aba27015a733" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;profile&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;enabled&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;true&lt;/span&gt;"&lt;span style="color:#0000ff"&gt; &amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;properties&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;PageBackgroundColor&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;defaultValue&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;White&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;SortOrder&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;Int32&lt;/span&gt;"&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;defaultValue&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;0&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;SortProperty&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;defaultValue&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;Name&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;OriginFilter&lt;/span&gt;"&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;defaultValue&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;""&lt;span style="color:#0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;properties&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;profile&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;then update the User class to make this strongly typed.&lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e1ea3356-d097-44b7-821c-743d10c4d700" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;User&lt;/span&gt; : &lt;span style="color:#2b91af"&gt;UserBase&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; PageBackgroundColor { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff"&gt;set&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;int&lt;/span&gt; SortOrder { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff"&gt;set&lt;/span&gt;; }&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; SortProperty { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff"&gt;set&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; OriginFilter { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff"&gt;set&lt;/span&gt;; }&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We need to set the UI based on the user’s settings. &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a4a73c53-9a85-42d1-b1eb-5ff04b8ad52c" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; LoadUserState()&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; user = &lt;span style="color:#2b91af"&gt;RiaContext&lt;/span&gt;.Current.User;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (user.OriginFilter != &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;originFilterBox.Text = user.OriginFilter;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;else&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;originFilterBox.Text = &lt;span style="color:#0000ff"&gt;string&lt;/span&gt;.Empty;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (user.SortProperty != &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dds.SortDescriptors.Add(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;SortDescriptor&lt;/span&gt;(user.SortProperty,&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;(&lt;span style="color:#2b91af"&gt;SortDirection&lt;/span&gt;)user.SortOrder));&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt; And we need to call that when the page is navigated to…&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:226d2850-13fa-4bff-bd9c-eaddc7c5e64b" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; OnNavigatedTo(&lt;span style="color:#2b91af"&gt;NavigationEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LoadUserState();&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;and when the user logs on.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:51022461-009c-4208-a9bd-1d8eac5d2d76" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#2b91af"&gt;RiaContext&lt;/span&gt;.Current.Authentication.LoggedIn += (s, e) =&amp;gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;User&lt;/span&gt; user = &lt;span style="color:#2b91af"&gt;RiaContext&lt;/span&gt;.Current.User;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (dds != &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dds.Load();&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LoadUserState();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li&gt;};&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Next we need to store the values back to the server at the right time.&amp;#160; This SaveUserState method plucks the right values out of the UI, and saves them the server if the values have changed.&amp;#160; &lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b6e7f8bb-721d-4287-8119-04ae1308b19e" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; lastSave;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;void&lt;/span&gt; SaveUserState()&lt;/li&gt; &lt;li&gt;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;User&lt;/span&gt; user = &lt;span style="color:#2b91af"&gt;RiaContext&lt;/span&gt;.Current.User;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (!user.IsAuthenticated) &lt;span style="color:#0000ff"&gt;return&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;var&lt;/span&gt; order = dds.SortDescriptors.LastOrDefault();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (order != &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;user.SortProperty = order.PropertyPath.Value.ToString();&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;user.SortOrder = (&lt;span style="color:#0000ff"&gt;int&lt;/span&gt;)order.Direction;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;user.OriginFilter = &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.originFilterBox.Text;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (lastSave != user.SortProperty + user.SortOrder + user.OriginFilter)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;RiaContext&lt;/span&gt;.Current.Authentication.SaveUser();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lastSave = user.SortProperty + user.SortOrder + user.OriginFilter;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We need to call this method when the user navigates away.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:d7e4554e-d097-4eae-b67d-843aa52b9f33" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; OnNavigatedFrom(&lt;span style="color:#2b91af"&gt;NavigationEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SaveUserState();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;and, periodically we check to see if we need to save the changes back to the server.&amp;#160; So we set this up in the forms constructor..&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:bd9db1d4-37f8-4fe9-9226-0b49b6a9ee04" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; Timer = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;DispatcherTimer&lt;/span&gt;();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;Timer.Interval = &lt;span style="color:#2b91af"&gt;TimeSpan&lt;/span&gt;.FromSeconds(10);&lt;/li&gt; &lt;li&gt;Timer.Tick += (o, e) =&amp;gt; SaveUserState();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;Timer.Start();&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now, when we run it..&amp;#160;&amp;#160; setup some sort order and a filter&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_46.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_22.png" width="240" height="196" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;then log out&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_44.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_21.png" width="240" height="196" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;log back in (from a different machine) and we see it is back just where we left off.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_48.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_23.png" width="240" height="196" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;What we saw in this section what how to personalize the user experience based on the user preferences.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h3&gt;Admin UI&lt;/h3&gt;  &lt;p&gt;In this last section, let’s look at how to build out an admin UI.. What we want to do is provide a page that allows Admins to see all the users and edit their profile settings. &lt;/p&gt;  &lt;p&gt;First, let’s go into the AuthenticationService and add some custom methods to return all the users.&amp;#160; We should be sure that only users in the Admin role can access this service.&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:23c0fd2d-6bf2-4abf-bd6c-02adf164c6c3" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color:#2b91af"&gt;EnableClientAccess&lt;/span&gt;]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;AuthenticationService&lt;/span&gt; : &lt;span style="color:#2b91af"&gt;AuthenticationBase&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;User&lt;/span&gt;&amp;gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt; &lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color:#2b91af"&gt;RequiresRoles&lt;/span&gt;(&lt;span style="color:#a31515"&gt;"Admin"&lt;/span&gt;)]&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;User&lt;/span&gt;&amp;gt; GetAllUsers()&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Membership&lt;/span&gt;.GetAllUsers().Cast&amp;lt;&lt;span style="color:#2b91af"&gt;MembershipUser&lt;/span&gt;&amp;gt;().Select(mu =&amp;gt; &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.GetUserForMembershipUser(mu));&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af"&gt;User&lt;/span&gt; GetUserForMembershipUser(&lt;span style="color:#2b91af"&gt;MembershipUser&lt;/span&gt; membershipUser)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&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;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.GetAuthenticatedUser(&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;GenericPrincipal&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;GenericIdentity&lt;/span&gt;(membershipUser.UserName), &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt;[0]));&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now, lets add some Silverlight UI to consume this.&amp;#160; We will create a new page called “Admin”.&amp;#160;&amp;#160; The first thing we want to do is to prompt the user to log in if they are not already logged in as a user in the admin role.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:74f095d9-df46-4058-aec8-0d6e840ea5a5" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; OnNavigatedTo(&lt;span style="color:#2b91af"&gt;NavigationEventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (!&lt;span style="color:#2b91af"&gt;RiaContext&lt;/span&gt;.Current.User.Roles.Contains(&lt;span style="color:#a31515"&gt;"Admin"&lt;/span&gt;))&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;LoginWindow&lt;/span&gt;().Show();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af"&gt;RiaContext&lt;/span&gt;.Current.Authentication.LoggedIn += (s, ev) =&amp;gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (dds != &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;) dds.Load();&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Next, we define a DomainDataSource for accessing&amp;#160; the AuthenticationService &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:91522ebb-a330-4f03-b6f7-5e68b6bf13d3" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;riaControls&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DomainDataSource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="dds"&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; AutoLoad&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="True"&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; QueryName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="GetAllUsersQuery"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; LoadSize&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="20"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;riaControls&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DomainDataSource.DomainContext&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;App&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;AuthenticationContext&lt;/span&gt;&lt;span style="color:#0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;riaControls&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DomainDataSource.DomainContext&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;riaControls&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DomainDataSource&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;then we define some simple UI for working with the data..&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e343da57-6427-4854-bd2b-3e0cdc243089" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;activity&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;Activity&lt;/span&gt;&lt;span style="color:#ff0000"&gt; IsActive&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; IsBusy&lt;/span&gt;&lt;span style="color:#0000ff"&gt;,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ElementName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=dds}"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;dataControls&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataForm&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="dataForm1"&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&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;&lt;span style="color:#ff0000"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="393"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="331"&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Top"&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Header&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="User Data"&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; ItemsSource&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Data&lt;/span&gt;&lt;span style="color:#0000ff"&gt;,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ElementName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=dds}"&lt;/span&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#ff0000"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Left" &amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;dataControls&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DataForm&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Orientation&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Horizontal"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="0,5,0,0"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&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;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Button&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Content&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Submit"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="105"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="28"&lt;/span&gt;&lt;/li&gt; &lt;li&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;&amp;nbsp;&lt;span style="color:#ff0000"&gt; Click&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="SubmitButton_Click"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#a31515"&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;activity&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;Activity&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Now, we run it..&amp;#160; log in but it doesn’t give us any data… why?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_50.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_24.png" width="240" height="196" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Well, the user we created is not an Admin.&amp;#160; To make them a Admin, go to the Web Admin tool and add them to the “Admin” role.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_52.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_25.png" width="171" height="240" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Select “Security”&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_54.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_26.png" width="240" height="196" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then under Roles, Add a new role for “Admin”&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_56.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_27.png" width="240" height="61" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;and under Users, “Manager User”… here you can easily add your user to the role.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_58.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_28.png" width="240" height="99" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now when I log on and go to the Admin page, I can access the all the user’s settings.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_60.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/Bus.NETRIAServicesJulyUpdatePart26Authen_F021/image_thumb_29.png" width="178" height="240" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;What we saw in this section was how to build an admin UI for your applications.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I hope you found this to be a helpful walkthrough of the authentication and personalization support in RIA Services.&amp;#160;&amp;#160; Again, you can &lt;a href="http://brad_abrams.members.winisp.net/Projects/Silverlight3RTM/MyApp.Auth.zip"&gt;download the full demo files&lt;/a&gt; or check out the &lt;a href="http://blogs.msdn.com/brada/archive/2009/08/02/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-summary.aspx"&gt;full series here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Enjoy.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9903482" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/brada/archive/tags/RIAServices/default.aspx">RIAServices</category></item><item><title>Portugal ReMix Silverlight 3 and .NET RIA Services</title><link>http://blogs.msdn.com/brada/archive/2009/10/02/portugal-remix-silverlight-3-and-net-ria-services.aspx</link><pubDate>Fri, 02 Oct 2009 17:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9902383</guid><dc:creator>BradA</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/brada/comments/9902383.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9902383</wfw:commentRss><description>&lt;P&gt;&amp;nbsp;&lt;A href="http://www.microsoft.com/portugal/remix/index.aspx" mce_href="http://www.microsoft.com/portugal/remix/index.aspx"&gt;ReMix in Lisbon, Portugal&lt;/A&gt; was a fabulous was to end my ReMix tour.&amp;nbsp; They keynote (as much as I could understand of it) was a lot of fun.&amp;nbsp; They did the &lt;A href="http://en.wikipedia.org/wiki/Shtick" mce_href="http://en.wikipedia.org/wiki/Shtick"&gt;Developer\designer egg shtick&lt;/A&gt;, but with a real egg!&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.microsoft.com/belux/interactive/newsletter/img/egg.jpg" width=378 height=102 mce_src="http://www.microsoft.com/belux/interactive/newsletter/img/egg.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/PortugalReMixSilverlight3.NETRIAServices_6E59/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/PortugalReMixSilverlight3.NETRIAServices_6E59/image_4.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; MARGIN-LEFT: 0px; BORDER-TOP: 0px; MARGIN-RIGHT: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image align=right src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/PortugalReMixSilverlight3.NETRIAServices_6E59/image_thumb_1.png" width=240 height=172 mce_src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/PortugalReMixSilverlight3.NETRIAServices_6E59/image_thumb_1.png"&gt;&lt;/A&gt;My this point, I have really hit my stride with the the &lt;A href="http://silverlight.net/" mce_href="http://silverlight.net/"&gt;Silverlight 3&lt;/A&gt; overview I used a this &lt;A href="http://www.slideshare.net/brada/silverlight-3-overview-for-remix" mce_href="http://www.slideshare.net/brada/silverlight-3-overview-for-remix"&gt;Silverlight 3 deck&lt;/A&gt; and did some fun demos:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.iis.net/media/experiencesmoothstreaming" mce_href="http://www.iis.net/media/experiencesmoothstreaming"&gt;IIS Smooth streaming&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.xbox.com/en-US/games/splash/b/beatlesrockband/default.htm" mce_href="http://www.xbox.com/en-US/games/splash/b/beatlesrockband/default.htm"&gt;The Beatles Rockband&lt;/A&gt; site&amp;nbsp; (recently site of the day on &lt;A href="http://www.thefwa.com/" mce_href="http://www.thefwa.com/"&gt;FWA site of the day&lt;/A&gt;) &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://silverlight.net/content/samples/sl3/toolkitcontrolsamples/run/default.html" mce_href="http://silverlight.net/content/samples/sl3/toolkitcontrolsamples/run/default.html"&gt;Silverlight 3 Control Toolkit Samples&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.google.com/search?hl=en&amp;amp;q=Super+Employee+Placement+Alfred" mce_href="http://www.google.com/search?hl=en&amp;amp;q=Super+Employee+Placement+Alfred"&gt;Silverlight SEO&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/corrinab/archive/2009/08/30/9889051.aspx" mce_href="http://blogs.msdn.com/corrinab/archive/2009/08/30/9889051.aspx"&gt;Silverlight 3 Navigation Application Themes&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://smjenkins.members.winisp.net/slidentity/default.html?SlideShow=http://smjenkins.members.winisp.net/slidentity/slidentity.xaml" mce_href="http://smjenkins.members.winisp.net/slidentity/default.html?SlideShow=http://smjenkins.members.winisp.net/slidentity/slidentity.xaml"&gt;Slidentity&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;In the next session, I did was on .NET RIA Services..&amp;nbsp; You can find the demo I did &lt;A href="http://bit.ly/4tmJA3" mce_href="http://bit.ly/4tmJA3"&gt;http://bit.ly/4tmJA3&lt;/A&gt; and the &lt;A href="http://blogs.msdn.com/brada/archive/2009/08/02/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-summary.aspx" mce_href="http://blogs.msdn.com/brada/archive/2009/08/02/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-summary.aspx"&gt;full series&lt;/A&gt;.&amp;nbsp; Here is the diagram we used to walk through the options.. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/PortugalReMixSilverlight3.NETRIAServices_6E59/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/PortugalReMixSilverlight3.NETRIAServices_6E59/image_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/PortugalReMixSilverlight3.NETRIAServices_6E59/image_thumb.png" width=240 height=152 mce_src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/PortugalReMixSilverlight3.NETRIAServices_6E59/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Well.. it is a bit sad to be ending my European Tour, but I have had&amp;nbsp; a great time and learned a lot from the great people I meet along the way.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9902383" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/brada/archive/tags/RIAServices/default.aspx">RIAServices</category></item><item><title>Austria ReMix Silverlight 3 and .NET RIA Services</title><link>http://blogs.msdn.com/brada/archive/2009/10/01/austria-remix-silverlight-3-and-net-ria-services.aspx</link><pubDate>Thu, 01 Oct 2009 17:10:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9901844</guid><dc:creator>BradA</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/brada/comments/9901844.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9901844</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://www.microsoft.com/austria/remix/development.aspx"&gt;ReMix in Vienna, Austria&lt;/a&gt; was really great.&amp;#160; The attendees were very engaged and the venue was quite nice.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://simonguest.com/"&gt;Simon Guest&lt;/a&gt; gave the keynote and did a very nice job of bring together &lt;a href="http://expression.microsoft.com/en-us/ee215229.aspx"&gt;SketchFlow&lt;/a&gt;, &lt;a href="http://code.msdn.microsoft.com/RiaServices"&gt;.NET RIA Services&lt;/a&gt; and &lt;a href="http://www.microsoft.com/azure/sql.mspx"&gt;Sql Azure&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" align="right" src="http://www.totalfootball.ru/wiki/images/8/81/Austria-flag.jpg" /&gt;&lt;/p&gt;  &lt;p&gt; I had the opportunity give the &lt;a href="http://silverlight.net/"&gt;Silverlight 3&lt;/a&gt; overview today and again I had fun doing it.&amp;#160;&amp;#160; I used a this &lt;a href="http://www.slideshare.net/brada/silverlight-3-overview-for-remix"&gt;Silverlight 3 deck&lt;/a&gt; and did some fun demos:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.iis.net/media/experiencesmoothstreaming"&gt;IIS Smooth streaming&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.xbox.com/en-US/games/splash/b/beatlesrockband/default.htm"&gt;The Beatles Rockband&lt;/a&gt; site&amp;#160; (recently site of the day on &lt;a href="http://www.thefwa.com/"&gt;FWA site of the day&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://silverlight.net/content/samples/sl3/toolkitcontrolsamples/run/default.html"&gt;Silverlight 3 Control Toolkit Samples&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=Super+Employee+Placement+Alfred"&gt;Silverlight SEO&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/corrinab/archive/2009/08/30/9889051.aspx"&gt;Silverlight 3 Navigation Application Themes&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://smjenkins.members.winisp.net/slidentity/default.html?SlideShow=http://smjenkins.members.winisp.net/slidentity/slidentity.xaml"&gt;Slidentity&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;After lunch,&amp;#160; I did was on .NET RIA Services..&amp;#160; You can find the demo i did &lt;a href="http://bit.ly/4tmJA3"&gt;http://bit.ly/4tmJA3&lt;/a&gt; and the &lt;a href="http://blogs.msdn.com/brada/archive/2009/08/02/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-summary.aspx"&gt;full series&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;On to Portugal!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9901844" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/brada/archive/tags/RIAServices/default.aspx">RIAServices</category></item><item><title>Helsinki ReMix Silverlight 3 and .NET RIA Services</title><link>http://blogs.msdn.com/brada/archive/2009/09/30/helsinki-remix-silverlight-3-and-net-ria-services.aspx</link><pubDate>Wed, 30 Sep 2009 14:37:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9901271</guid><dc:creator>BradA</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/brada/comments/9901271.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9901271</wfw:commentRss><description>&lt;p&gt;I had a great time at &lt;a href="http://www.microsoft.com/finland/remix/"&gt;ReMix in Helsinki&lt;/a&gt;.&amp;#160; &lt;img style="display: inline; margin-left: 0px; margin-right: 0px" title="Finland Flag" alt="Finland Flag" align="right" src="http://ts3.mm.bing.net/images/thumbnail.aspx?q=966121497402&amp;amp;id=4835c22508184069da489ce3a03319d1&amp;amp;url=http%3a%2f%2fi257.photobucket.com%2falbums%2fhh204%2fminkku72%2fFinlandFlaggif.png" /&gt;&lt;/p&gt;  &lt;p&gt;I had a chance to give the Silverlight 3 overview today and it was a lot of fun.&amp;#160;&amp;#160; I used a this &lt;a href="http://www.slideshare.net/brada/silverlight-3-overview-for-remix"&gt;Silverlight 3 deck&lt;/a&gt; and did some fun demos:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.iis.net/media/experiencesmoothstreaming"&gt;IIS Smooth streaming&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.xbox.com/en-US/games/splash/b/beatlesrockband/default.htm"&gt;The Beatles Rockband&lt;/a&gt; site&amp;#160; (recently site of the day on &lt;a href="http://www.thefwa.com/"&gt;FWA site of the day&lt;/a&gt;)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://silverlight.net/content/samples/sl3/toolkitcontrolsamples/run/default.html"&gt;Silverlight 3 Control Toolkit Samples&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=Super+Employee+Placement+Alfred"&gt;Silverlight SEO&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/corrinab/archive/2009/08/30/9889051.aspx"&gt;Silverlight 3 Navigation Application Themes&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://smjenkins.members.winisp.net/slidentity/default.html?SlideShow=http://smjenkins.members.winisp.net/slidentity/slidentity.xaml"&gt;Slidentity&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The next session I did was on .NET RIA Services..&amp;#160; You can find the demo i did &lt;a href="http://bit.ly/4tmJA3"&gt;http://bit.ly/4tmJA3&lt;/a&gt; and the &lt;a href="http://blogs.msdn.com/brada/archive/2009/08/02/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-summary.aspx"&gt;full series&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9901271" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/brada/archive/tags/RIAServices/default.aspx">RIAServices</category></item></channel></rss>