<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>LA.NET [EN]</title><link>http://msmvps.com/blogs/luisabreu/default.aspx</link><description>Ramblings about C#, .NET and Programming</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Laneten" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>MS AJAX Lib beta is out</title><link>http://feedproxy.google.com/~r/Laneten/~3/gfBAScejpZ0/ms-ajax-lib-beta-is-out.aspx</link><pubDate>Fri, 20 Nov 2009 14:10:45 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1741009</guid><dc:creator>luisabreu</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1741009</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/20/ms-ajax-lib-beta-is-out.aspx#comments</comments><description>&lt;p&gt;You can get it from &lt;a href="http://www.asp.net/ajaxlibrary/download.ashx"&gt;here&lt;/a&gt;. I’m curious to see if it contains new features…&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1741009" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/f_msSEJiUT3BnNcinr2mtf1nI5Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/f_msSEJiUT3BnNcinr2mtf1nI5Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/f_msSEJiUT3BnNcinr2mtf1nI5Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/f_msSEJiUT3BnNcinr2mtf1nI5Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/gfBAScejpZ0" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/MS+AJAX/default.aspx">MS AJAX</category><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Javascript/default.aspx">Javascript</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/20/ms-ajax-lib-beta-is-out.aspx</feedburner:origLink></item><item><title>Reactive Extensions for .NET</title><link>http://feedproxy.google.com/~r/Laneten/~3/A8s3wPz5vk4/reactive-extensions-for-net.aspx</link><pubDate>Fri, 20 Nov 2009 13:58:14 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1741007</guid><dc:creator>luisabreu</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1741007</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/20/reactive-extensions-for-net.aspx#comments</comments><description>&lt;p&gt;I’ve just noticed this &lt;a href="http://blogs.msdn.com/pfxteam/archive/2009/11/19/9925951.aspx"&gt;post&lt;/a&gt; from the &lt;a href="http://blogs.msdn.com/pfxteam/"&gt;Parallel team&lt;/a&gt;. Now, this will be useful because it seems like it solves lots of the bugs introduced in the latest public CTP of the Parallel lib :) &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1741007" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-qaDrDBUgQyXMF2w9Oj38nWGsJE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-qaDrDBUgQyXMF2w9Oj38nWGsJE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-qaDrDBUgQyXMF2w9Oj38nWGsJE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-qaDrDBUgQyXMF2w9Oj38nWGsJE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/A8s3wPz5vk4" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Parallel+Extensions/default.aspx">Parallel Extensions</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/20/reactive-extensions-for-net.aspx</feedburner:origLink></item><item><title>XAML: what about events?</title><link>http://feedproxy.google.com/~r/Laneten/~3/352q743Vsik/xaml-what-about-events.aspx</link><pubDate>Thu, 19 Nov 2009 12:54:45 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1740755</guid><dc:creator>luisabreu</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1740755</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/19/xaml-what-about-events.aspx#comments</comments><description>&lt;p&gt;A friend of mine asked me about events and XAML: can we setup event handlers in XAML? And the answer is, yes, you can. Here’s a quick example of how you can handle the click event of a button:&lt;/p&gt;  &lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Click&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Button_Click&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;And yes, you must define the Button_Click method in your code-behind file (note that you could do it inline – ie, in the XAML file – if you’re using WPF). I must confess that I’m not really a fan of this approach since I prefer to put all my code in the code-behind file. For making it work, I’ll need to change the previous code slightly by adding a name to the button:&lt;/p&gt;

&lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Name&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;bt&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;And now, from within the constructor, I can setup my event handler like this:&lt;/p&gt;

&lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#e8e8e8;"&gt;bt&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Click &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;+= &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Button_Click&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Final note: in the real world, I’ll probably end up with a Lambda expression for simple handlers. As you can see, setting up handlers from the XAML is possible (the syntax is the same as you’ve got for props) but I don’t really recommend it. And that’s it for now. In the next post, we’ll talk about Silverlight’s markup extension support. Stay tuned.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1740755" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/q5Ji7aerbAeYXI3-1ZjKU4WEEWk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q5Ji7aerbAeYXI3-1ZjKU4WEEWk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/q5Ji7aerbAeYXI3-1ZjKU4WEEWk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q5Ji7aerbAeYXI3-1ZjKU4WEEWk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/352q743Vsik" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/XAML/default.aspx">XAML</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/19/xaml-what-about-events.aspx</feedburner:origLink></item><item><title>How to build types that can be consumed from XAML</title><link>http://feedproxy.google.com/~r/Laneten/~3/fQx8pYm-NH0/how-to-build-types-that-can-be-consumed-from-xaml.aspx</link><pubDate>Thu, 19 Nov 2009 10:32:43 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1740713</guid><dc:creator>luisabreu</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1740713</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/19/how-to-build-types-that-can-be-consumed-from-xaml.aspx#comments</comments><description>&lt;p&gt;Now that you &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/19/associating-xaml-namespaces-to-clr-namespaces.aspx"&gt;know&lt;/a&gt; how to use custom types in XAML, you might be wondering if there are any thing you should keep in mind when designing new types that should be consumed from XAML. I’ve already &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/18/xaml-and-collections.aspx"&gt;said&lt;/a&gt; before that collection properties need to have a getter that return a valid instance of an object. But there’s more. Here are a few things you should consider when designing types for being consumed from XAML:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Elements can only be public classes which have a public parameterless constructor (notice that nested classes aren’t supported);&lt;/li&gt;    &lt;li&gt;structs are usable from XAML too (consider using a type converter in some scenarios where you don’t want to use the default constructor to initialize the struct)&lt;/li&gt;    &lt;li&gt;non-collections properties which reference objects (ie, not primitive types) should ensure that the type has a default constructor (or that the type or property that is being defined has an adequate type converter);&lt;/li&gt;    &lt;li&gt;you should use type converters when you’re using a reference type which does not have a default constructor (or when you’ve used an abstract type as the type of a property).&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Regarding collections, you’ve already &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/18/xaml-and-collections.aspx"&gt;seen&lt;/a&gt; the requisites for using them from XAML: the type should implement the IList or the IDictionary/IDictionary&amp;lt;TKey, TValue&amp;gt; interfaces.&lt;/p&gt;  &lt;p&gt;And I guess this sums it up quite nicely. Stay tuned for more on Silverlight.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1740713" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/V9yEIf2XSBPZ1qdEi38uaEqH9_w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V9yEIf2XSBPZ1qdEi38uaEqH9_w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/V9yEIf2XSBPZ1qdEi38uaEqH9_w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V9yEIf2XSBPZ1qdEi38uaEqH9_w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/fQx8pYm-NH0" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/XAML/default.aspx">XAML</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/19/how-to-build-types-that-can-be-consumed-from-xaml.aspx</feedburner:origLink></item><item><title>Associating XAML namespaces to CLR namespaces</title><link>http://feedproxy.google.com/~r/Laneten/~3/vkfFfyTgLt0/associating-xaml-namespaces-to-clr-namespaces.aspx</link><pubDate>Thu, 19 Nov 2009 10:10:51 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1740708</guid><dc:creator>luisabreu</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1740708</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/19/associating-xaml-namespaces-to-clr-namespaces.aspx#comments</comments><description>&lt;p&gt;Take a look at the following (simple) XAML:&lt;/p&gt;  &lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;UserControl &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Class&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;SilverlightApplication1.MainPage&amp;quot;
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Canvas &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Name&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;myCanvas&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Canvas&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;UserControl&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;When I started talking about XAML, I &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/16/introducing-xaml.aspx"&gt;said&lt;/a&gt; that the default XAML namespace is associated to several controls. You might be a little curious on how this is done. By using Reflector, you’ll see that many of the Silverlight assemblies associate CLR namespaces to XAML namespaces through the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.markup.xmlnsdefinitionattribute(VS.95).aspx"&gt;XmlnsDefinitionAttribute&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/luisabreu.metablogapi/4722.xmlnsdefinitionattribute_5F00_6FA6D7C8.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="xmlnsdefinitionattribute" border="0" alt="xmlnsdefinitionattribute" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/luisabreu.metablogapi/0020.xmlnsdefinitionattribute_5F00_thumb_5F00_05411066.jpg" width="322" height="296" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;You’ll typically find this attribute in most assemblies that have been thought with Silverlight and WPF in mind. Notice, though, that its use isn’t mandatory to map a CLR namespace to XAML namespace because Silverlight (and WPF) supports a special mechanism for doing that. For instance, suppose you’ve got a type called BeautifulGrid, defined in the CLR Test namespace, in a Dumb assembly. Now, when you build the assembly, you didn’t knew anything about the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.markup.xmlnsdefinitionattribute(VS.95).aspx"&gt;XmlnDefinitionAttribute&lt;/a&gt;. How can you use the BeautifulGrid in your XAML file? Here’s the answer:&lt;/p&gt;

&lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;UserControl &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Class&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;SilverlightApplication1.MainPage&amp;quot;
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;my&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;clr-namespace:Test;assembly=Dumb&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Canvas &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Name&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;myCanvas&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;my&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;BeautifulGrid&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;            
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;my&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;BeautifulGrid&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Canvas&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;UserControl&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;There are some interesting gotchas&amp;#160; you should keep in mind when using this syntax:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the clr-namespace key is separated from its associated value by a semi-colon (:) while the assembly part of the expression uses an equal sign (=)&lt;/li&gt;

  &lt;li&gt;this is one of those places where you *can’t* use white spaces for improved readability;&lt;/li&gt;

  &lt;li&gt;you can omit the assembly part if the namespace you want to use is in the same assembly as the “current” XAML file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even though Silverlight supports the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.markup.xmlnsdefinitionattribute(VS.95).aspx"&gt;XmlnsDefinitionAttribute&lt;/a&gt;, the truth is that it doesn’t really play an important role for using custom types in Silverlight. The recommended approach for using custom types in XAML is to use the clr-namespace approach I’ve showed above.&lt;/p&gt;

&lt;p&gt;And that’s it for now. Stay tuned for more in Silverlight.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1740708" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/auacqRp96Fxzz1yaBmk2fy3B_gI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/auacqRp96Fxzz1yaBmk2fy3B_gI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/auacqRp96Fxzz1yaBmk2fy3B_gI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/auacqRp96Fxzz1yaBmk2fy3B_gI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/vkfFfyTgLt0" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/XAML/default.aspx">XAML</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/19/associating-xaml-namespaces-to-clr-namespaces.aspx</feedburner:origLink></item><item><title>South Africa 2010: here we go, here we go!</title><link>http://feedproxy.google.com/~r/Laneten/~3/irKcgTiyGRw/south-africa-2010-here-we-go-here-we-go.aspx</link><pubDate>Wed, 18 Nov 2009 21:49:36 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1740574</guid><dc:creator>luisabreu</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1740574</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/18/south-africa-2010-here-we-go-here-we-go.aspx#comments</comments><description>&lt;p&gt;A friendly advice to the Bosnian coach: next time, play more and talk less!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1740574" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xPoh0AO4alsWPr1QSNmvmWChobg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xPoh0AO4alsWPr1QSNmvmWChobg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xPoh0AO4alsWPr1QSNmvmWChobg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xPoh0AO4alsWPr1QSNmvmWChobg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/irKcgTiyGRw" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Trivia/default.aspx">Trivia</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/18/south-africa-2010-here-we-go-here-we-go.aspx</feedburner:origLink></item><item><title>XAML languages features</title><link>http://feedproxy.google.com/~r/Laneten/~3/jahrHw5WT6w/xaml-languages-features.aspx</link><pubDate>Wed, 18 Nov 2009 15:15:15 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1740495</guid><dc:creator>luisabreu</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1740495</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/18/xaml-languages-features.aspx#comments</comments><description>&lt;p&gt;As I’ve &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/18/xaml-and-collections.aspx"&gt;said&lt;/a&gt; before, Silverlight supports only a subset of the existing XAML keywords you can use in WPF. Here’s the list of keywords you can use in your Silverlight:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;x:Class: you can apply this attribute to the root element of the XAML file (or object tree) that is going to be “compiled”. When you apply this attribute, you’ll end up creating a partial class (named after the value you’ve passed to the attribute) which is joined with the associated code-behind file. Even though you don’t really have to use this attribute, the truth is that you’ll probably use them in 99% of your XAML files; &lt;/li&gt;    &lt;li&gt;x:Key: as you’ve seen in the previous &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/18/xaml-and-collections.aspx"&gt;post&lt;/a&gt;, you can use this attribute to set the key of a dictionary’s entry of a resource dictionary; &lt;/li&gt;    &lt;li&gt;x:Name: used for identifying an object so that it can be easily recovered from the code-behind file. The “practical effect” of using this attribute is that you’ll end up having a field in the code-behind file which references the element you’ve defined on the XAML file. As you can see on the &lt;a href="http://msdn.microsoft.com/en-us/library/cc189028(VS.95).aspx"&gt;docs&lt;/a&gt;, you’re limited in the values you can pass to this attribute. It goes without saying that you must ensure uniqueness through the names you give to the elements; &lt;/li&gt;    &lt;li&gt;x:Null: this *extension* is used for setting the value of a property to null. You can use this extension with the property element or attribute syntax. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The best way to understand these attributes is to build a demo user control and see what happens after everything is compiled. For instance, lets assume that we’re adding a new Silverlight User Control to an existing Silverlight application (this will let me show what happens when you use the x:Class and x:Name attributes). By doing that, we end up with two files: a XAML and its corresponding code-behind CS file (shown in the next figure).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/luisabreu.metablogapi/5305.xamlandcodebehind_5F00_1DE403E0.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="xamlandcodebehind" border="0" alt="xamlandcodebehind" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/luisabreu.metablogapi/4401.xamlandcodebehind_5F00_thumb_5F00_1DB45420.jpg" width="244" height="53" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Here’s the default generated XAML (I’ve removed the unnecessary namespaces):&lt;/p&gt;  &lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;UserControl 
 &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Class&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;SilverlightApplication1.SilverlightControl1&amp;quot;
 &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;
 &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;
 &lt;/span&gt;&lt;span style="color:#009b00;"&gt;mc&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Ignorable&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;d&amp;quot;
 &lt;/span&gt;&lt;span style="color:#009b00;"&gt;d&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;DesignHeight&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;300&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;d&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;DesignWidth&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;400&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;    
 &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Grid &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Name&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;LayoutRoot&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Background&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;White&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
 &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Grid&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;UserControl&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;If you look at the properties of the XAML file, you’ll see that it looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/luisabreu.metablogapi/1185.xamlprops_5F00_693381D7.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="xamlprops" border="0" alt="xamlprops" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/luisabreu.metablogapi/3821.xamlprops_5F00_thumb_5F00_12E6D6FE.jpg" width="244" height="167" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The default configuration ends up embedding the XAML file in the assembly (check the next image):&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/luisabreu.metablogapi/7127.xamlresources_5F00_11DEC154.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="xamlresources" border="0" alt="xamlresources" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/luisabreu.metablogapi/6560.xamlresources_5F00_thumb_5F00_0F558F96.jpg" width="281" height="161" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;You’ll also get a new C# file (.g.cs) from the XAML “compilation” (onde again, I’ve edited the code before pasting it here):&lt;/p&gt;

&lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#d6d694;"&gt;namespace &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;SilverlightApplication1 &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;{
 &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;public partial class &lt;/span&gt;&lt;span style="color:#009b00;"&gt;SilverlightControl1 &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;: &lt;br /&gt;                   &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;System&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Windows&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Controls&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;UserControl &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;{
  &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;internal &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;System&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Windows&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Controls&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Grid LayoutRoot&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;;
  &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;private bool &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;_contentLoaded&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;;
  [&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;System&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Diagnostics&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#009b00;"&gt;DebuggerNonUserCodeAttribute&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;()]
  &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;public void &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;InitializeComponent&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;() {
     &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;if &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;_contentLoaded&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;) {
                &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;return&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;;
     }
     &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;_contentLoaded &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;= &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;true&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;;
     &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;System&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Windows&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Application&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;LoadComponent&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;br /&gt;         &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;this&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;, &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;new &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;System&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Uri&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;br /&gt;                     &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;/SilverlightApplication1;” + &lt;br /&gt;                     “component/SilverlightControl1.xaml&amp;quot;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;, &lt;br /&gt;&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;                     System&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;UriKind&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Relative&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;));
      &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;this&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;LayoutRoot &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;= &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;((&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;System&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Windows&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Controls&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Grid&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;)&lt;br /&gt;                             (&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;this&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;FindName&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;)));
  }
 }
}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;There are several interesting things going on here:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the x:Class attribute is responsible for the creation of the partial class defined in the .g.cs file; &lt;/li&gt;

  &lt;li&gt;all the named elements (ie, all the elements that use the x:Name attribute) get added to this partial class as fields. Notice that the FindName method is used for grabbing a reference to an element that is defined through the XAML file; &lt;/li&gt;

  &lt;li&gt;the LoadComponent method is used for loading the XAML defined in the XAML file. In this case, the generated code is getting the embedded XAML file from the SiverlightApplication 1 assembly. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;by now, you should be able to understand why you can use the same name you’ve used for the x:Name attribute to access that element from a code-behind file.&amp;#160; &lt;/p&gt;

&lt;p&gt;As you’ve seen, you can access the XAML elements from your code behind because building a Silverlight project ends up generating a partial class which introduces fields with the same name as the ones you used for the elements defined through XAML. THis is only possible due to the use of the x:Class and x:Name attributes.&lt;/p&gt;

&lt;p&gt;And that’s it for now. Stay tuned for more on Silverlight.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1740495" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/h3dyq1oKt6MnIfv9P41GqmjG5eU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/h3dyq1oKt6MnIfv9P41GqmjG5eU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/h3dyq1oKt6MnIfv9P41GqmjG5eU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/h3dyq1oKt6MnIfv9P41GqmjG5eU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/jahrHw5WT6w" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/XAML/default.aspx">XAML</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/18/xaml-languages-features.aspx</feedburner:origLink></item><item><title>XAML and collections</title><link>http://feedproxy.google.com/~r/Laneten/~3/_VqCMRsatuw/xaml-and-collections.aspx</link><pubDate>Wed, 18 Nov 2009 12:13:35 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1740476</guid><dc:creator>luisabreu</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1740476</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/18/xaml-and-collections.aspx#comments</comments><description>&lt;p&gt;We’ve already talked about several features related to XAML. In this post, we’ll keep going and we’ll see how to specify collections in XAML. There are two basic types of collections you can use in XAML: lists and dictionaries. Before going on, it’s important to understand that you’re not really creating new collections in XAML; instead, we’re adding items to existing collections (in other words, if you’re building an object which has a collection like property and you want it to be set from XAML, then don’t forget to make sure that the getter returns a valid reference to a collection object).&lt;/p&gt;  &lt;p&gt;“List collections” are collections which expose an Add method (generally, we’re speaking about objects which implement the IList interface). In these cases, you’ll typically put the elements within the collection property and the XAML parser will create an object that represents each item before adding them to that collection through the Add method:&lt;/p&gt;  &lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Rectangle &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Width&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;300&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Height&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;150&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Rectangle.Fill&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;LinearGradientBrush &lt;/span&gt;&lt;span style="color:#009b00;"&gt;StartPoint&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;0,0&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;EndPoint&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;1,1&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;LinearGradientBrush.GradientStops&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;GradientStop &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Color&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;White&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Offset&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;0&amp;quot; &lt;/span&gt;&lt;span style="color:#a1b070;"&gt;/&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;GradientStop &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Color&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Black&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Offset&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;1&amp;quot; &lt;/span&gt;&lt;span style="color:#a1b070;"&gt;/&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;LinearGradientBrush.GradientStops&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;LinearGradientBrush&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Rectangle.Fill&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Rectangle&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Btw, we could have simplified the XAML because GradientStops is the content property for the LinearGradientBrush object:&lt;/p&gt;

&lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Rectangle &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Width&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;300&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Height&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;150&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Rectangle.Fill&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;LinearGradientBrush &lt;/span&gt;&lt;span style="color:#009b00;"&gt;StartPoint&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;0,0&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;EndPoint&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;1,1&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
       &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;GradientStop &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Color&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;White&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Offset&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;0&amp;quot; &lt;/span&gt;&lt;span style="color:#a1b070;"&gt;/&amp;gt;
       &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;GradientStop &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Color&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Black&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Offset&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;1&amp;quot; &lt;/span&gt;&lt;span style="color:#a1b070;"&gt;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;LinearGradientBrush&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Rectangle.Fill&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Rectangle&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;You can always write the previous code in C# (assume rect is a reference to the rectangle):&lt;/p&gt;

&lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#e8e8e8;"&gt;rect&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Fill &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;= &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;new &lt;/span&gt;&lt;span style="color:#009b00;"&gt;LinearGradientBrush&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;()
{
    &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;StartPoint &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;= &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;new &lt;/span&gt;&lt;span style="color:#ff8080;"&gt;Point&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:cyan;"&gt;0&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;, &lt;/span&gt;&lt;span style="color:cyan;"&gt;0&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;),
    &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;EndPoint &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;= &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;new &lt;/span&gt;&lt;span style="color:#ff8080;"&gt;Point&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:cyan;"&gt;1&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;, &lt;/span&gt;&lt;span style="color:cyan;"&gt;1&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;),
    &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;GradientStops &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;= &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;{
             &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;new &lt;/span&gt;&lt;span style="color:#009b00;"&gt;GradientStop&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;()
            {
                &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Color &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;= &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Colors&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;White&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;,
                &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Offset &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;= &lt;/span&gt;&lt;span style="color:cyan;"&gt;0
            &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;}
            ,
            &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;new &lt;/span&gt;&lt;span style="color:#009b00;"&gt;GradientStop&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;()
            {
                &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Color &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;= &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Colors&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Black&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;,
                &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Offset &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;= &lt;/span&gt;&lt;span style="color:cyan;"&gt;1
            &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;}
    }
};&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Dictionaries are a different kind of collection: in these cases, each entry is a pair composed by a key and a value. The important thing here is understanding that you specify the key through the x:key attribute:&lt;/p&gt;

&lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Color &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Key&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Black&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;A&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;0&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;B&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;0&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;G&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;0&amp;quot; &lt;/span&gt;&lt;span style="color:#a1b070;"&gt;/&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;For now, lets forget that we’re specifying resources and we’ll only concentrate on the syntax. As you can see, we added a tag which identifies the resource as a color and we’re identifying it with the word Black (ie, Black is the key that identifies this entry). Once again, you could translate the previous code into C# (Resources is an object of type ResourceDictionary), but I’ll leave it to you (if you don’t have anything better to do, that is :) )&lt;/p&gt;

&lt;p&gt;Notice x:Key is one of the few XAML keywords Silverlight supports. Besides it, there’s also the x:Class, the x:Name and x:Null attributes (we’ll come back to them in a future post). If you’re coming from WPF, then this might seem limited at first, but it’s all we have in Silverlight.&lt;/p&gt;

&lt;p&gt;And I guess this sums it up for now. Stay tuned for more on Silverlight.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1740476" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mwIBnaxzSzRRCpGq9UOO19hKwMg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mwIBnaxzSzRRCpGq9UOO19hKwMg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mwIBnaxzSzRRCpGq9UOO19hKwMg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mwIBnaxzSzRRCpGq9UOO19hKwMg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/_VqCMRsatuw" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/XAML/default.aspx">XAML</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/18/xaml-and-collections.aspx</feedburner:origLink></item><item><title>Type converter on Silverlight</title><link>http://feedproxy.google.com/~r/Laneten/~3/S0NpBjTd1WQ/type-converter-on-silverlight.aspx</link><pubDate>Wed, 18 Nov 2009 11:09:17 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1740465</guid><dc:creator>luisabreu</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1740465</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/18/type-converter-on-silverlight.aspx#comments</comments><description>&lt;p&gt;Today we’ll talk a little bit about the role played by type converters in “transforming” XAML into C# objects. Here’s a quick example:&lt;/p&gt;  &lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;    
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Name&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;bt&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Click&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;bt_Click&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Width&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;100&amp;quot;
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Content&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Say Hi&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Background&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Red&amp;quot; &lt;/span&gt;&lt;span style="color:#a1b070;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;If you look carefully, you’ll see that &lt;a href="http://msdn.microsoft.com/en-us/library/bb979650(VS.95).aspx"&gt;Background&lt;/a&gt; expects a &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.brush(VS.95).aspx"&gt;Brush&lt;/a&gt; object. All XAML attribute are strings by default. In&amp;#160; other words, you’d need the following C# code to set the background of the button:&lt;/p&gt;

&lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#e8e8e8;"&gt;bt&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Background &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;= &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;new &lt;/span&gt;&lt;span style="color:#009b00;"&gt;SolidColorBrush&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Colors&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Yellow&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;);&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;So, what’s going on here? Well, it’s simple: the parser uses a type converter to convert the string into the correct object. In practice, type converters are objects which inherit from &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverter(VS.95).aspx"&gt;TypeConverter&lt;/a&gt; class. You can associate a type converter to a type or to a property by using the &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverterattribute(VS.95).aspx"&gt;TypeConverterAttribute&lt;/a&gt;. The parser will respect that option and will use the indicated type converter to translate the string into the expected object type.&lt;/p&gt;

&lt;p&gt;Now, unlike WPF, where everything is really based on managed type converters, in Silverlight, there is an *unmanaged* type converter which is used for performing most of the common conversions you’d expect to happen (take a look at the internal SilverlightTypeConverter class and you’ll notice that you’ll end up using the “unmanaged” XcpImports type).&lt;/p&gt;

&lt;p&gt;So, don’t expect to find many type converters by firing up .NET Reflector. Btw, you should keep in mind that you can still build and use your own type converters for your types. The XAML parser will always check the current property and/or type and if it’s associated with a managed type converter, it will honor that relationship and your converter will be used.&lt;/p&gt;

&lt;p&gt;And I guess it’s all for now. Stay tuned for more on Silverlight.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1740465" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vbsCjhnqnuLdgPDZFO2JaNjsdak/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vbsCjhnqnuLdgPDZFO2JaNjsdak/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vbsCjhnqnuLdgPDZFO2JaNjsdak/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vbsCjhnqnuLdgPDZFO2JaNjsdak/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/S0NpBjTd1WQ" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/XAML/default.aspx">XAML</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/18/type-converter-on-silverlight.aspx</feedburner:origLink></item><item><title>Plano Inclinado: Portuguese talk show which looks at how things are in the real “Portugal”</title><link>http://feedproxy.google.com/~r/Laneten/~3/BRsLqjc_qRQ/plano-inclinado-portuguese-talk-show-which-looks-at-how-things-are-in-the-real-portugal.aspx</link><pubDate>Tue, 17 Nov 2009 12:37:24 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1740232</guid><dc:creator>luisabreu</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1740232</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/17/plano-inclinado-portuguese-talk-show-which-looks-at-how-things-are-in-the-real-portugal.aspx#comments</comments><description>&lt;p&gt;If you’ve missed it, then don’t forget to check it &lt;a href="http://sic.sapo.pt/online/video/informacao/plano-inclinado/2009/11/o-pais-nao-se-apercebe-da-gravidade-da-situacao-em-que-se-encontra17-11-2009-10438.htm"&gt;online&lt;/a&gt;. It’s really a shame that most Portuguese people won’t ever watch this program (which is probably one of the first programs with real quality in Portugal) because they’re watching soap operas or some other low quality programs…&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1740232" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/muqn2IKbl7Uz5D8Tp3QuxWJNkJ0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/muqn2IKbl7Uz5D8Tp3QuxWJNkJ0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/muqn2IKbl7Uz5D8Tp3QuxWJNkJ0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/muqn2IKbl7Uz5D8Tp3QuxWJNkJ0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/BRsLqjc_qRQ" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Trivia/default.aspx">Trivia</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/17/plano-inclinado-portuguese-talk-show-which-looks-at-how-things-are-in-the-real-portugal.aspx</feedburner:origLink></item><item><title>XAML: using content properties</title><link>http://feedproxy.google.com/~r/Laneten/~3/pfIWfa2fIL4/xaml-using-content-properties.aspx</link><pubDate>Tue, 17 Nov 2009 12:06:51 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1740219</guid><dc:creator>luisabreu</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1740219</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/17/xaml-using-content-properties.aspx#comments</comments><description>&lt;p&gt;In the previous &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/17/xaml-and-property-elements.aspx"&gt;post&lt;/a&gt;, we’ve seen that we can use one of two approaches for setting the value of a property: we can use the property element or the attribute syntax (and, as we’ve seen in the previous &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/17/xaml-and-property-elements.aspx"&gt;post&lt;/a&gt;, you can’t use them both interchangeably). In this &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/17/xaml-and-property-elements.aspx"&gt;post&lt;/a&gt;, we’ll keep going and we’ll see how content properties simplify even more the markup we need to write to setup the value of a property.&lt;/p&gt;  &lt;p&gt;For instance, here’s how I’d set the Content of a button to an image:&lt;/p&gt;  &lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;    
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Name&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;bt&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Click&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;bt_Click&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Width&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;100&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
   &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Image &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Source&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;/p52.jpg&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Stretch&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;UniformToFill&amp;quot; &lt;/span&gt;&lt;span style="color:#a1b070;"&gt;/&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;If you compare this snippet with the one we had &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/17/xaml-and-property-elements.aspx"&gt;before&lt;/a&gt;, you’ll notice that we’re not using the &amp;lt;Button.Content&amp;gt; markup element to specify that we’re setting the Content property. Why? &lt;/p&gt;

&lt;p&gt;To understand what’s going on, we need to talk a little bit about content properties. Any class can designate a property that should be set to whatever content is inside the XML element. As you’ve probably guessed, these properties are called content properties. &lt;/p&gt;

&lt;p&gt;In the case of the Button class, its content property is the Content property. Specifying a content property is done through the ContentPropertyAttribute. For instance, in the case of the Button element, we need to look at the ContentControl class (used as base) to see how the content property is defined:&lt;/p&gt;

&lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a79a86;"&gt;[&lt;/span&gt;&lt;span style="color:#009b00;"&gt;ContentProperty&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Content&amp;quot;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;, &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;true&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;)]
&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;public class &lt;/span&gt;&lt;span style="color:#009b00;"&gt;ContentControl &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;: &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Control
&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;{&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Whenever you see this attribute, you know that the content of element is directly “transformed” and copied to the indicated property. And that’s it for now. Stay tuned for more on Silverlight.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1740219" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hAzBbOCakp3EHjoU-L9OTxN8qOY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hAzBbOCakp3EHjoU-L9OTxN8qOY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hAzBbOCakp3EHjoU-L9OTxN8qOY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hAzBbOCakp3EHjoU-L9OTxN8qOY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/pfIWfa2fIL4" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/XAML/default.aspx">XAML</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/17/xaml-using-content-properties.aspx</feedburner:origLink></item><item><title>XAML and property elements</title><link>http://feedproxy.google.com/~r/Laneten/~3/niAGQiYZzBA/xaml-and-property-elements.aspx</link><pubDate>Tue, 17 Nov 2009 10:20:11 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1740205</guid><dc:creator>luisabreu</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1740205</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/17/xaml-and-property-elements.aspx#comments</comments><description>&lt;p&gt;In the previous &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/16/introducing-xaml.aspx"&gt;post&lt;/a&gt;, we’ve started looking at same basic XAML. At the time, we’ve defined a simple button by using the following syntax:&lt;/p&gt;  &lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;    
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Name&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;bt&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Content&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Say hi&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Click&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;bt_Click&amp;quot; &lt;/span&gt;&lt;span style="color:#a1b070;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;In the previous snippet, we’re setting the Content property and the Click event. Btw, and in case you’re wondering, events are set up before the properties. This is the only thing you can take for granted (you can’t really depend on the order of the attributes in your XAML to influence the order by which properties are set). This makes sense because it means that eventual handlers will be called if an event is generated by setting a property to a specific value. &lt;/p&gt;

&lt;p&gt;If you look at Content’s definition, you’ll see that it expects an object. That means we can, for instance, pass it an image instead of setting it to text:&lt;/p&gt;

&lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;    
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Name&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;bt&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Click&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;bt_Click&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Width&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;100&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button.Content&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Image &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Source&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;/p52.jpg&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Stretch&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;UniformToFill&amp;quot; &lt;/span&gt;&lt;span style="color:#a1b070;"&gt;/&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button.Content&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;            
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The previous snippet is showing the property element syntax. You should use it whenever you can’t use a simple string to define the value of a property. Property element syntax is really simple: you define a property by combining the name of the element with the name of the property. Property element syntax and attribute syntax are the two options you’ve got for setting the value of a property in XAML (sort of: we’ll leave content properties and collection properties to a future post).&lt;/p&gt;

&lt;p&gt;In case you’re wondering, you can’t use something like this in Silverlight:&lt;/p&gt;

&lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;    
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Name&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;bt&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Click&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;bt_Click&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Width&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;100&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button.Content&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
        &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;Say Hi&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button.Content&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;            
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;If you try loading the previous XAML, you should get an exception which says something like “Say Hi isn’t allowed as the button’s content”. In case you’re wondering, this does work in WPF. Unfortunately, in Silverlight you’ll have to use the attribute syntax for setting the value of the Content to a string.&lt;/p&gt;

&lt;p&gt;In this cases, you do need to use another element. Here’s the code you can use for setting the Content’s property to text through the property element syntax:&lt;/p&gt;

&lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;    
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Name&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;bt&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Click&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;bt_Click&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Width&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;100&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button.Content&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;Say Hi&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button.Content&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;            
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Fair enough: this isn’t really similar to what we had before, but it’s really the only way to set the button’s Content property to something that looks like text (notice that in this case, the Content is set to another FrameworkElement and not to a simple string).&lt;/p&gt;

&lt;p&gt;Understanding why something works in WPF and not in Silverlight is not complicated: you just need to keep in mind that all the features considered not essential were removed in order to control the size of the Silverlight framework. And it looks like this was one of them…&lt;/p&gt;

&lt;p&gt;You must be wondering which syntax you should use when you want to set the value of a property. Sometimes, the answer is simple since we’ve seen a case where you can’t use both syntaxes for setting a specific value. When both approaches are supported, I’ll tend to use the one which is more compact (typically, this means going with the attribute syntax whenever possible).&lt;/p&gt;

&lt;p&gt;And I guess this wraps it up for now. Stay tuned for more on Silverlight.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1740205" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jpflNmj8WU_pi1BhjMjUW2CP5T4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jpflNmj8WU_pi1BhjMjUW2CP5T4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jpflNmj8WU_pi1BhjMjUW2CP5T4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jpflNmj8WU_pi1BhjMjUW2CP5T4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/niAGQiYZzBA" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/XAML/default.aspx">XAML</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/17/xaml-and-property-elements.aspx</feedburner:origLink></item><item><title>Introducing XAML</title><link>http://feedproxy.google.com/~r/Laneten/~3/v-X7fUF_mGM/introducing-xaml.aspx</link><pubDate>Mon, 16 Nov 2009 21:16:53 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1740066</guid><dc:creator>luisabreu</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1740066</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/16/introducing-xaml.aspx#comments</comments><description>&lt;p&gt;You can’t really do it any other way: we must understand XAML before going on (at least, its basic features). In this post, we’ll start looking at XAML and at how we can use it to define the UI of our Silverlight user controls. So, the big question: what is XAML? To me, XAML (which, btw, means Extensible Application Markup Language) is a declarative language which you can use to define and initialize objects. Notice that XAML isn’t Silverlight specific. If my memory is correct, it was introduced with .NET 3.0 and its new frameworks (WPF and WF). In Silverlight, we’ll be using it to define the looks of our UIs. As we’ll see, it really saves us lots of code. &lt;/p&gt;  &lt;p&gt;Ok, since this is a an intro post, we’ll start simple. In this post, we’ll talk about how we can create objects and set its properties. Here’s a simple XAML snippet:&lt;/p&gt;  &lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Button &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;    
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Name&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;bt&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Content&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Say hi&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Click&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;bt_Click&amp;quot; &lt;/span&gt;&lt;span style="color:#a1b070;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;XAML is an XML language. That also means that XAML is case sensitive. Notice that we’re talking about element and attribute names here. Values are a special case: sometimes they are case sensitive; others, they aren’t (more about this in future posts). The previous example already introduces two important concepts: it shows us how to declare an element in XAML&amp;#160; and how to set its one of its properties.&lt;/p&gt;

&lt;p&gt;Btw, the previous code is equivalent to the following C# code:&lt;/p&gt;

&lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#d6d694;"&gt;var &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;bt &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;= &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;new &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Button&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;();
&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;bt&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Content &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;= &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Say hi&amp;quot;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;;
&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;bt&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Click &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;+= &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;s&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;, &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;args&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;) &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;{ };&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Ok, there’s a slight difference between both snippets: in the XAML snippet, we’re saying that the Click event will be handled by a method named bt_Click, while on the C# example, we’re using a Lambda expression. &lt;/p&gt;

&lt;p&gt;I’m not sure if you’ve noticed, but we had to use a couple of namespaces when we wrote the XAML. The default namespace (&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/a&gt;) is hardcoded to several CLR namespaces (notice that I haven’t found the list, but I assumed this behavior because that was what happened with WPF 1.0). The other namespace (the XAML one that is associated to prefix x) is used for defining some directives which are interpreted by the XAML parser (notice that the directives really look like attributes, but they are, in fact, directives). In the previous XAML snippet, the x:Name directive ends up creating a new Button object named bt (in a future post, we’ll see how this is done). &lt;/p&gt;

&lt;p&gt;The x:class directive is another XAML directive that is used often when you need to associate a XAML file to a class defined in a code-behind file (oh yes, Silverlight does support code-behind files too :) ).&lt;/p&gt;

&lt;p&gt;We’ve just started scratching XAML. As we’ll see in future posts, there are several interesting things we can do. For now, the main thing to keep in mind is that all that you can do through XAML, you can also do from C# code (though, as I’ve discovered recently, XAML code might be more performant than writing C# code – at least, when you think about rendering). And that’s it for now. In the next post, we’ll talk about the options we have for setting the properties of an object. Stay tuned for more on Silverlight.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1740066" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OwU9NRBtqmQrJPjrottI0HEZKUE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OwU9NRBtqmQrJPjrottI0HEZKUE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OwU9NRBtqmQrJPjrottI0HEZKUE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OwU9NRBtqmQrJPjrottI0HEZKUE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/v-X7fUF_mGM" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Silverlight/default.aspx">Silverlight</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/16/introducing-xaml.aspx</feedburner:origLink></item><item><title>New Security model for .NET 4.0</title><link>http://feedproxy.google.com/~r/Laneten/~3/XdD1dWho0OE/new-security-model-for-net-4-0.aspx</link><pubDate>Mon, 16 Nov 2009 11:41:24 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1739979</guid><dc:creator>luisabreu</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1739979</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/16/new-security-model-for-net-4-0.aspx#comments</comments><description>&lt;p&gt;It seems like CLR 4.0 will introduce a new security model (which looks a lot like the one we’ve got in Silverlight). &lt;a href="http://blogs.msdn.com/shawnfa/default.aspx"&gt;Shawn Farkas&lt;/a&gt; has an excellent &lt;a href="http://blogs.msdn.com/shawnfa/archive/2009/11/12/differences-between-the-security-rule-sets.aspx"&gt;post&lt;/a&gt; which compares the two rule sets and explains what happens in several scenarios. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1739979" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/s0XasbUx_tA3JogIk-zZ4bjPjZk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/s0XasbUx_tA3JogIk-zZ4bjPjZk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/s0XasbUx_tA3JogIk-zZ4bjPjZk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/s0XasbUx_tA3JogIk-zZ4bjPjZk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/XdD1dWho0OE" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/CLR/default.aspx">CLR</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/16/new-security-model-for-net-4-0.aspx</feedburner:origLink></item><item><title>Getting started with Silverlight</title><link>http://feedproxy.google.com/~r/Laneten/~3/zRFGQK7WMd0/getting-started-with-silverlight.aspx</link><pubDate>Mon, 16 Nov 2009 11:08:05 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1739978</guid><dc:creator>luisabreu</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1739978</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/16/getting-started-with-silverlight.aspx#comments</comments><description>&lt;p&gt;Last Friday, I’ve decided to start looking at &lt;a href="http://www.silverlight.net/"&gt;Silverlight&lt;/a&gt;. This time, I’ve opted for starting with a &lt;a href="http://www.amazon.com/Essential-Silverlight-3-Ashraf-Michail/dp/0321554167/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1258368575&amp;amp;sr=8-1"&gt;book&lt;/a&gt; (generally, I prefer to go through the source code and run some tests along the way;). As usual, I’ll be writing a couple of posts to describe my experiences with this platform. Even though I don’t have much to say yet, I thought I’d better start writing about my experiences so that I don’t forget to mention anything along the way.&lt;/p&gt;  &lt;p&gt;The first thing I noticed after writing&amp;#160; the “Hello, world!” app was that the contents of my Silverlight app are packaged into a xap file.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/luisabreu.metablogapi/0020.xapdeploy_5F00_48496E0F.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="xapdeploy" border="0" alt="xapdeploy" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/luisabreu.metablogapi/1777.xapdeploy_5F00_thumb_5F00_19178278.jpg" width="208" height="51" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;A xap package is just a zipped file with the contents of your Silverlight application. If you open the file with an app like &lt;a href="http://www.rarlab.com/"&gt;winrar&lt;/a&gt;, this is what you’ll see:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/luisabreu.metablogapi/6153.xapcontent_5F00_1EF22611.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="xapcontent" border="0" alt="xapcontent" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/luisabreu.metablogapi/0513.xapcontent_5F00_thumb_5F00_2E458820.jpg" width="336" height="227" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;As you can see, the xap file contains all the resources of your app +&amp;#160; a manifest file (besides assemblies, you’ll typically end up with other resources like xaml files, images, etc.). Besides simplifying deployment, xap files end up improving the performance of an app. To understand why, just think that with xap, you end up compressing stuff and you’ll get all the stuff your Silverlight app needs in one request. And i guess this is all for this intro post. Stay tuned for more on Silverlight.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1739978" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_ATYIoSLpMceJBU534PCnyKKjqA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_ATYIoSLpMceJBU534PCnyKKjqA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_ATYIoSLpMceJBU534PCnyKKjqA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_ATYIoSLpMceJBU534PCnyKKjqA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/zRFGQK7WMd0" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Silverlight/default.aspx">Silverlight</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/16/getting-started-with-silverlight.aspx</feedburner:origLink></item><item><title>No more hacks for the MS AJAX’s binding problem</title><link>http://feedproxy.google.com/~r/Laneten/~3/10-jd_SGGr8/no-more-hacks-for-the-ms-ajax-s-binding-problem.aspx</link><pubDate>Fri, 13 Nov 2009 09:26:35 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1739457</guid><dc:creator>luisabreu</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1739457</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/13/no-more-hacks-for-the-ms-ajax-s-binding-problem.aspx#comments</comments><description>&lt;p&gt;At least, when the RTM version is released!&lt;/p&gt;  &lt;p&gt;Ok, I guess you need some context: in the previous &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/11/ms-ajax-bindings-and-serialization.aspx"&gt;post&lt;/a&gt;, I talked about a problem which was mentioned to me by Andy in the comments of an existing post. The problem was that the __msajaxBindings field ended up being added to an object used in a live binding and that really means trouble when you try to serialize it (because you end up with a cyclic reference which generates a runtime exception).&lt;/p&gt;  &lt;p&gt;In the previous &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/11/ms-ajax-bindings-and-serialization.aspx"&gt;post&lt;/a&gt;, I suggested a hack for it. Fortunately, &lt;a href="http://weblogs.asp.net/infinitiesloop/"&gt;Dave&lt;/a&gt; saw it and emailed me assuring that the hack won’t be necessary and that the internal __msajax… fields should only be added to HTML elements. As you’re probably expecting by now, the problem I mentioned in the previous post is the result of a bug (which will be solved before the RTM is out). &lt;/p&gt;  &lt;p&gt;After being alerted by &lt;a href="http://weblogs.asp.net/infinitiesloop/"&gt;Dave&lt;/a&gt;, I’ve decided to take a closer look at the code…And yes, there’s a problem and it’s on the Sys.UI.DomElement.isDomElement method. This method ends up invoking the _isDomElement method which has a check that returns a “false positive”:&lt;/p&gt;  &lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a79a86;"&gt;Sys._isDomElement = &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;function &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;Sys$_isDomElement(obj) {
   &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;val = &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;false&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;;
   &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;if &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#a89a86;"&gt;typeof &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(obj.nodeType) !== &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;#39;number&amp;#39;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;) {
     &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;doc = obj.ownerDocument || obj.document || obj;
     &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;if &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(doc != obj) {
       &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;w = doc.defaultView || doc.parentWindow;
       val = (w != obj);
     }
     &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;else &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;{
       &lt;strong&gt;val = (&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:#a89a86;"&gt;typeof &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(doc.body) === &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;#39;undefined&amp;#39;&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:#a79a86;"&gt;&lt;strong&gt;);&lt;/strong&gt;
     }
  }
  &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;return &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;!val;
}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Can you spot the problem? Yep, the val = (typeof(doc.body)… line is responsible for considering the object a DOM element (&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/11/ms-ajax-bindings-and-serialization.aspx"&gt;remember&lt;/a&gt;: section had a property called body and if you look at the code, you’ll see that it ends up messing everything). While the good guys at MS don’t publish a new release which solves this bug, you really shouldn’t use any property named &lt;strong&gt;body&lt;/strong&gt; in an object which is used in a binding relationship (at least, if you intend to serialize that object). Ok, to be fair, you can always use the previous awful &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/11/ms-ajax-bindings-and-serialization.aspx"&gt;hack&lt;/a&gt;, but If I were you, I’d renamed the property :)&lt;/p&gt;

&lt;p&gt;And that’s it for now. Stay tuned for more.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1739457" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4R15gpRO7pEW88Rf91E5uxIt4lg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4R15gpRO7pEW88Rf91E5uxIt4lg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4R15gpRO7pEW88Rf91E5uxIt4lg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4R15gpRO7pEW88Rf91E5uxIt4lg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/10-jd_SGGr8" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/MS+AJAX/default.aspx">MS AJAX</category><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Javascript/default.aspx">Javascript</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/13/no-more-hacks-for-the-ms-ajax-s-binding-problem.aspx</feedburner:origLink></item><item><title>MS AJAX: bindings and serialization</title><link>http://feedproxy.google.com/~r/Laneten/~3/KmSvxi7NofU/ms-ajax-bindings-and-serialization.aspx</link><pubDate>Wed, 11 Nov 2009 19:30:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1739055</guid><dc:creator>luisabreu</dc:creator><slash:comments>6</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1739055</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/11/ms-ajax-bindings-and-serialization.aspx#comments</comments><description>&lt;p&gt;In my “goodbye MS AJAX post”, reader Andy asked a really interesting &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/09/the-adonetdatacontext-object-what-about-saving.aspx#1738872"&gt;question&lt;/a&gt;: how to serialize an object which is used in a binding relationship? The main problem is that the JavaScriptSerializer doesn’t support circular references. Unfortunately, it doesn’t also provide a way for you to specify which properties should be serialized. However, the problem is still there: how do you serialize the objects used in binding relationships?&lt;/p&gt;  &lt;p&gt;I’m still hopping that the team will fix the serializer before MS AJAX RTMs is released, but meanwhile, we’re still left with the problem. I’ve thought a little bit about it and it seems like the best option is to “suspend” the binding, serialize it, and then “resume” it again. Notice that the code you’re about to see has not been tested (it was written during my bus trip home, so it might have one or two bugs :) ). Let’s take a look at the example (I’ve reused most of Andy’s example and I’d like you to concentrate on the save method):&lt;/p&gt;  &lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;html &lt;/span&gt;&lt;span style="color:green;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;head &lt;/span&gt;&lt;span style="color:green;"&gt;runat&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;title&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;title&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;script &lt;/span&gt;&lt;span style="color:green;"&gt;src&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Scripts/MicrosoftAjax/start.debug.js&amp;quot; 
        &lt;/span&gt;&lt;span style="color:green;"&gt;type&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;script&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;script &lt;/span&gt;&lt;span style="color:green;"&gt;type&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
        &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;instance = [
            { title: &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;#39;New document&amp;#39;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;,
                content: {
                    sections: [
                        { body: &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;#39;Enter text here&amp;#39; &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;},
                        { body: &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;#39;other text&amp;#39; &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;}
                    ]
                }
            }
        ];
        Sys.require([Sys.components.dataView],
            &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;function &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;() {
                &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;view = Sys.create.dataView(
                        &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;#maincontent&amp;quot;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;,
                        { itemTemplate: &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;#39;#edit&amp;#39;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;, 
                          data: instance});
        }); &lt;br /&gt;        &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;function &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;onSave(){            
            &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;data = Sys.get(&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;$maincontent&amp;quot;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;).get_data();
            &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;backup = {};
            &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;function &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;cleanupMetadata(obj, propName, key) {
                &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;if &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(obj.hasOwnProperty(propName)) {
                    backup[key] = {};
                    backup[key][propName] = obj[propName];
                    &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;delete &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;obj[propName];
                }
            }
            &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;function &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;restoreMetadata(obj, propName, key) {
                &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;if &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(backup[key] !== undefined) {
                    obj[propName] = backup[key][propName];
                    &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;delete &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;backup[key];
                }
            }
            &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;for &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;i = &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;0&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;; i &amp;lt; data.length; i++) {
                &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;sections = data[i].content.sections;
                &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;for &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;j = &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;0&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;; j &amp;lt; sections.length; j++) {
                    cleanupMetadata(sections[j], &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;_msajaxBindings&amp;quot;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;, &lt;br /&gt;                                        i+&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;+j);
                }
            }
            &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;serialized = &lt;br /&gt;                   Sys.Serialization.JavaScriptSerializer.serialize(data);
            &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;for &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;i = &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;0&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;; i &amp;lt; data.length; i++) {
                &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;sections = data[i].content.sections;
                &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;for &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;j = &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;0&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;; j &amp;lt; sections.length; j++) {
                    restoreMetadata(&lt;br /&gt;                             sections[i], &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;_msajaxBindings&amp;quot;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;, i + &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;-&amp;quot; &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;+ j);
                }
            }
            alert(serialized);            
        }&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;
    &lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;script&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;head&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;body &lt;/span&gt;&lt;span style="color:green;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;BLOCKED SCRIPTSys&amp;quot;
      &lt;/span&gt;&lt;span style="color:green;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;dataview&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;BLOCKED SCRIPTSys.UI.DataView&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
   &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;div &lt;/span&gt;&lt;span style="color:green;"&gt;id&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;edit&amp;quot; &lt;/span&gt;&lt;span style="color:green;"&gt;class&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;sys-template&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;label&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;Title&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;label&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;input &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;value&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;{binding title}&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;div &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;attach&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;dataview&amp;quot; 
         &lt;/span&gt;&lt;span style="color:green;"&gt;dataview&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;data&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;{{ content.sections }}&amp;quot;
         &lt;/span&gt;&lt;span style="color:green;"&gt;class&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;sys-template&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;label&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;Body&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;label&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;textarea&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;{binding body}&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;textarea&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt; 
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;div&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;    
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;div&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;div &lt;/span&gt;&lt;span style="color:green;"&gt;id&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;maincontent&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;div&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;button &lt;/span&gt;&lt;span style="color:green;"&gt;onclick&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;onSave()&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;Save&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;button&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;body&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;html&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;We’re using two helper methods: cleanupMetadata and restoreMetadata. In the cleanupMetadata, we store the _msajaxBinding info in the backup object. As you can see, we’re building a key by combining the positions of the objects so that we can recover that metadata later. Yes, this isn’t really reusable code and I’d really prefer to have the serializer filter the properties which shouldn’t be serialized. However, this approach will probably be enough for now if you need to serialize an object used in a binding relationship.&lt;/p&gt;

&lt;p&gt;And that’s it for now…&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1739055" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/a0oB5ICfUxDg70Ixpd1-jUPT2_s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/a0oB5ICfUxDg70Ixpd1-jUPT2_s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/a0oB5ICfUxDg70Ixpd1-jUPT2_s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/a0oB5ICfUxDg70Ixpd1-jUPT2_s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/KmSvxi7NofU" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/MS+AJAX/default.aspx">MS AJAX</category><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Javascript/default.aspx">Javascript</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/11/ms-ajax-bindings-and-serialization.aspx</feedburner:origLink></item><item><title>The AdoNetDataContext object: what about saving?</title><link>http://feedproxy.google.com/~r/Laneten/~3/b0GlwE2N6MY/the-adonetdatacontext-object-what-about-saving.aspx</link><pubDate>Mon, 09 Nov 2009 14:34:24 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1738594</guid><dc:creator>luisabreu</dc:creator><slash:comments>12</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1738594</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/09/the-adonetdatacontext-object-what-about-saving.aspx#comments</comments><description>&lt;p&gt;Well, this really doesn’t deserve any special attention. Ok, let me put it another way: there’s a lot of work going on behind the scenes, but you shouldn’t have to worry with any of it. &lt;/p&gt;  &lt;p&gt;I’ve thought about writing a post on the objects that end up being used by the AdoNetDataContext to propagate changes back to the server, but after some thought, I’ve give up on that idea because I’m not seeing anyone use any of these classes directly (yes, the AdoNetDataContext should do it all for you).&lt;/p&gt;  &lt;p&gt;And that’s why I’m wrapping up this series on MS AJAX preview 6. I hope you’ve enjoyed it as much as did…Now, I do need to find another topic to keep me busy looking at new stuff…any ideas?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1738594" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7D8zvxyLslUCzHY2WonCXeujvN4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7D8zvxyLslUCzHY2WonCXeujvN4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7D8zvxyLslUCzHY2WonCXeujvN4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7D8zvxyLslUCzHY2WonCXeujvN4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/b0GlwE2N6MY" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/MS+AJAX/default.aspx">MS AJAX</category><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Javascript/default.aspx">Javascript</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/09/the-adonetdatacontext-object-what-about-saving.aspx</feedburner:origLink></item><item><title>Getting your ADO.NET Data Services uris right: the easy way</title><link>http://feedproxy.google.com/~r/Laneten/~3/F7xDqnfKuGM/getting-your-ado-net-data-services-uris-right-the-easy-way.aspx</link><pubDate>Mon, 09 Nov 2009 12:13:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1738578</guid><dc:creator>luisabreu</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1738578</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/09/getting-your-ado-net-data-services-uris-right-the-easy-way.aspx#comments</comments><description>&lt;p&gt;Here we are again, for more on the MS AJAX library. In the previous &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/09/getting-started-with-the-adonetdatacontext.aspx"&gt;post&lt;/a&gt;, we’ve seen that we can interact with ADO.NET Data Services by using the AdoNetDataContext instances. Today, we’ll be looking at more advanced features of the ADO.NET Data Services which are also available in the MS AJAX library.&lt;/p&gt;  &lt;p&gt;Before going on, I must confess that I’m not really an ADO.NET Data Service user (I guess this has made me curious enough for taking a peek in the future). However, since the MS AJAX library offers such great support for it, I couldn’t resist doing some digging and seeing which options are available for interacting with an existing data service.&lt;/p&gt;  &lt;p&gt;According to the &lt;a href="http://msdn.microsoft.com/en-gb/library/cc956153.aspx"&gt;docs&lt;/a&gt;, ADO.NET Data Services can “be surfaced as a REST-style resource collection that is addressable with URIs and that agents can interact with using standard HTTP verbs such as GET, POST, PUT or DELETE”. In practice, and if we go back to our previous &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/09/getting-started-with-the-adonetdatacontext.aspx"&gt;example&lt;/a&gt;, we can get all the images by using the uri &lt;a href="http://:&amp;hellip;/Services/ImageDataService.svc/Images"&gt;http://:…/Services/ImageDataService.svc/Images&lt;/a&gt;. Besides this simple option, which returns all the images contained in the object, there are still other interesting options. For instance:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;we can navigate through related properties; &lt;/li&gt;    &lt;li&gt;we can expand associated properties; &lt;/li&gt;    &lt;li&gt;we can filter the returned results; &lt;/li&gt;    &lt;li&gt;we can paginate the returned data. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;All these operations are specified through uris. We can easily do them by building the uris by hand. For instance, we can modify the previous &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/09/getting-started-with-the-adonetdatacontext.aspx"&gt;example&lt;/a&gt; so that it also displays the associated :&lt;/p&gt;  &lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;body &lt;/span&gt;&lt;span style="color:green;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;BLOCKED SCRIPTSys&amp;quot;
      &lt;/span&gt;&lt;span style="color:green;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;dv&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;BLOCKED SCRIPTSys.UI.DataView&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;div 
      &lt;/span&gt;&lt;span style="color:green;"&gt;id&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;myView&amp;quot;
      &lt;/span&gt;&lt;span style="color:green;"&gt;class&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;sys-template&amp;quot;
      &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;attach&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;dv&amp;quot;      
      &lt;/span&gt;&lt;span style="color:green;"&gt;dv&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;autofetch&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;true&amp;quot;
      &lt;/span&gt;&lt;span style="color:green;"&gt;dv&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;dataprovider&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;{{ _ctx }}&amp;quot;
      &lt;/span&gt;&lt;span style="color:green;"&gt;dv&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;fetchoperation&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Images&amp;quot;
      &lt;/span&gt;&lt;span style="color:green;"&gt;dv&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;fetchparameters&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;{{ {$expand: &amp;#39;Tags&amp;#39;} }}&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;h2&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;{{Name}}&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;h2&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;img &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;src&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;{{Uri}}&amp;quot; &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;alt&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;{{Name}}&amp;quot; &lt;/span&gt;&lt;span style="color:#c3c567;"&gt;/&amp;gt;      
        &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;div &lt;/span&gt;&lt;span style="color:green;"&gt;class&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;sys-template&amp;quot;
            &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;attach&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;dv&amp;quot;
            &lt;/span&gt;&lt;span style="color:green;"&gt;dv&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;data&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;{{ Tags }}&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;span&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;{{Name}}&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;span&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;,
        &lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;div&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;div&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;body&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;By using the $expand parameter, we’ll end up getting each image’s associated tags and we can display them by using a nested DataView control. The next image shows what happens when we load the previous page:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/luisabreu.metablogapi/3580.expand_5F00_3901BAC9.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="expand" border="0" alt="expand" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/luisabreu.metablogapi/2084.expand_5F00_thumb_5F00_25082833.jpg" width="225" height="255" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;We could specify all the “special” parameters this way. However, there is another way: we can rely on the Sys.Data.AdoNetQueryBuilder class for doing building the uri for us.&lt;/p&gt;

&lt;p&gt;The AdoNetQueryBuilder’s constructor expects the base uri and exposes several properties which we can use to build the uri which performs a specific operation against the existing ADO.NET Data Service. You’ll probably end up using the ones which are present in the following list:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;skip and top: we can combine them for paginating data; &lt;/li&gt;

  &lt;li&gt;orderby: used for indicating the sorting order; &lt;/li&gt;

  &lt;li&gt;filter: responsible for filtering the returned data; &lt;/li&gt;

  &lt;li&gt;expand: used for specifying the properties which will be “expanded” and included in the response. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;I must confess that I really didn’t find the use of this object intuitive at first. However, after running some experiences, everything started making sense. In order to show you how you might end up using this object, suppose we want to get all the images and associated tags and that we want to order them by name. Here’s a possible solution:&lt;/p&gt;

&lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;head &lt;/span&gt;&lt;span style="color:green;"&gt;runat&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;   
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;style &lt;/span&gt;&lt;span style="color:green;"&gt;type&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
      &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;.sys-template{
        display: none;
      }      
      img{
        width:320px;
        height:212px;
      }
    &lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;style&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;script &lt;/span&gt;&lt;span style="color:green;"&gt;type&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;text/javascript&amp;quot; 
      &lt;/span&gt;&lt;span style="color:green;"&gt;src&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;../Scripts/MicrosoftAjax/start.debug.js&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;script&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;script &lt;/span&gt;&lt;span style="color:green;"&gt;type&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
      &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;_ctx = &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;null&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;;
      Sys.require([Sys.components.adoNetDataContext,
                   Sys.components.dataView],
      &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;function &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;() {
        &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;uriBuilder = &lt;br /&gt;              &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;new &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;Sys.Data.AdoNetQueryBuilder(&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Images&amp;quot;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;);
        uriBuilder.set_expand(&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Tags&amp;quot;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;);&lt;/span&gt;&lt;span style="color:#006400;"&gt;//$expand
        &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;uriBuilder.set_orderby(&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;);&lt;/span&gt;&lt;span style="color:#006400;"&gt;//$orderby
        &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;_ctx = Sys.create.adoNetDataContext({
          serviceUri: &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;../Services/ImagesDataService.svc&amp;quot;
        &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;});
        Sys.create.dataView(
             Sys.get(&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;#myView&amp;quot;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;),
             { dataProvider: _ctx,
               autoFetch: &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;true&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;,
               fetchOperation: uriBuilder.toString()
             });

      });
    &lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;script&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;head&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;body &lt;/span&gt;&lt;span style="color:green;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;BLOCKED SCRIPTSys&amp;quot;
      &lt;/span&gt;&lt;span style="color:green;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;dv&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;BLOCKED SCRIPTSys.UI.DataView&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;div 
      &lt;/span&gt;&lt;span style="color:green;"&gt;id&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;myView&amp;quot;
      &lt;/span&gt;&lt;span style="color:green;"&gt;class&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;sys-template&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;h2&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;{{Name}}&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;h2&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;img &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;src&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;{{Uri}}&amp;quot; &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;alt&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;{{Name}}&amp;quot; &lt;/span&gt;&lt;span style="color:#c3c567;"&gt;/&amp;gt;      
        &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;div &lt;/span&gt;&lt;span style="color:green;"&gt;class&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;sys-template&amp;quot;
            &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;attach&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;dv&amp;quot;
            &lt;/span&gt;&lt;span style="color:green;"&gt;dv&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;data&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;{{ Tags }}&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;span&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;{{Name}}&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;span&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;,
        &lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;div&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;div&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;body&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;This time, I’ve opted for using an imperative approach. Things are really similar to what we had before; however, notice that now we’re using an AdoNetQueryBuilder object to set the fetchOperation property of the DataView object. &lt;/p&gt;

&lt;p&gt;We start by instantiating the AdoNetQueryBuilder object. If you recall it, I said that this wasn’t really intuitive…it was only looking at the source code that I’ve understood that I was supposed to pass the name of the resource I wanted to access (instead of passing the base uri for the service – not sure on why the constructor’s only parameter is called uri, when resource would have make things so much easier!). Since I was interested in retrieving images, I only had to pass the string “Images” to the constructor.&lt;/p&gt;

&lt;p&gt;After having an instance and setting the required properties (recall from above that we wanted to get images+tags and to order everything by name), we can simply call the toString method to get the string which represents the operation we need to perform. And that’s it. We’ll still be speaking about MS AJAX in future posts, so stay tuned for more!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1738578" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Arz-zv4V_wHUkkBKDFwmvi1w-OA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Arz-zv4V_wHUkkBKDFwmvi1w-OA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Arz-zv4V_wHUkkBKDFwmvi1w-OA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Arz-zv4V_wHUkkBKDFwmvi1w-OA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/F7xDqnfKuGM" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/MS+AJAX/default.aspx">MS AJAX</category><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Javascript/default.aspx">Javascript</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/09/getting-your-ado-net-data-services-uris-right-the-easy-way.aspx</feedburner:origLink></item><item><title>Getting started with the AdoNetDataContext</title><link>http://feedproxy.google.com/~r/Laneten/~3/OV2pnq2TJlk/getting-started-with-the-adonetdatacontext.aspx</link><pubDate>Mon, 09 Nov 2009 10:54:35 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1738566</guid><dc:creator>luisabreu</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://msmvps.com/blogs/luisabreu/rsscomments.aspx?PostID=1738566</wfw:commentRss><comments>http://msmvps.com/blogs/luisabreu/archive/2009/11/09/getting-started-with-the-adonetdatacontext.aspx#comments</comments><description>&lt;p&gt;Today we’re going to start looking at the AdoNetDataContext. This class expands the DataContext object and uses several specific methods for ensuring the correct interaction with an existing ADO.NET Data Service. &lt;/p&gt;  &lt;p&gt;These internal methods added by the AdoNetDataContext are essentially used in identity related operations. In other words, it extends the base DataContext class by introducing several methods which turn on identity support (btw, I’m talking about the stuff we’ve seen in &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/08/the-datacontext-component-creating-entities.aspx"&gt;several&lt;/a&gt; &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/05/the-datacontext-component-linking-objects.aspx"&gt;of&lt;/a&gt; &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/04/the-datacontext-component-improving-the-identity-algorithm.aspx"&gt;the&lt;/a&gt; &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/03/the-datacontext-component-getting-started-with-identities.aspx"&gt;previous&lt;/a&gt; &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2009/11/02/the-datacontext-component-committing-changes-take-ii.aspx"&gt;posts&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;In this post, I’ll be reusing the sample ADO.NET Data Service which is included in &lt;a href="http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488"&gt;MS AJAX preview 6&lt;/a&gt;. Here’s the model used internally by the ImageDataService.svc ADO.NET service:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/luisabreu.metablogapi/1016.adonetmodel_5F00_6F4C8629.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="adonetmodel" border="0" alt="adonetmodel" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/luisabreu.metablogapi/4643.adonetmodel_5F00_thumb_5F00_549FEA10.jpg" width="371" height="154" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In this case, and since this is just an intro post, we’ll build a simple page which shows all the images returned by this ADO.NET service:&lt;/p&gt;  &lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;head &lt;/span&gt;&lt;span style="color:green;"&gt;runat&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;   
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;style &lt;/span&gt;&lt;span style="color:green;"&gt;type&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
      &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;.sys-template{
        display: none;
      }      
      img{
        width:320px;
        height:212px;
      }
    &lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;style&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;script &lt;/span&gt;&lt;span style="color:green;"&gt;type&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;text/javascript&amp;quot; 
      &lt;/span&gt;&lt;span style="color:green;"&gt;src&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;../Scripts/MicrosoftAjax/start.debug.js&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;script&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;script &lt;/span&gt;&lt;span style="color:green;"&gt;type&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
      &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;var &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;_ctx = &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;null&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;;
      Sys.require([Sys.components.adoNetDataContext, 
                   Sys.components.dataView],
      &lt;/span&gt;&lt;span style="color:#a89a86;"&gt;function &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;() {
        _ctx = Sys.create.adoNetDataContext({
            serviceUri: &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;../Services/ImagesDataService.svc&amp;quot;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;,
            mergeOption: Sys.Data.MergeOption.appendOnly
        });        
    });
    &lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;script&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;head&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;body &lt;/span&gt;&lt;span style="color:green;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;BLOCKED SCRIPTSys&amp;quot;
      &lt;/span&gt;&lt;span style="color:green;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;dv&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;BLOCKED SCRIPTSys.UI.DataView&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;div 
      &lt;/span&gt;&lt;span style="color:green;"&gt;id&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;myView&amp;quot;
      &lt;/span&gt;&lt;span style="color:green;"&gt;class&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;sys-template&amp;quot;
      &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;attach&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;dv&amp;quot;      
      &lt;/span&gt;&lt;span style="color:green;"&gt;dv&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;autofetch&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;true&amp;quot;
      &lt;/span&gt;&lt;span style="color:green;"&gt;dv&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;dataprovider&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;{{ _ctx }}&amp;quot;
      &lt;/span&gt;&lt;span style="color:green;"&gt;dv&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;fetchoperation&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Images&amp;quot;&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;h2&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;{{Name}}&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;h2&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;img &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;src&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;{{Uri}}&amp;quot; &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:green;"&gt;alt&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;{{Name}}&amp;quot; &lt;/span&gt;&lt;span style="color:#c3c567;"&gt;/&amp;gt;      
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;div&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;body&lt;/span&gt;&lt;span style="color:#c3c567;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;By now, you shouldn’t really be surprised by anything that is shown in the previous snippet. As you can see, the AdoNetDataContext class protects us from all those nasty details associated with the communication with the ImageDataService.svc server side service. I’m not going to show you how to add, edit or remove items because the samples released with &lt;a href="http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488"&gt;preview 6&lt;/a&gt; already have code which shows how to do those things.&lt;/p&gt;

&lt;p&gt;On the next post, we’ll see how to do more interesting operations by using the AdoNetQueryBuilder object. Stay tuned for more on MS AJAX.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1738566" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZPJ9Gy_mK2QTirEy0sAknkHZZPI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZPJ9Gy_mK2QTirEy0sAknkHZZPI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZPJ9Gy_mK2QTirEy0sAknkHZZPI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZPJ9Gy_mK2QTirEy0sAknkHZZPI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Laneten/~4/OV2pnq2TJlk" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/MS+AJAX/default.aspx">MS AJAX</category><category domain="http://msmvps.com/blogs/luisabreu/archive/tags/Javascript/default.aspx">Javascript</category><feedburner:origLink>http://msmvps.com/blogs/luisabreu/archive/2009/11/09/getting-started-with-the-adonetdatacontext.aspx</feedburner:origLink></item></channel></rss>
