<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Xun's Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/xusun/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/xusun/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 05:35:46 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Path length limit for Git</title>
      <link>https://docs.microsoft.com/archive/blogs/xusun/path-length-limit-for-git</link>
      <pubDate>Sun, 04 Mar 2012 11:42:52 GMT</pubDate>
      <dc:creator><![CDATA[Xun Sun - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/xusun/2012/03/04/path-length-limit-for-git/</guid>
      <description><![CDATA[Just found out that Git will be corrupted if the repo exist in a path that is longer than 302...]]></description>
      <content:encoded><![CDATA[<p>Just found out that Git will be corrupted if the repo exist in a path that is longer than 302 characters.</p>
<p>For example:</p>
<p>This works</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/07/82/3364.GitWork.PNG" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-07-82/3364.GitWork.PNG"><img border="0" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/07/82/3364.GitWork.PNG" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-07-82/3364.GitWork.PNG" /></a></p>
<p>The path is c:\ccnetworkdir\kudu\kudu.FunctionalTests\bin\debug\tests\testrepositories\CloneFromEmptyRepoAndPushShouldDeploy\CloneFromEmptyRepoAndPushShouldDeploy1234</p>
<p>If I make the path 1 character longer, git will be corrupted:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/07/82/3731.GitBusted.PNG" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-07-82/3731.GitBusted.PNG"><img border="0" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/07/82/3731.GitBusted.PNG" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-07-82/3731.GitBusted.PNG" /></a></p>
<p>You can notice that the branch name has become "((ref: re...))" instead of (master).</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>My friend, Haishi Bai, just posted an interesting C# watch</title>
      <link>https://docs.microsoft.com/archive/blogs/xusun/my-friend-haishi-bai-just-posted-an-interesting-c-watch</link>
      <pubDate>Sat, 25 Feb 2012 17:04:00 GMT</pubDate>
      <dc:creator><![CDATA[Xun Sun - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/xusun/2012/02/25/my-friend-haishi-bai-just-posted-an-interesting-c-watch/</guid>
      <description><![CDATA[https://haishibai.blogspot.com/2012/02/c-expression-clock.html

&nbsp;]]></description>
      <content:encoded><![CDATA[<p><a href="https://haishibai.blogspot.com/2012/02/c-expression-clock.html">https://haishibai.blogspot.com/2012/02/c-expression-clock.html</a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/07/82/2844.image[3].png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-07-82/2844.image_5B00_3_5D00_.png"><img border="0" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/07/82/2844.image[3].png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-07-82/2844.image_5B00_3_5D00_.png" /></a></p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Using Jenkins + Testswarm + QUnit for javascript test on Windows environment</title>
      <link>https://docs.microsoft.com/archive/blogs/xusun/using-jenkins-testswarm-qunit-for-javascript-test-on-windows-environment</link>
      <pubDate>Mon, 24 Oct 2011 00:45:00 GMT</pubDate>
      <dc:creator><![CDATA[Xun Sun - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/xusun/2011/10/24/using-jenkins-testswarm-qunit-for-javascript-test-on-windows-environment/</guid>
      <description><![CDATA[Recently I set up an environment for testing our javascript projects using Jenkins +...]]></description>
      <content:encoded><![CDATA[<p><span style="font-size: small;">Recently I set up an environment for testing our javascript projects using Jenkins + Testswarm&nbsp;+QUnit on Windows.&nbsp; Here's how I did it:</span></p>
<p><span style="font-size: small;"><strong>Background:</strong> </span></p>
<p><span style="font-size: small;">We have a bunch of tests written in Javascript using <a title="https://docs.jquery.com/QUnit" href="https://docs.jquery.com/QUnit" target="_blank">QUnit</a> and checked in to <a title="https://github.com/" href="https://github.com/" target="_blank">Github</a>.&nbsp; We'd like to set up a continuous integration system that pull the code from Github, and run the tests on the browsers/devices that we are interested in.&nbsp; After some research, we decided to start with the following:</span></p>
<ul>
<li><span style="font-size: small;"><a title="https://www.jenkins-ci.org" href="https://www.jenkins-ci.org" target="_blank">Jenkins </a>for its integration of &nbsp;<a title="https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin" href="https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin" target="_blank">Git plug-ins</a>. </span></li>
<li><span style="font-size: small;"><a title="https://swarm.jquery.org/" href="https://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/TestSwarm">TestSwarm</a>&nbsp;</span></li>
<ul>
<li><span style="font-size: small;">Nice integration with Qunit and be able to integrate into Jenkins as a build step.&nbsp;</span></li>
<li><span style="font-size: small;">Natual support for multiple browsers and devices</span></li>
</ul>
<li><span style="font-size: small;">We tried to stay on Windows Server as much as possible.</span></li>
</ul>
<p><span style="font-size: small;"><strong>Experience:</strong></span></p>
<p><span style="font-size: small;"><strong>TestSwarm</strong></span></p>
<p style="padding-left: 30px;">TestSwarm is not designed to be installed on traditional Windows servers natually.&nbsp; However, since it simply uses&nbsp;php + MySql + javascript and some Apache RewriteRules, it's pretty easy to run it on Windows Server as well.&nbsp; Here's what I did:</p>
<ul>
<li>Install Apache&nbsp;for Windows, MySql and PHP.</li>
<li>Follow the instruction of TestSwarm's wiki on Github: <a title="https://github.com/jquery/testswarm" href="https://github.com/jquery/testswarm" target="_blank">https://github.com/jquery/testswarm</a> , including set up mysql database, setting config.ini and .htaccess.&nbsp; I just ignored item #5 regarding cronjob.</li>
<li>Go to https://&lt;serverName&gt;/&lt;swarmPath&gt; (such as <a href="https://localhost/testswarm/">https://localhost/testswarm/</a> ) and register a new user.&nbsp; Go to the MySql database and find token value of the user just created in the "Users" table, which is needed later to add new jobs</li>
<li>To test if it works, open the testswarm page, log in, and open this page: <a href="https://localhost/testswarm/?state=addjob">https://localhost/testswarm/?state=addjob</a>; *** NOTE The&nbsp;trailing ";" is very important.&nbsp; Otherwise, you'll get a "Incorrect user name or Auth Token".&nbsp; I was able to repro this on testswarm's website.&nbsp; It seems this manual page is rarely used.&nbsp; It's more common to add jobs programmatically.&nbsp; Add a job and suite to point to some test page, and go to https://localhost/testswarm/user/&lt;username&gt; &nbsp;to see the new job added or open https://localhost/testswarm/run/&lt;userName&gt; to run the actual test</li>
</ul>
<p>&nbsp;</p>
<p><span style="font-size: small;"><strong>Jenkins</strong></span></p>
<p><span style="font-size: small;">Installation</span></p>
<ul>
<li><span style="font-size: small;">Download Jenkins from its official site <a href="https://jenkins-ci.org/">https://jenkins-ci.org/</a> </span></li>
<li><span style="font-size: small;">Install <a href="https://java.com/en/download/index.jsp">Java </a></span></li>
<li><span style="font-family: comic sans ms,sans-serif; font-size: small;">java -jar jenkins.war</span></li>
</ul>
<p><span style="font-size: small;">Configuration</span></p>
<ol>
<li><span style="font-size: small;">Install plug-ins </span></li>
<ul>
<li><span style="font-size: small;">Open <a href="https://localhost:8080">https://localhost:8080</a> from browser.&nbsp; Click "Manage Jenkins", then "Manage Plugins".</span></li>
<li><span style="font-size: small;">Add "Jenkins Git plugin", "Github Plugin", "Jenkins MS build Plugin" from Available Plugins</span></li>
<li><span style="font-size: small;">I aslo need the Jenkins-TestSwarm plugin, which cannot be found in the available plugins list of Jenkins.&nbsp; The Jenkins-Testswarm project is on Github <a href="https://github.com/appendto/jenkins-testswarm">https://github.com/appendto/jenkins-testswarm</a>&nbsp;.&nbsp; It contains a&nbsp;testswarmbuilder.hpi, which can be installed to Jenkins plugins (advance).&nbsp; Ideally, everything should just work now.&nbsp; It's true if you&nbsp;will not use any variables in your&nbsp;Testswarm&nbsp;settings.&nbsp; It's not true in our case.&nbsp; We'd like to deploy&nbsp;each commit to a&nbsp;new VDir, something like <a href="https://myserver/myproject/%Build_Number%/mytestpage1.html">https://myserver/myproject/%Build_Number%/mytestpage1.html</a>&nbsp;.&nbsp; We also wanted to&nbsp;customize the&nbsp;testswarm&nbsp;job title&nbsp;to show the Git commit number, which is available in Jenkins&nbsp;Git plugin as an environment variable:&nbsp;%GIT_COMMIT%&nbsp;&nbsp;&nbsp;However, there's a bug in Jenkins that does not replace the variables in settings with actualy environment variables.&nbsp; I have filed an issue <a href="https://issues.jenkins-ci.org/browse/JENKINS-11451">https://issues.jenkins-ci.org/browse/JENKINS-11451</a> to track the issue.&nbsp;&nbsp; My fix is at <a href="https://github.com/xusun/jenkins/commit/b8dee2c710637e718290f93c31d3854099d2d157#comments">https://github.com/xusun/jenkins/commit/b8dee2c710637e718290f93c31d3854099d2d157#comments</a>&nbsp;&nbsp; To workaround it, I did not recompile the entire Jenkins project.&nbsp; Instead, I downloaded the testswarmbuilder plugin and replaced the reproMacro calls with my fixed version.&nbsp; Rebuild the hpi and reinstall it to Jenkins.&nbsp; That fixed the variable issue.</span></li>
</ul>
<li><span style="font-size: small;">Config system ("Manage Jenkins" =&gt; "Configure System")</span></li>
<ul>
<li><span style="font-size: small;">Under Git section, set up "Path to Git Executable".&nbsp; This points to the full path to Git.exe</span></li>
<li><span style="font-size: small;">Under Git Plugin, input your names on Git and email.</span></li>
<li><span style="font-size: small;">Email Notification: it seems Jenkins has problems on authentications&nbsp;to exchange smtp servers.&nbsp; see Jenkins' issue 3983.<a href="https://issues.jenkins-ci.org/browse/JENKINS-3983">https://issues.jenkins-ci.org/browse/JENKINS-3983</a>.&nbsp; There are two workaround that I tried sucessfully:</span></li>
<ul>
<li>use smtp.gmail.com as smtp server</li>
<li>config your local IIS to act as&nbsp;a smtp relay server.&nbsp; see <a href="https://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/e4cf06f5-9a36-474b-ba78-3f287a2b88f2.mspx?mfr=true">this </a>msdn for details.&nbsp; In the local SMTP server, you can set up the authentication credentials used for relay.&nbsp; In this way, you don't need authentication with Jenkins.&nbsp;Note that even you have IIS7.0, this smtp server is managed in IIS6 management portal.</li>
</ul>
</ul>
</ol>
<p>Add Jobs</p>
<p style="padding-left: 30px;">Our workflow is like this: [Sombody checkin on Github] - &gt; [Jenkins&nbsp;pull from Github&nbsp;] -&gt; [msbuild&nbsp;our solution] -&gt; [msdeploy the websites to our IIS/Asp.net server] -&gt; [Add test jobs to TestSwarm] -&gt; [TestSwarm executes and return results] -&gt; [Jenkins build Success/Fail] -&gt; [Email groups]</p>
<p style="padding-left: 30px;">The following might need to be mentioned:</p>
<ol>
<li>Config the Git repository: In the help of Jenkins, you can set up the git url as https://... or git://... or ssh://.&nbsp;&nbsp; Since we have a private repo, the easiest way is to use ssh with a no-password key in the CI machine.</li>
<li>Build triggers.&nbsp; It's hard for us to define a Git callback proxy.&nbsp; So, we just simply use Poll SCM per minute: "* * * * *".</li>
<li>Deploy to IIS server.</li>
<ol>
<li>We would like to keep some build history for reference and possible issue investigations.&nbsp; But we also wanted to keep the IIS server as clean as possible.&nbsp; So, before deployment of a new build to IIS, we simply query the server for existing deployed vDirs and delete those that is older than <em>n</em> builds.&nbsp; Since we use the jenkins build number as the vDir name, it's easy to simply write a batch file to call msdeploy to do this.&nbsp; Here's the code, (although I have to admit that I'm not good at batch programming).&nbsp; Here we used Jenkins environment variables %BUILD_NUMBER%</li>
</ol></ol>
<pre class="scroll"><span style="font-size: small;"><code class="js">@echo off<br /> setlocal ENABLEDELAYEDEXPANSION<br /> <br /> IF /I '%1' == '' GOTO usage<br /> <br /> SET TARGET=%1<br /> <br /> SET KEEP=10<br /> ECHO CLEANING APP %KEEP% LESS THAN %BUILD_NUMBER%<br /> set cmd="msdeploy -verb:dump -source:iisapp="Default Web Site\MyProject",computername=%TARGET%"<br /> <br /> <br /> FOR /f "tokens=1-5 delims=\\" %%G IN ('%cmd%') DO (<br /> IF "%%J"=="" ( <br /> IF "%%H"=="upshot" ( <br /> IF NOT "%%I"=="" ( <br /> set /a test=%%I<br /> <br /> IF !test! GTR 0 (<br /> set /a commit=%BUILD_NUMBER% - !test!<br /> IF !commit! GTR %KEEP% (<br /> echo msdeploy -verb:delete -dest:iisapp="Default Web Site\MyProject\!test!",computername=%TARGET%<br /> msdeploy -verb:delete -dest:iisapp="Default Web Site\MyProject\!test!",computername=%TARGET%<br /> )<br /> ) <br /> )<br /> )<br /> )<br /> )<br /> <br /> GOTO end<br /> <br /> :usage<br /> ECHO.<br /> ECHO CleanOldVDirs [TARGET_COMPUTER_NAME]<br /> GOTO end<br /> <br /> :end<br /> EXIT</code></span></pre>
<pre class="scroll"><code class="js"> b. deploy script is even simpler:</code></pre>
<pre class="scroll"><span style="font-size: small;"><code class="js">@echo off<br /> setlocal ENABLEDELAYEDEXPANSION<br /> <br /> IF /I '%1' == '' GOTO usage<br /> <br /> SET TARGET=%1<br /> <br /> CALL msdeploy -verb:sync -source:iisapp="%WORKSPACE%\test\MyProj.Test" -dest:iisapp="Default Web Site\MyProject\%BUILD_NUMBER%",computername=%TARGET%<br /> REM ...<br /> REM OTHER DIRS TO DEPLOY <br /> GOTO end<br /> <br /> :usage<br /> ECHO.<br /> ECHO CreateNewVDir [TARGET_COMPUTER_NAME]<br /> GOTO end<br /> <br /> :end<br /> EXIT</code></span></pre>
<p style="padding-left: 30px;"><span style="font-size: small;">4.TestSwarm integration:</span></p>
<ul>
<li>
<div style="padding-left: 30px;"><span style="font-size: small;">we use Git commit id as the TestSwarm job title: <em>&nbsp;Commit # &lt;a href="<a href="https://github.com/WindowsAzure/Upshot.js/commit/%GIT_COMMIT%&quot;>%GIT_COMMIT%</a">https://github.com/xxx/MyProj.js/commit/%GIT_COMMIT%"&gt;%GIT_COMMIT%&lt;/a</a>&gt;</em></span></div>
</li>
<li>
<div style="padding-left: 30px;"><span style="font-size: small;">Auth token can be found in the MySql database on the TestSwarm machine</span></div>
</li>
</ul>
<p>&nbsp;</p>
<p><span style="font-size: small;">That's it.&nbsp;&nbsp; Final tip would be that the Testswarm machine may need some config update&nbsp;&nbsp;on the php.config to make the server on production state.&nbsp;&nbsp; Otherwise, the php error log may heavily slow down the server and cause timeout on TestSwarm jobs.</span></p>]]></content:encoded>
    </item>
    <item>
      <title>MetadataResolver</title>
      <link>https://docs.microsoft.com/archive/blogs/xusun/metadataresolver</link>
      <pubDate>Wed, 08 Dec 2010 14:15:31 GMT</pubDate>
      <dc:creator><![CDATA[Xun Sun - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/xusun/2010/12/08/metadataresolver/</guid>
      <description><![CDATA[This won't work:
var endpoints = MetadataResolver.Resolve(typeof(ICityService), new...]]></description>
      <content:encoded><![CDATA[<p>This won't work:</p>
<pre class="scroll"><code class="csharp">var endpoints = MetadataResolver.Resolve(typeof(ICityService), new EndpointAddress("https://xxx/CityService.svc"));
<br />
</code><code class="csharp"><br /></code></pre>
<p>Instead, it should point to the wsdl and better explicitly specify it's using HttpGet</p>
<pre class="scroll"><code class="csharp">var endpoints = MetadataResolver.Resolve(typeof(ICityService), new Uri("https://xxx/CityService.svc?<strong>wsdl</strong>"),  <strong>MetadataExchangeClientMode.HttpGet</strong> );
<br /></code></pre>]]></content:encoded>
    </item>
    <item>
      <title>Exposing JSON endpoint for DomainService on WCF Ria Services</title>
      <link>https://docs.microsoft.com/archive/blogs/xusun/exposing-json-endpoint-for-domainservice-on-wcf-ria-services</link>
      <pubDate>Wed, 25 Aug 2010 13:21:53 GMT</pubDate>
      <dc:creator><![CDATA[Xun Sun - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/xusun/2010/08/25/exposing-json-endpoint-for-domainservice-on-wcf-ria-services/</guid>
      <description><![CDATA[1. Make sure you have the WCF Ria Services Toolkit installed. 
2. In the Web project, add a...]]></description>
      <content:encoded><![CDATA[<p>1. Make sure you have the <a href="https://www.microsoft.com/downloads/details.aspx?FamilyID=7b43bab5-a8ff-40ed-9c84-11abb9cda559&amp;displaylang=en">WCF Ria Services Toolkit </a>installed. </p>
<p>2. In the Web project, add a reference to %ProgramFiles(x86)%\Microsoft SDKs\RIA Services\v1.0\Toolkit\Libraries\Server\Microsoft.ServiceModel.DomainServices.Hosting.dll</p>
<p>3. Edit the Web.config and add the following to the &lt;configuration&gt; section</p>
<p>&lt;configuration&gt;<br /><span style="background-color: #ffff00;">&nbsp; </span><strong><span style="background-color: #ffff00;">&lt;configSections&gt;<br />&nbsp;&nbsp;&nbsp; &lt;sectionGroup name="system.serviceModel"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;section name="domainServices" type="System.ServiceModel.DomainServices.Hosting.DomainServicesSection, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" allowDefinition="MachineToApplication" requirePermission="false" /&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/sectionGroup&gt;<br />&nbsp; &lt;/configSections&gt;</span></strong>&nbsp;...</p>
<p>&nbsp;and the following to the &lt;system.serviceModel&gt; section:</p>
<p>&nbsp;&lt;system.serviceModel&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;serviceHostingEnvironment aspNetCompatibilityEnabled="true"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; multipleSiteBindingsEnabled="true" /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong> </strong><span style="background-color: #ffff00;"><strong>&lt;domainServices&gt;<br /></strong></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="background-color: #ffff00;">&nbsp;</span><strong><span style="background-color: #ffff00;"> &lt;endpoints&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;add name="JSON" type="Microsoft.ServiceModel.DomainServices.Hosting.JsonEndpointFactory, Microsoft.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/endpoints&gt;</span><br /></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="background-color: #ffff00;"> <strong>&lt;/domainServices&gt;</strong></span></p>
<p>Done.&nbsp; Now you can open the json endpoint like this: <a href="https://localhost:27525/SilverlightApplication1-Web-DomainService1.svc/json">https://localhost:27525/SilverlightApplication1-Web-DomainService1.svc/json</a></p>
<p>The endpoints node also support other actions, such as "add" and "remove".&nbsp; You can also add other endpoints, such as soap and xmljson, &nbsp;in the same way or remove the default "binary" endpoint.</p>]]></content:encoded>
    </item>
    <item>
      <title>Using ComboBox for Child-Parent selection via RiaServices</title>
      <link>https://docs.microsoft.com/archive/blogs/xusun/using-combobox-for-child-parent-selection-via-riaservices</link>
      <pubDate>Mon, 23 Nov 2009 10:37:00 GMT</pubDate>
      <dc:creator><![CDATA[Xun Sun - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/xusun/2009/11/23/using-combobox-for-child-parent-selection-via-riaservices/</guid>
      <description><![CDATA[A common scenario when developing Business Applications via RiaServices is to allow users to edit a...]]></description>
      <content:encoded><![CDATA[<P>A common scenario when developing Business Applications via RiaServices is to allow users to edit a child-parent relationship using ComboBox.&nbsp; For example, the Customer and Order tables in Northwind database have a Parent-Child relationship, where a Customer might have 0 or more orders, and each Order must belong to one of the Customer.&nbsp; If we use a DataForm to display the Order entity, it will be convenient to use a ComboBox to show the Customer property in Order.&nbsp; Ideally, the ComboBox should show all the Customers in the dropdown list while the matching one is selected.&nbsp; </P>
<P>Here's how I do it:</P>
<OL>
<LI>Setting up a new Silverlight Application with RiaServices enabled.&nbsp; </LI>
<UL>
<LI>Creat new Silvelirght Application.</LI>
<LI>In Server project, add a new Ado.NET Entity Data Model</LI>
<LI>In Servers Explorer, connect to my SQL Server, Northwind Database, Check Customer and Order tables.</LI>
<LI>Build Server Project</LI>
<LI>Add a new DomainServices class.&nbsp; Select both Customer and Order tables in the Wizard and Enable editing.</LI>
<LI>Build the client project</LI></UL>
<LI>&nbsp;If you are using SL4, you would have the Drag/Drp from Data Source feature enabled in the client, where you can drag the data model into the UI.&nbsp; Here I picked the Order Entity and use ComboBox for displaying the Customer property:&nbsp; 
<P><IMG style="WIDTH: 253px; HEIGHT: 375px" title="Data Source" alt="Data Source" src="https://sunxun.members.winisp.net/Images/DataSource2.png" width=253 height=375 mce_src="https://sunxun.members.winisp.net/Images/DataSource2.png"> </P></LI>
<LI>Change the Order type to &nbsp;Detail and drag it to the MainPage.xaml designer.&nbsp; The Order Entity is displayed as a Grid where each property is a displayed in a column.&nbsp; Here I'm only demonstrating the setting up of the ComboBox.&nbsp; In real life, you might want a DataForm hooked up with the Order. The designer will automatically create a DomainDataSource and hook up the DataContext of the Grid to the DomainDataSource: <IMG style="WIDTH: 1084px; HEIGHT: 198px" title=dds border=1 alt=dds src="https://sunxun.members.winisp.net/images/dds1.png" width=1084 height=198 mce_src="https://sunxun.members.winisp.net/images/dds1.png"></LI>
<LI>Then I change the first TextBox that was bound to CustomerID to a ComboBox.&nbsp; Here we need to worry about 3 bindings: ItemsSource, SelectedItem and DisplayMemberPath</LI>
<LI>Ideally, ItemsSource should&nbsp;contain all the customers, so that users could select from.&nbsp; These customers instance should come from the same NorthwindCatalog DomainContext as used in the DomainDataSource.&nbsp; I set this up by&nbsp;creating a StaticResource that expose the EntitySet&lt;Customer&gt; of the NorthwindCatalog in client.&nbsp; Here, I used a&nbsp;singleton DomainContext (NorthwindCatalog) that is shared by both DomainDataSource and my&nbsp;StaticResource.</LI>
<LI>I created a new Class &nbsp;</> EntityProvider that contains a static NorthwindCatalog:</LI>
<P><IMG style="WIDTH: 442px; HEIGHT: 219px" src="https://sunxun.members.winisp.net/images/EntityProvider.png" width=442 height=219 mce_src="https://sunxun.members.winisp.net/images/EntityProvider.png"></P>
<LI>Then I commented out the DomainContext definition in the DomainDataSource and in the Page constructor I set its DomainContext to the static one</LI>
<P><IMG style="WIDTH: 1075px; HEIGHT: 98px" border=1 src="https://sunxun.members.winisp.net/images/dds2.png" width=1075 height=98 mce_src="https://sunxun.members.winisp.net/images/dds2.png"></P>
<P><IMG style="WIDTH: 566px; HEIGHT: 24px" border=1 src="https://sunxun.members.winisp.net/images/dds3.png" width=566 height=24 mce_src="https://sunxun.members.winisp.net/images/dds3.png"></P>
<P><IMG style="WIDTH: 380px; HEIGHT: 97px" border=1 src="https://sunxun.members.winisp.net/images/resource1.png" width=380 height=97 mce_src="https://sunxun.members.winisp.net/images/resource1.png"></P>
<LI>Now we can just set the ComboBox.ItemsSource to this static resource</LI>
<LI>Next, we can just set the SelectedItem binding to the Custom property since the DataContext is Order</LI>
<LI>By default, it would display the id.&nbsp; If we'd like to be more friendly, we can set the DisplayMemberPath to one of the properties of Customer, for example, the ContactName</LI>
<LI>Here's the final ComboBox:</LI>
<P><IMG style="WIDTH: 1225px; HEIGHT: 26px" border=1 src="https://sunxun.members.winisp.net/images/combobox.png" width=1225 height=26 mce_src="https://sunxun.members.winisp.net/images/combobox.png"></P>
<LI>Final result when running:</LI>
<P><IMG style="WIDTH: 318px; HEIGHT: 526px" border=1 src="https://sunxun.members.winisp.net/images/comboresult.png" width=318 height=526 mce_src="https://sunxun.members.winisp.net/images/comboresult.png"></P></OL>]]></content:encoded>
    </item>
    <item>
      <title>Tips on Updating existing EF models to EF 4.0</title>
      <link>https://docs.microsoft.com/archive/blogs/xusun/tips-on-updating-existing-ef-models-to-ef-4-0</link>
      <pubDate>Fri, 13 Nov 2009 13:46:00 GMT</pubDate>
      <dc:creator><![CDATA[Xun Sun - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/xusun/2009/11/13/tips-on-updating-existing-ef-models-to-ef-4-0/</guid>
      <description><![CDATA[Tips on Updating existing EF models to EF 4.0
(Courtesy RIA Services...]]></description>
      <content:encoded><![CDATA[<P style="MARGIN: 0in 0in 0pt" class=MsoListParagraph><B><SPAN style="FONT-FAMILY: 'Cambria','serif'; FONT-SIZE: 12pt">Tips on Updating existing EF models to EF 4.0<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoListParagraph><SPAN style="FONT-FAMILY: 'Cambria','serif'"><FONT size=3>(Courtesy RIA Services QA)<o:p></o:p></FONT></SPAN></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoListParagraph><B><SPAN style="FONT-FAMILY: 'Cambria','serif'; FONT-SIZE: 12pt"><o:p>&nbsp;</o:p></SPAN></B></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; COLOR: black; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>Recommended Steps:<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: 'Courier New'; COLOR: black; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>Create a separate project<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: 'Courier New'; COLOR: black; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>Add new EDMX models from the current database and let the framework naturally auto-generate all the names first.&nbsp; <o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1.5in; mso-list: l0 level3 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: Wingdings; COLOR: black; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore"><FONT size=3>§</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>Remember to leave this option checked (the default):</FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1.5in; mso-list: l0 level3 lfo1" class=MsoListParagraph><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3><o:p><IMG style="WIDTH: 285px; HEIGHT: 24px" title="EF Foreign Key Selection" border=1 alt="EF Foreign Key Selection" src="https://sunxun.members.winisp.net/Images/efforeignkey.png" width=285 height=24 mce_src="https://sunxun.members.winisp.net/Images/efforeignkey.png"></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0in 0in 0pt 1.5in" class=MsoListParagraph><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id=_x0000_t75 coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape style="WIDTH: 205.5pt; HEIGHT: 22.5pt" id=_x0000_i1025 alt="" type="#_x0000_t75"><v:imagedata src="file:///C:\Users\xusun\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:href="cid:image001.png@01CA646B.B5BBC320"></v:imagedata></v:shape><o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: 'Courier New'; COLOR: black; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>Change the global names from UI first:<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1.5in; mso-list: l0 level3 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: Wingdings; COLOR: black; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore"><FONT size=3>§</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>Entity Container Name<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1.5in; mso-list: l0 level3 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: Wingdings; COLOR: black; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore"><FONT size=3>§</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>Namespace<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1.5in; mso-list: l0 level3 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: Wingdings; COLOR: black; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore"><FONT size=3>§</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>Custom Tool Namespace<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: 'Courier New'; COLOR: black; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT size=3 face=Calibri>Then do a replace from the new model to the old one (Tip:&nbsp;Pick up your favorite <EM>diff</EM> tool</FONT></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>&nbsp;for this).&nbsp; <o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1.5in; mso-list: l0 level3 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: Wingdings; COLOR: black; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore"><FONT size=3>§</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>Some models have clear changes that were easily matched<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1.5in; mso-list: l0 level3 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: Wingdings; COLOR: black; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore"><FONT size=3>§</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>Some models are generated with disordered properties.&nbsp; In such cases, one has to copy everything and rely on the following steps to update them. (Recommended)<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: 'Courier New'; COLOR: black; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>Save and try to open the edmx designer<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1.5in; mso-list: l0 level3 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: Wingdings; COLOR: black; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore"><FONT size=3>§</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>If there are some changes not made correctly, VS won’t open the designer and will identify the error.&nbsp; Fix all errors.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: 'Courier New'; COLOR: black; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>Re-Compile the Server project<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1.5in; mso-list: l0 level3 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: Wingdings; COLOR: black; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore"><FONT size=3>§</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>The existing DomainServices classes will show errors for any changed names that were not correct.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1.5in; mso-list: l0 level3 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: Wingdings; COLOR: black; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore"><FONT size=3>§</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>To further fix the names:<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 2in; mso-list: l0 level4 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; COLOR: black; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>Open the EDMX model browser<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 2in; mso-list: l0 level4 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; COLOR: black; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>Based on the compiler error messages, check the corresponding name in Entity Types, Associations, EntityContainer.EntitySets, Association Sets and Model.Store Tables and make sure that the new version matches the old ones.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: 'Courier New'; COLOR: black; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>After fixing all the errors, the update is completed.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; COLOR: black; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>Caveats:<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: 'Courier New'; COLOR: black; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT face=Calibri><FONT size=3>If possible, consider using the new names and update your DomainServices instead of changing the model.<o:p></o:p></FONT></FONT></SPAN></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l0 level2 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: 'Courier New'; COLOR: black; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black"><FONT size=3><FONT face=Calibri>If you have to, let the designer do the right thing for you.&nbsp; Try NOT touch the edmx file manually, unless you have to.&nbsp; <o:p></o:p></FONT></FONT></SPAN></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><SPAN style="COLOR: #1f497d"><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></SPAN></P>
<P mce_keep="true">&nbsp;</P>]]></content:encoded>
    </item>
    <item>
      <title>Silverlight 2 控件源代码公布</title>
      <link>https://docs.microsoft.com/archive/blogs/xusun/silverlight-2</link>
      <pubDate>Thu, 08 Jan 2009 18:18:00 GMT</pubDate>
      <dc:creator><![CDATA[Xun Sun - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/xusun/2009/01/08/silverlight-2/</guid>
      <description><![CDATA[Silverlight 2控件的源代码现在已经可以供公众下载&nbsp;。...]]></description>
      <content:encoded><![CDATA[<P class=MsoNormal style="MARGIN: 0in 0in 0pt">Silverlight 2控件的源代码现在已经可以供公众下载&nbsp;。 这个是Seema发布的消息:</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><A href="https://blogs.msdn.com/seema/archive/2009/01/07/published-the-control-source-code-for-silverlight-2-runtime-sdk.aspx">https://blogs.msdn.com/seema/archive/2009/01/07/published-the-control-source-code-for-silverlight-2-runtime-sdk.aspx</A></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt" mce_keep="true">&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Verdana>We’ve just </FONT><A href="https://www.microsoft.com/downloads/details.aspx?FamilyID=EB83ED4C-AC85-4DE9-8395-285628EE2254&amp;displaylang=en"><FONT face=Verdana>published the sample source code</FONT></A><FONT face=Verdana> for the Silverlight 2 Controls as shipped in the runtime and the SDK.</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p><FONT face=Verdana>&nbsp;</FONT></o:p></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Verdana>Within the RuntimeControls folder, you’ll see a Solution that contains three projects: </FONT></P>
<P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"><SPAN style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"><SPAN style="mso-list: Ignore"><FONT face=Calibri size=3>1.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>SilverlightControls – One can edit the source and default control templates of the controls in order to build a DLL containing custom versions of the controls. </FONT></P>
<P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"><SPAN style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"><SPAN style="mso-list: Ignore"><FONT face=Calibri size=3>2.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Controls Sample – One can take the SilverlightControls DLL from #1 and include it in a project such as this. If you press F5, this app will launch displaying the controls created in #1.</FONT></P>
<P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"><SPAN style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"><SPAN style="mso-list: Ignore"><FONT face=Calibri size=3>3.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>System.Windows.Design – This project is here largely for reference, it shows how to build a Design dll for VisualStudio and Expression Blend such that your custom controls would display within the toolbox. </FONT></P>
<P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"><IMG style="WIDTH: 260px; HEIGHT: 549px" height=549 src="https://eicyzw.bay.livefilestore.com/y1pUsPw5tpHgSR-ye-wDGHNXzlehm8K8hYLKc2pzh0ltd_No4sYJGttm3D1osJGz6_RQwnSNs712Qm0aGzTNw3qtA/control%20source%20VS%20explorer.jpg" width=260 mce_src="https://eicyzw.bay.livefilestore.com/y1pUsPw5tpHgSR-ye-wDGHNXzlehm8K8hYLKc2pzh0ltd_No4sYJGttm3D1osJGz6_RQwnSNs712Qm0aGzTNw3qtA/control%20source%20VS%20explorer.jpg"></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Verdana>Disclaimer: Note that we did take a small amount of changes in the Runtime Controls to get the project to properly build outside of our internal build environment. </FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Verdana></FONT>&nbsp;</P><FONT face=Verdana>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt">The <A class="" href="https://www.microsoft.com/downloads/details.aspx?FamilyID=EB83ED4C-AC85-4DE9-8395-285628EE2254&amp;displaylang=en" mce_href="https://www.microsoft.com/downloads/details.aspx?FamilyID=EB83ED4C-AC85-4DE9-8395-285628EE2254&amp;displaylang=en">source for the following controls was released</A>:</P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level1 lfo1"><SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><SPAN style="mso-list: Ignore"><FONT size=3>-</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Managed Runtime Controls:</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1"><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>ButtonBase</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1"><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Button</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1"><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>HyperlinkButton</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1"><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>CheckBox</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1"><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>RadioButton</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1"><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>ToggleButton</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1"><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>RangeBase</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1"><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>ProgressBar</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1"><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Slider</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1"><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>ScrollBar</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1"><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Thumb</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level1 lfo1"><SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><SPAN style="mso-list: Ignore"><FONT size=3>-</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>SDK classes:</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1"><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Calendar</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1"><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>DatePicker</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1"><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>DataGrid</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1"><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>TabControl</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1"><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>GridSplitter</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level1 lfo1"><SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><SPAN style="mso-list: Ignore"><FONT size=3>-</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Unite Tests for the SDK controls</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level1 lfo1"><SPAN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><SPAN style="mso-list: Ignore"><FONT size=3>-</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Appropriate sub-types (eventargs/ handlers, etc)</FONT></P></FONT>]]></content:encoded>
    </item>
    <item>
      <title>Silverlight图片相对路径的设置</title>
      <link>https://docs.microsoft.com/archive/blogs/xusun/silverlight</link>
      <pubDate>Wed, 31 Dec 2008 14:15:00 GMT</pubDate>
      <dc:creator><![CDATA[Xun Sun - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/xusun/2008/12/31/silverlight/</guid>
      <description><![CDATA[这个问题也困扰了我很久.经常在Project里包含一些图片，然后在应用里指定路径，结果就是Load不上，遇到ImageError的错误。
&nbsp;
这里列出一些常用的设置Image...]]></description>
      <content:encoded><![CDATA[<P>这个问题也困扰了我很久.经常在Project里包含一些图片，然后在应用里指定路径，结果就是Load不上，遇到ImageError的错误。</P>
<P>&nbsp;<IMG style="WIDTH: 472px; HEIGHT: 254px" height=254 src="https://sunxun.members.winisp.net/Images/ImageError.png" width=472 mce_src="https://sunxun.members.winisp.net/Images/ImageError.png"></P>
<P>这里列出一些常用的设置Image 相对路径的几种方法:</P>
<P>假设我有这样一个solution,包括: MyImageLibrary,其中包含一个文件夹"Images\MyImage1.png"; MyLoadImage是我的Silverlight Application里面也有一个Images\MyImage2.png, 页面中有一Image控件来分别显示这两个图片<IMG style="WIDTH: 222px; HEIGHT: 278px" height=278 src="https://sunxun.members.winisp.net/Images/ImageSolution.png" width=222 mce_src="https://sunxun.members.winisp.net/Images/ImageSolution.png">&nbsp;</P>
<P>那么有如下几种选择:</P>
<OL>
<LI>Build Action="Resource", Copy To OutPut Directory = "Do not copy".</LI></OL>
<P><IMG style="WIDTH: 384px; HEIGHT: 170px" height=170 src="https://sunxun.members.winisp.net/Images/imageProperty.png" width=384 mce_src="https://sunxun.members.winisp.net/Images/imageProperty.png">&nbsp;</P>
<P>这时如果需要用另一个项目中的Image,那么需要这样设置Image路径</P>
<P>xaml:&nbsp;&lt;Image Source="/MyImageLibrary;component/Images/MyImage1.png" /&gt;</P>
<P>code: myImage.Source = new BitmapImage(new Uri("/MyImageLibrary;component/Images/MyImage1.png", UriKind.Relative));</P>
<P>这个Uri有如下3部分：</P>
<UL>
<LI>/MyImageLibrary 是Image所在的Assembly的名字，前面的"/"是必须的。</LI>
<LI>";component/"是Assembly名字和在此Assembly下具体路径之间的分隔符，必须要有。</LI>
<LI>"Images/MyImage1.png" 就是所在Assembly中的路径啦。</LI></UL>
<P>此时图片是作为资源被嵌入进Assembly的. 如果用Reflector 打开MyImageLibrary.dll，就能够找到这个资源：</P>
<P><IMG style="WIDTH: 580px; HEIGHT: 164px" height=164 src="https://sunxun.members.winisp.net/Images/reflectorImage.png" width=580 mce_src="https://sunxun.members.winisp.net/Images/reflectorImage.png"></P>
<P mce_keep="true">这是Image在另一个assembly的时候的用法，如果在同一个项目下，那就可以直接这样用：</P>
<P mce_keep="true">&lt;Image Source="Images/MyImage2.png"/&gt;</P>
<P>2. Build Action = "Content", Copy To OutPut Directory = "Do not copy".</P>
<P>这种情况，如果图片在另一个Project中，那是没有办法获得的。只有在同一个Project中的时候,才能够被找到，因为这种设置会把Image嵌入.xap中.如果打开生成的xap,会看到如下:<IMG style="WIDTH: 319px; HEIGHT: 105px" height=105 src="https://sunxun.members.winisp.net/Images/xapImage.png" width=319 mce_src="https://sunxun.members.winisp.net/Images/xapImage.png"></P>
<P>可以看到只有同一个Project中的Image作为Content嵌入到xap中。</P>
<P>这时的用法就是</P>
<P>&lt;Image Source="Images/MyImage2.png"/&gt;</P>
<P>3.Build Action = "None", Copy To OutPut Directory = "Copy Always".</P>
<P>如果不希望图片被压进Xap文件，而是用户调用的时候再动态Load,那可以用这种方法。这种方法图片会被复制到 xap所在路径下,路径依然是 Images\MyImage1.png, Images\MyImage2.png.</P>
<P>使用方法如前&lt;Image Source="Images/MyImage1.png" /&gt; 或&lt;Image Source="Images/MyImage2.png"/&gt;</P>
<P mce_keep="true">&nbsp;</P>
<P mce_keep="true">遇到图片加载错误时，应该先检查选用的是那种方法，然后再检查图片是否被正确放在所期望的地方,dll/xap/路径 中。</P>
<P mce_keep="true">其他常见的原因还包括：用绝对路径的时候要注意是否是Cross-scheme, 比如如果你的项目要从加载位于 <A href="https://www.mydomain.com/Myimage.png">https://www.mydomain.com/Myimage.png</A>的图片，但是如果你Debug是在浏览器中打开的是<A href="file:///C:/MyProject/">file://C:/MyProject/</A>..那就属于是cross-scheme (File vs. Http),这时会有Security错误产生，解决方法就是用一个ASP.net website 作为起始工程，然后加入Silverlight 工程。</P>]]></content:encoded>
    </item>
    <item>
      <title>DataGrid 12月份补丁发布</title>
      <link>https://docs.microsoft.com/archive/blogs/xusun/datagrid-12</link>
      <pubDate>Sun, 28 Dec 2008 16:26:00 GMT</pubDate>
      <dc:creator><![CDATA[Xun Sun - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/xusun/2008/12/28/datagrid-12/</guid>
      <description><![CDATA[DataGrid 自从10月份和Silverlight...]]></description>
      <content:encoded><![CDATA[<P>DataGrid 自从10月份和Silverlight 2一起发布以来,我们陆续从各个渠道获得了一些用户反馈以及我们内部新发现的一些Bug.因为DataGrid相对比较独立,比较容易更新,而不需要影响决大多数最终用户,所以我们的管理团队决定单独发布一个补丁版本来解决这些已发现的问题.这就促成了我们12月版本的发布.</P>
<P>这个版本的发布其实令我个人感觉很高兴,因为这让人看到了Microsoft在对用户的反馈方面速度的提高,不再是一味的等待大的发布,而是通过各种更加灵活的手段迅速解决已发现的用户面临的各种问题.我真的希望这个模式会让我们的产品更加具有竞争力.</P>
<P>下面是这个Release所修正的Bug:</P>
<H1 style="MARGIN: 24pt 0in 0pt"><FONT face=Cambria color=#365f91 size=5>Silverlight 2&nbsp;DataGrid December 2008 Release</FONT></H1>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>We have just uploaded a new version of the DataGrid that&nbsp;includes a number of bug fixes and a few behavioral breaking changes from the version that&nbsp;shipped with Silverlight 2.&nbsp; Please take the time to read through and understand all of the changes before you decide to upgrade your DataGrid.&nbsp; Following this list of changes is a set of instructions on how to start using the new version.</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<H2 style="MARGIN: 10pt 0in 0pt"><FONT face=Cambria color=#4f81bd size=4>Breaking Changes</FONT></H2>
<P class=MsoNormal style="MARGIN: 0in 0in 6pt"><FONT face=Calibri size=3>An application that uses the DataGrid will still compile but will no longer work as expected if it was dependent on any of the following behaviors.</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>1.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>FrozenColumnCount now takes hidden columns into account.&nbsp; Previously, only the first columns with Visibility set to Visible were included in the range of frozen columns.&nbsp; A column with Visibility set to Collapsed can now be considered frozen even though it isn’t visible.&nbsp; This is to ensure that a column’s DisplayIndex corresponds with the DataGrid’s FrozenColumnCount (i.e. if FrozenColumnCount == 3, columns with DisplayIndex &lt; 3 are considered frozen).</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>2.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>The DataGrid’s current cell is now kept in sync with an ICollectionView’s notion of currency.&nbsp; Moving the current position or changing the current item of an ICollectionView will now move the current cell and selected item of a DataGrid, and vice versa.&nbsp; For this to work, the DataGrid’s ItemsSource must be set to a collection that fully implements ICollectionView.</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>3.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>A developer can now programmatically reorder a non-frozen column to the frozen column range (and vice versa) by changing a column’s DisplayIndex.&nbsp; The DataGrid used to throw an exception in these cases.&nbsp; An end-user, however, is still <SPAN>un</SPAN>able to do this through the UI by dragging column headers.</FONT></P>
<P><FONT face=Calibri size=3></FONT></P>
<H2 style="MARGIN: 10pt 0in 0pt">
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT></P><FONT face=Cambria color=#4f81bd size=4>Bugs Fixed</FONT></H2>
<P class=MsoNormal style="MARGIN: 0in 0in 6pt"><FONT face=Calibri size=3>The following is a list of bugs fixed in the DataGrid since the version released with Silverlight 2.<SPAN>&nbsp; </SPAN>If any application had a workaround for these bugs, the workaround is no longer necessary and should be removed.<SPAN>&nbsp; </SPAN>Its inclusion may cause undesired behavior.</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>1.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Horizontal Gridlines do not show in FillerColumn</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>2.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>DragIndicator does not show during reorder when DataGrid is placed inside StackPanel</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>3.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>DragIndicatorStyle only exists on the DataGrid level, should also exist at the column level</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>4.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>DataGrid doesn't support a disabled state in the main template<BR><I>By default, the DataGrid is now grayed out when IsEnabled == false, and includes a new visual state.</I></FONT></FONT></P>
<P><SPAN><SPAN><FONT face=Calibri size=3>5.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>EndEdit is called twice<BR><I>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Any application accounting for IEditableObject.EndEdit accidentally being called twice by the DataGrid will need to be updated.</I></FONT></FONT> <SPAN><SPAN><FONT face=Calibri size=3>6.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN><FONT size=3><FONT face=Calibri>Able to leave edited DataGrid without ever triggering EndEdit</FONT></FONT></SPAN> </SPAN></SPAN></SPAN></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><FONT face=Calibri size=3>7.&nbsp;&nbsp;&nbsp; Changing ItemsSource while in Editing Mode causes Exception to be thrown</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>8.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Row containing focus disappears after sort or ItemsSource change<BR><I>Any application working around the “disappearing row” issue by manipulating focus within the DataGrid will no longer need to do so, and should be updated.</I></FONT></FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>9.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>ColumnHeader button pressed visualization should match the new Button pressed visualization</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>10.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>SL Designer hits a NullReferenceException while adding an empty HeaderStyle</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>11.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Cells out of view do not always show up when a resize of the DataGrid forces them in view</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>12.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>AutoSizedRows keep growing even when the rows are recycled</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>13.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Scrollbar incorrect when ItemsSource changed and DataGrid is on a background Tab</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>14.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Incorrect VerticalScrollbar when setting ItemsSource on DataGrid inside a Popup</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>15.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>HorizontalContentAlignment does not have any effect on the DataGridColumnHeader</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>16.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Resizing columns to smaller than column header content removes separator</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>17.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>SelectedItem is not updated at the time when the CurrentCellChanged event is raised</FONT></P>
<P><I><FONT size=3><FONT face=Calibri>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Any application accounting for the fact that Selection was out of sync at the time the CurrentCellChanged event was raised will need to be updated.<SPAN>&nbsp; </SPAN>Now the DataGrid will not raise either of the SelectionChanged or CurrentCellChanged events until both selection and currency have been updated.</FONT></FONT></I> </P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>18.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Sorting or Resetting a CollectionView causes incorrect RemovedItems in SelectionChanged event</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>19.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>ScrollColumnIntoView does not align correctly if there are frozen columns</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>20.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Reordering a column should only show DragIndicator for valid reorder positions</FONT></P>
<P><I><FONT size=3><FONT face=Calibri>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The DataGrid will now clip the ColumnHeader’s DragIndicator so that it doesn’t show up when dragging a frozen column over a non-frozen column, and vice versa.</FONT></FONT></I> </P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>21.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Adding or removing columns within the frozen column range should not throw exception</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>22.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>FrozenColumnCount and the Column’s IsFrozen is getting out of sync when it isn’t visible</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>23.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Exception thrown when sorting a DataGrid that has a list of nullable ints as its ItemsSource</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>24.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>CellStyle Background property doesn’t work</FONT></P>
<P><I><FONT size=3><FONT face=Calibri>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Previously, setting the Background property inside of CellStyle had no effect.<SPAN>&nbsp; </SPAN>Applications with unique CellStyles should ensure that the desired background color is applied.</FONT></FONT></I> </P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>25.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>CellStyle is not applied to Filler Column</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>26.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Setting a DataGrid style that overwrites the template after the original template has been loaded causes an Argument exception</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>27.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Cannot hold editing mode when using a DatePicker or ComboBox in editing template</FONT></P>
<P><I><FONT size=3><FONT face=Calibri>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; There was a bug that prevented any editing control that uses a Popup to work correctly in the DataGrid.<SPAN>&nbsp; </SPAN>As soon as the Popup opened, the DataGrid would lose focus and automatically CommitEdit.<SPAN>&nbsp; </SPAN>It now tracks focus within a child Popup in order to support DatePicker, ComboBox and any other editing control that opens a Popup.</FONT></FONT></I> </P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>28.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Double-click required on external Buttons when in editing mode</FONT></P>
<P><I><FONT size=3><FONT face=Calibri>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A single click on Buttons (or any other control that handles MouseLeftButtonDown) outside of the DataGrid will now register correctly.<SPAN>&nbsp; </SPAN>Previously, if the user was in editing mode, the first click would CommitEdit and the second click would register on the Button.</FONT></FONT></I> </P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>29.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Sorting or resetting the ItemsSource does not raise UnloadingRow events</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><FONT face=Calibri size=3></FONT>&nbsp;</P><FONT face=Cambria color=#4f81bd>
<H2 style="MARGIN: 10pt 0in 0pt"><FONT size=4><SPAN>Installation Instructions</SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"></SPAN></FONT></H2></FONT>
<P class=MsoNormal style="MARGIN: 0in 0in 6pt"><FONT face=Calibri size=3>Visit the&nbsp;</FONT><FONT face=Calibri size=3><A class="" title="Silverlight 2 DataGrid December 2008 Release" href="https://www.microsoft.com/downloads/details.aspx?FamilyID=084a1bb2-0078-4009-94ee-e659c6409db0">Silverlight 2 DataGrid December 2008 Release</A>&nbsp;download page and read the installation instructions carefully.&nbsp; In order to successfully use the new&nbsp;DataGrid you <EM>must</EM> do the following.</FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3></FONT></SPAN></SPAN></P>
<P><SPAN><SPAN><FONT face=Calibri size=3><SPAN><SPAN><FONT face=Calibri size=3>1.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Close all instances of Microsoft Visual Studio.</FONT><FONT face=Calibri size=3><SPAN><SPAN><FONT face=Calibri size=3>2.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>Delete all cached toolbox items by removing all files beginning with "toolbox" from %LocalAppData%\Microsoft\VisualStudio\9.0. </FONT><FONT face=Calibri size=3></P>
<UL>
<LI>On Microsoft Windows XP, %LocalAppData% is Documents and Settings\<I>UserName</I>\Local Settings\Application Data. 
<LI>On Microsoft Windows Vista, %LocalAppData% is Users\<I>UserName</I>\AppData\Local. </LI></UL>
<P><SPAN><SPAN><FONT face=Calibri size=3>3.&nbsp;&nbsp;&nbsp; </FONT></SPAN></SPAN><FONT face=Calibri size=3>Replace the following assemblies with the ones in this package: </FONT><FONT face=Calibri size=3></P>
<UL>
<LI>%ProgramFiles%\Microsoft SDKs\Silverlight\v2.0\Libraries\Client\System.Windows.Controls.Data.dll 
<LI>%ProgramFiles%\Microsoft SDKs\Silverlight\v2.0\Libraries\Client\System.Windows.Controls.Data.Design.dll </LI></UL>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><SPAN><SPAN><FONT face=Calibri size=3>4.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri size=3>For any existing projects, delete the reference to System.Windows.Controls.Data.dll and then re-add the reference. </FONT></P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in" mce_keep="true">&nbsp;</P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"><FONT face=Calibri size=3>Happy Holidays from the Silverlight DataGrid Team!</FONT></P></FONT></FONT></FONT></FONT></SPAN></SPAN>]]></content:encoded>
    </item>
  </channel>
</rss>