<?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.timheuer.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:image="http://purl.org/rss/1.0/modules/image/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
    <channel>
        <title>Method ~ of ~ failed by Tim Heuer</title>
        <link>http://timheuer.com/blog/Default.aspx</link>
        <description>ramblings from the digital underbelly</description>
        <language>en-US</language>
        <copyright>Tim Heuer</copyright>
        <generator>Subtext Version 2.1.2.2</generator>
        <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
        <image>
            <title>Method ~ of ~ failed by Tim Heuer</title>
            <url>http://timheuer.com/blog/images/RSS2Image.gif</url>
            <link>http://timheuer.com/blog/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.timheuer.com/timheuer-silverlight" /><feedburner:info uri="timheuer-silverlight" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
            <title>SNEAK PEEK: New Silverlight application themes</title>
            <link>http://feeds.timheuer.com/~r/timheuer-silverlight/~3/6mUYw7aH8dw/silverlight-application-theme-preview-sneak-peek-template.aspx</link>
            <description>&lt;p&gt;&lt;em&gt;‘Twas the week before MIX, when all through the tubes     &lt;br /&gt;
Not a developer was sleeping, not even the noobs.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The laptops were paved removed of their glitz     &lt;br /&gt;
In hopes that they soon will get some new bits.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;A developer was coding, building an app     &lt;br /&gt;
Trying to build the next greatest XAP&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Battleship gray?! Now that’s obscene     &lt;br /&gt;
Check our designers’ latest theme&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Okay, so I’m not going to win any poetry awards.  Our UX design team for &lt;a href="http://silverlight.net"&gt;Silverlight&lt;/a&gt; has been thinking about app building a lot this past year, gathering valuable input from developers, designers and end-users about how people interact with applications, primarily &lt;em&gt;line-of-business&lt;/em&gt; applications (&amp;lt;shudder&amp;gt;I hate that term&amp;lt;/shudder&amp;gt;).  Hot off the press here is a preview of some of the things we’ve been thinking about from a XAML theme perspective.&lt;/p&gt;
&lt;p&gt;First, I present to you codename &lt;em&gt;Grayscale&lt;/em&gt;.  Some subtle twists on existing base themes but not detracting too much from the ‘traditional’.  (&lt;a href="http://www.flickr.com/photos/timheuer/4426095286/sizes/o/"&gt;larger view here&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;img src="http://storage.timheuer.com/grayscale-sampleapp.jpg" alt="Grayscale Silverlight Theme" title="Grayscale Silverlight Theme" style="margin: 0px auto; display: block; float: none;" /&gt;&lt;/p&gt;
&lt;p&gt;Up next is codename &lt;em&gt;Windows Theme&lt;/em&gt; (yeah, original I know, gimme a break here I’m making these up).  Taking a cue from Windows 7 system design, this theme brings familiarity to the end-user. (&lt;a href="http://www.flickr.com/photos/timheuer/4425329927/sizes/o/"&gt;larger view here&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;img src="http://storage.timheuer.com/wintheme-sample-app.jpg" alt="Windows Silverlight Theme" title="Windows Silverlight Theme" style="margin: 0px auto; display: block; float: none;" /&gt;&lt;/p&gt;
&lt;p&gt;And finally, &lt;em&gt;Metro&lt;/em&gt;.  Taking a cue perhaps from Zune desktop (and device) software design, a clean but fun theme for any application (&lt;a href="http://www.flickr.com/photos/timheuer/4426095220/sizes/o/"&gt;larger view here&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;img src="http://storage.timheuer.com/white-sample-app.jpg" alt="Metro Silverlight Theme" title="Metro Silverlight Theme" style="margin: 0px auto; display: block; float: none;" /&gt;    &lt;br /&gt;
So there you have some preview of some Silverlight application themes we’ve been playing around with.  I know the design team is enthusiastic about getting these in the hands of developers/designers.  &lt;/p&gt;
&lt;p&gt;What do you think?&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8c40ba01-0e13-4c99-a453-6cfc311671ef" style="padding: 0px; margin: 0px; display: inline; float: none;"&gt;&lt;span class="tags"&gt;tags: &lt;a rel="tag" href="http://timheuer.com/blog/tags/silverlight/default.aspx"&gt;silverlight&lt;/a&gt;, &lt;a rel="tag" href="http://timheuer.com/blog/tags/xaml/default.aspx"&gt;xaml&lt;/a&gt;, &lt;a rel="tag" href="http://timheuer.com/blog/tags/themes/default.aspx"&gt;themes&lt;/a&gt;, &lt;a rel="tag" href="http://timheuer.com/blog/tags/templating/default.aspx"&gt;templating&lt;/a&gt;, &lt;a rel="tag" href="http://timheuer.com/blog/tags/templates/default.aspx"&gt;templates&lt;/a&gt;, &lt;a rel="tag" href="http://timheuer.com/blog/tags/metro/default.aspx"&gt;metro&lt;/a&gt;, &lt;a rel="tag" href="http://timheuer.com/blog/tags/riaservices/default.aspx"&gt;riaservices&lt;/a&gt;, &lt;a rel="tag" href="http://timheuer.com/blog/tags/ria/default.aspx"&gt;ria&lt;/a&gt;, &lt;a rel="tag" href="http://timheuer.com/blog/tags/wpf/default.aspx"&gt;wpf&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="margin: 0px; padding: 0px;" class="wlWriterHeaderFooter"&gt;&lt;hr /&gt;
&lt;div class="cc-license"&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution By license.&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14712.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GuKLL0G5FfmZg0P2jJAR0sN2rrE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GuKLL0G5FfmZg0P2jJAR0sN2rrE/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/GuKLL0G5FfmZg0P2jJAR0sN2rrE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GuKLL0G5FfmZg0P2jJAR0sN2rrE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer-silverlight/~4/6mUYw7aH8dw" height="1" width="1"/&gt;</description>
            <dc:creator>Tim Heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2010/03/11/silverlight-application-theme-preview-sneak-peek-template.aspx</guid>
            <pubDate>Fri, 12 Mar 2010 00:22:28 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14712.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2010/03/11/silverlight-application-theme-preview-sneak-peek-template.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14712.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14712.aspx</trackback:ping>
        <feedburner:origLink>http://timheuer.com/blog/archive/2010/03/11/silverlight-application-theme-preview-sneak-peek-template.aspx</feedburner:origLink></item>
        <item>
            <title>Learning the M-V-VM pattern for XAML development</title>
            <link>http://feeds.timheuer.com/~r/timheuer-silverlight/~3/VQd6Y3T8OjE/advanced-mvvm-book-for-silverlight-wpf.aspx</link>
            <description>&lt;p&gt;Quick, what’s the most popular thing in XAML development?  Yeah, thought so…&lt;strong&gt;MVVM or Model-View-ViewModel&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;It’s one of the most popular subjects I hear about when people talk about developing applications with WPF and &lt;a href="http://silverlight.net"&gt;&lt;strong&gt;Silverlight&lt;/strong&gt;&lt;/a&gt;.  However, as much as it is talked about and as much as frameworks &lt;a href="http://simplemvvm.codeplex.com/"&gt;are&lt;/a&gt; &lt;a href="http://mvvmlight.codeplex.com"&gt;born&lt;/a&gt; &lt;a href="http://caliburn.codeplex.com/"&gt;every&lt;/a&gt; &lt;a href="http://mvvmfoundation.codeplex.com/"&gt;day&lt;/a&gt;, there isn’t a ton of just simplified ‘here’s how you do it’ information in one place.  I mean, sure there *is* information, but I have to admit I think it is a bit scattered all over.&lt;/p&gt;  &lt;p&gt;One of the pioneers of promoting this pattern for WPF development,&lt;strong&gt; &lt;a href="http://joshsmithonwpf.wordpress.com/"&gt;Josh Smith&lt;/a&gt;&lt;/strong&gt;, took some time to try to solve that.  Josh has recently released a self-published book titled &lt;em&gt;&lt;strong&gt;&lt;a href="http://advancedmvvm.com"&gt;Advanced MVVM&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt; and is a quick and good read about the pattern.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;FULL DISCLOSURE&lt;/strong&gt;: Josh presented me with a complimentary printed copy of this book a few weeks ago.  I had already intended on purchasing it when available on Amazon Kindle and have since done so.  In the nature of ensuring I share the love and complimentary goodies, Josh allowed me to give away my printed copy to someone, which I did at a Silverlight user group meeting just last night.  I’m grateful Josh provided me with a printed copy and also grateful he encouraged me to give it as a prize.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://advancedmvvm.com"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 20px; display: inline; border-top: 0px; border-right: 0px" title="Advanced MVVM" border="0" alt="Advanced MVVM Book Cover" align="right" src="http://joshsmithonwpf.files.wordpress.com/2010/02/advancedmvvmcover.jpg?w=246&amp;amp;h=320" width="184" height="240" /&gt;&lt;/a&gt;The book is about 50-ish printed pages and is a quick read.  It covers creating a simple and common game, Bubble Burst, using the MVVM pattern.  The code is all WPF, but the concepts still apply to Silverlight development and Josh points out some areas where there are differences.&lt;/p&gt;  &lt;p&gt;All of the code discussed in the book is available to download so that you can work with starting projects as you go throughout the book learning the pattern.  Josh covers all the key topics of the pattern you would expect: ViewModel, View, Commands, etc.  One of the things that Josh is good about is not being a zealot of the pattern.  He’s quick to point out that when code belongs with the View and when he thinks it doesn’t.&lt;/p&gt;  &lt;p&gt;When doing development I always think it is a great idea to have some solid references on your shelf.  No matter where you are in your skill set, there will always be those times when you want to refer back to something you may have forgotten or perhaps get a different perspective on a specific way of doing things.  For MVVM development, I think this is one such reference.&lt;/p&gt;  &lt;p&gt;On a side note, Josh got a lot of crap for his initial chosen method of distribution (Lulu digital, which uses a DRM PDF).  He quickly responded and offered a printable copy as well as put it on Amazon for Kindle distribution (which I bought and can read on my Kindle, my phone or my PC…note: phone and PC are in color too).  There are a multitude of ways you can get the title all of which are listed at the &lt;a href="http://advancedmvvm.com"&gt;AdvancedMVVM.com&lt;/a&gt; web site which also lists a table of contents for the book.  If you are doing Silverlight or WPF development you should pick it up, read it and keep it handy.  It’s not the only opinion, of course, but it is a great presentation of the pattern &lt;em&gt;relevant to the development platform&lt;/em&gt; that I’ve seen.&lt;/p&gt;  &lt;p&gt;Recommend.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:2f672043-6790-41e8-9ef7-83a8c405a840" class="wlWriterEditableSmartContent"&gt;&lt;span class="tags"&gt;tags: &lt;a href="http://timheuer.com/blog/tags/mvvm/default.aspx" rel="tag"&gt;mvvm&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/wpf/default.aspx" rel="tag"&gt;wpf&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/xaml/default.aspx" rel="tag"&gt;xaml&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/silverlight/default.aspx" rel="tag"&gt;silverlight&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/m-v-vm/default.aspx" rel="tag"&gt;m-v-vm&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/mvp/default.aspx" rel="tag"&gt;mvp&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;  &lt;br /&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;hr /&gt;&lt;div class="cc-license"&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution By license.&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14711.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VqiQJOmxZDhBO8WtAtNvaBlr0mw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VqiQJOmxZDhBO8WtAtNvaBlr0mw/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/VqiQJOmxZDhBO8WtAtNvaBlr0mw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VqiQJOmxZDhBO8WtAtNvaBlr0mw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer-silverlight/~4/VQd6Y3T8OjE" height="1" width="1"/&gt;</description>
            <dc:creator>Tim Heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2010/03/04/advanced-mvvm-book-for-silverlight-wpf.aspx</guid>
            <pubDate>Thu, 04 Mar 2010 21:17:04 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14711.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2010/03/04/advanced-mvvm-book-for-silverlight-wpf.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14711.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14711.aspx</trackback:ping>
        <feedburner:origLink>http://timheuer.com/blog/archive/2010/03/04/advanced-mvvm-book-for-silverlight-wpf.aspx</feedburner:origLink></item>
        <item>
            <title>Silverlight MVPs of the Year (2009)</title>
            <link>http://feeds.timheuer.com/~r/timheuer-silverlight/~3/kZugkNFbkVo/silverlight-mvp-of-the-year-2009.aspx</link>
            <description>&lt;p&gt;This week at Microsoft we are hosting roughly 1,300 of our top community experts around the world in various technical competencies.  For &lt;a href="http://silverlight.net"&gt;Silverlight&lt;/a&gt;, we have about 80% of our group in attendance from all over the world.&lt;/p&gt;  &lt;p&gt;&lt;img style="margin: 0px auto; display: block; float: none" title="" alt="Microsoft Most Valuable Professional logo" src="http://storage.timheuer.com/mvp-h-small.png" /&gt;&lt;/p&gt;  &lt;p&gt;At the beginning of the year the Silverlight team asked our MVP group to identify the individuals within their group have done a lot for Silverlight community and that they would consider worthy of being named an ‘MVP of the year’ award.&lt;/p&gt;  &lt;p&gt;First to be clear, ALL of our MVPs are top notch and all have contributed significantly to the Silverlight community both professionally and personally.  It is really exciting to see this level of commitment to community these folks have.  You should take a moment and check out these folks using the &lt;a href="http://twitter.com/John_Papa/silverlightmvp"&gt;Twitter list&lt;/a&gt; that &lt;a href="http://johnpapa.net"&gt;John Papa&lt;/a&gt; has put together.&lt;/p&gt;  &lt;p&gt;Out of this group of experts, they have peer selected the following individuals for 2009 as their ‘Silverlight MVPs of the Year’ – please join me in congratulating:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Laurent Bugnion&lt;/strong&gt; (&lt;a href="http://blog.galasoft.ch/"&gt;blog&lt;/a&gt;, &lt;a href="http://twitter.com/LBugnion"&gt;Twitter&lt;/a&gt;)&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Dave Campbell&lt;/strong&gt; (&lt;a href="http://geekswithblogs.net/WynApseTechnicalMusings/Default.aspx"&gt;blog&lt;/a&gt;, &lt;a href="http://twitter.com/wynapse"&gt;Twitter&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;These two were identified &lt;strong&gt;by their peers&lt;/strong&gt; and the Silverlight team as contributing significantly to the Silverlight community/ecosystem over this past year.  Laurent has one of the most definitive books on Silverlight (and is working on an updated edition) as well as releasing one of his projects, MVVM Light – a Model-View-ViewModel framework for Silverlight developers to help them get quickly started with MVVM pattern development.  Dave has saved us all the searching in the world and continues to scour, validate and surface some of the best Silverlight content around the world in his &lt;a href="http://geekswithblogs.net/WynApseTechnicalMusings/Default.aspx"&gt;Silverlight Cream&lt;/a&gt; blog – providing a daily post of aggregation of all the cool things happening in the Silverlight community.&lt;/p&gt;  &lt;p&gt;Take a moment to subscribe/read/whatever to our Silveright MVPs – they are the folks keeping us honest :-)&lt;/p&gt;  &lt;p&gt;Congratulations Laurent, Dave and all the MVPs for the efforts you have accomplished over this past year – looking forward to continued efforts this year!&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a2ab7812-0339-4892-a158-1d2e6f11638c" class="wlWriterEditableSmartContent"&gt;&lt;span class="tags"&gt;tags: &lt;a href="http://timheuer.com/blog/tags/silverlight/default.aspx" rel="tag"&gt;silverlight&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/ria/default.aspx" rel="tag"&gt;ria&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/riaservices/default.aspx" rel="tag"&gt;riaservices&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/xaml/default.aspx" rel="tag"&gt;xaml&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/wpf/default.aspx" rel="tag"&gt;wpf&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/mvp/default.aspx" rel="tag"&gt;mvp&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;  &lt;br /&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;hr /&gt;&lt;div class="cc-license"&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution By license.&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14709.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MC_vDIabnYkOAX8sGBZT7opJniw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MC_vDIabnYkOAX8sGBZT7opJniw/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/MC_vDIabnYkOAX8sGBZT7opJniw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MC_vDIabnYkOAX8sGBZT7opJniw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer-silverlight/~4/kZugkNFbkVo" height="1" width="1"/&gt;</description>
            <dc:creator>Tim Heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2010/02/18/silverlight-mvp-of-the-year-2009.aspx</guid>
            <pubDate>Thu, 18 Feb 2010 19:35:04 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14709.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2010/02/18/silverlight-mvp-of-the-year-2009.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14709.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14709.aspx</trackback:ping>
        <feedburner:origLink>http://timheuer.com/blog/archive/2010/02/18/silverlight-mvp-of-the-year-2009.aspx</feedburner:origLink></item>
        <item>
            <title>Using Silverlight Media Framework for simple playback</title>
            <link>http://feeds.timheuer.com/~r/timheuer-silverlight/~3/ZK6xkvZpAvs/extending-silverlight-media-framework.aspx</link>
            <description>&lt;p&gt;If you aren’t aware of the&lt;strong&gt; &lt;/strong&gt;&lt;a href="http://smf.codeplex.com"&gt;&lt;strong&gt;Silverlight Media Framework&lt;/strong&gt;&lt;/a&gt;, you should take a look.  This is a media playback framework for Silverlight that is based off of a lot of best practices from such implementations as the NBC Olympics, Sunday Night Football and others.  &lt;/p&gt;
&lt;p&gt;&lt;img style="margin: 0px auto; display: block; float: none;" title="" alt="Silverlight Media Framework screenshot" src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=smf&amp;amp;DownloadId=93357" /&gt;&lt;/p&gt;
&lt;p&gt;It has a lot of features built-in to the framework such as:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Logging &lt;/li&gt;
    &lt;li&gt;DVR-style features &lt;/li&gt;
    &lt;li&gt;Fast forward &lt;/li&gt;
    &lt;li&gt;Slow motion &lt;/li&gt;
    &lt;li&gt;Media Markers &lt;/li&gt;
    &lt;li&gt;etc &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Basic stuff plus some great included features and extensibility points.&lt;/p&gt;
&lt;h2&gt;Missing Features – Part 1&lt;/h2&gt;
&lt;p&gt;What I didn’t like in v1 was two things: it was only for Smooth Streaming and it was a framework versus just a XAP I could use in a web application.  After some successful complaining :-) and an opportunity to get into a milestone build, the progressive download feature was added which enabled non-Smooth Streaming people to use it.&lt;/p&gt;
&lt;p&gt;I’m wanting to standardize on what our teams are providing for best practices, so I’ve started using this player.  &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTE: Does &lt;a href="http://slvideoplayer.codeplex.com"&gt;SL Video Player&lt;/a&gt; still live?  Yes, and it has VERY basic features.  It is super small and simple, but may not be for everyone’s liking.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So I started to solve the other problem, primarily for my use, of having essentially a stand-alone player using this framework.  &lt;/p&gt;
&lt;h2&gt;Extending the Silverlight Media Framework&lt;/h2&gt;
&lt;p&gt;You see, the SMF itself is essentially a set of controls…but not an ‘app’ itself that you can just consume the binary.  What I did was basically create a new &lt;a href="http://silverlight.net"&gt;Silverlight&lt;/a&gt; application myself with one simple element: Player.  This way I could implement what I needed for my use.  The first thing I wanted was to have a simple XAP that I’d be able to load parameters in…very much like we did for SL Video Player on codeplex.  To make essentially the player have a flexible use model.  I could host the player anywhere and just feed it media to play.&lt;/p&gt;
&lt;p&gt;I used the &lt;a href="http://silverlight.net/learn/videos/all/using-startup-parameters-with-silverlight/"&gt;InitParams feature&lt;/a&gt; of the Silverlight plugin model to enable me to pass in parameters to the application.  I wanted a simple parameter ‘media’ that basically was a URI to my media.  For most of my needs this would be a progressive download situation.  I added the simple feature using InitParams, and passed that URI to the MediaElement of the player framework.  All was well.&lt;/p&gt;
&lt;h2&gt;Missing Features – Part 2&lt;/h2&gt;
&lt;p&gt;I then realized two features that I love about the Expression Encoder templates: AutoLoad and ThumbnailImage.  These two features are pretty much essential for a bandwidth saving playback experience.  AutoLoad basically disables the media from starting to be fetched until the user clicks play.  The ThumbnailImage enables a static screenshot view to be displayed until a media frame could be captured.  These two features work well together.&lt;/p&gt;
&lt;p&gt;The AutoLoad (cueing) was critical for me.  I didn’t want media to start downloading until the user said so.  This saves me bandwidth as well as doesn’t annoy the user if there is a ton of media on one page (which might not be a good UX to begin with, but I digress).&lt;/p&gt;
&lt;p&gt;I saw an event &lt;em&gt;PlayControlClicked&lt;/em&gt; in the framework that I felt I could tap into.  I figured I’d just wire up to that event and set the MediaElement.Source when the user clicked that.  FAIL.  The problem was that the play control in the current framework isn’t even enabled until the media source is set.  This defeated my whole purpose.&lt;/p&gt;
&lt;p&gt;After some spelunking in the source – did I mention that SMF is Open Source? – I found the culprit functions.  Disabling them made everything work but it just didn’t feel right.  Luckily one of the developers of the framework, &lt;a href="http://twitter.com/sundriedcoder"&gt;Kevin&lt;/a&gt; from &lt;a href="http://www.vertigo.com"&gt;Vertigo&lt;/a&gt;, and I start chatting (virtually of course, after all nobody ‘talks’ anymore for real right?).  I told him of my findings and hacks and he educated me that I didn’t even need to mess with the source, but could accomplish my needs by subclassing the Player.  Kevin sent me some sample code for what he called a DeferredSource, which is what I wanted.&lt;/p&gt;
&lt;p&gt;After some quick tests, I realized that I should keep all scenarios enabled:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Deferred loading (AutoLoad=false) &lt;/li&gt;
    &lt;li&gt;Normal progressive playback (AutoLoad=true) &lt;/li&gt;
    &lt;li&gt;Windows Streaming &lt;/li&gt;
    &lt;li&gt;IIS Smooth Streaming &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I modified Kevin’s source a bit and got everything working.  Now I have 3 parameters: &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;media – the URI of the stream, IIS Smooth Streaming manifest, or media file for progressive download &lt;/li&gt;
    &lt;li&gt;autoload – used really only for progressive download, would enable/disable cueing of the video upon load &lt;/li&gt;
    &lt;li&gt;ss – to specify if the URI indicated in ‘media’ is an IIS Smooth Streaming implementation &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With this done I can now do something as simple as:&lt;/p&gt;
&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
&lt;div id="codeSnippet" class="csharpcode"&gt;
&lt;pre class="alteven"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;object&lt;/span&gt; &lt;span class="attr"&gt;data&lt;/span&gt;&lt;span class="kwrd"&gt;="data:application/x-silverlight-2,"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="application/x-silverlight-2"&lt;/span&gt; &lt;span class="attr"&gt;width&lt;/span&gt;&lt;span class="kwrd"&gt;="320"&lt;/span&gt; &lt;span class="attr"&gt;height&lt;/span&gt;&lt;span class="kwrd"&gt;="240"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="source"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="/ClientBin/SmfSimplePlayer.xap"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="background"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="white"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="minRuntimeVersion"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="3.0.40818.0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="initParams"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="media=URL_TO_YOUR_VIDEO"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;&lt;span id="lnum6" class="lnum"&gt;   6:&lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="autoUpgrade"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;&lt;span id="lnum7" class="lnum"&gt;   7:&lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="http://go.microsoft.com/fwlink/?LinkID=149156&amp;amp;v=3.0.40818.0"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="text-decoration:none"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;&lt;span id="lnum8" class="lnum"&gt;   8:&lt;/span&gt;           &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;img&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;="http://go.microsoft.com/fwlink/?LinkId=161376"&lt;/span&gt; &lt;span class="attr"&gt;alt&lt;/span&gt;&lt;span class="kwrd"&gt;="Get Microsoft Silverlight"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="border-style:none"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;&lt;span id="lnum9" class="lnum"&gt;   9:&lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;&lt;span id="lnum10" class="lnum"&gt;  10:&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;object&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Boom, done.  Now I had a player based on SMF that served my needs.&lt;/p&gt;
&lt;h2&gt;Wishlist&lt;/h2&gt;
&lt;p&gt;I still didn’t implement the ThumbnailImage in my player.  This is a wishlist item for me…it isn’t critical but nice for when AutoLoad=false so it isn’t just a blank screen!  Additionally, the one thing I have to admit I’m not wild about is the overall size.  The compiled XAP is 230K.  In contrast my SL Video Player is 16K.  Why the big size?  Well, the SMF &lt;em&gt;today&lt;/em&gt; is intended for someone who really wants to implement all the features it provides, including Smooth Streaming.  If you aren’t using Smooth Streaming, then you still have those dependencies with you…not ideal.&lt;/p&gt;
&lt;p&gt;In talking with the dev team and framework team, I know their plans for updated milestones of SMF and am pleased with the roadmap.  They have taken a lot of feedback of how mainstream uses might be implemented and will make it continue to be awesome with a bit more flexibility of taking what you need!&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;If you need a solid, basic player take a look at &lt;a href="http://smf.codeplex.com"&gt;SMF&lt;/a&gt;.  There are other players out there of course, but this one is based on proven best practices in the toughest situations.  And it is only getting better.  There is a lot of room for improvement for the ‘YouTube’ style simplicity of playback for medium-low quality video playback for your personal sites showing home movies, etc. – and I know that scenario will improve, because I’m pushing for it as well.&lt;/p&gt;
&lt;p&gt;If you want to use what I’ve done here, feel free – here are the files:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://storage.timheuer.com/SimpleSmfPlayerXAP.zip"&gt;Compiled XAP&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://storage.timheuer.com/SmfSimplePlayer-source.zip"&gt;Source code for my modified stand-alone player&lt;/a&gt; – note that you will need the SMF and the dependencies for that before this will compile.  This source contains only my modifications &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are also a &lt;a href="http://www.silverlight.net/learn/videos/silverlight-media-framework/"&gt;bunch of videos for working with the Silverlight Media Framework&lt;/a&gt; beyond the basics.  Be sure to check them out!&lt;/p&gt;
&lt;p&gt;Hope this helps!&lt;/p&gt;
&lt;div style="margin: 0px; padding: 0px; display: inline; float: none;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:2b4c0eb7-ab07-41e3-b37c-882a2a8af3d2" class="wlWriterEditableSmartContent"&gt;&lt;span class="tags"&gt;tags: &lt;a href="http://timheuer.com/blog/tags/silverlight/default.aspx" rel="tag"&gt;silverlight&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/ria/default.aspx" rel="tag"&gt;ria&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/xaml/default.aspx" rel="tag"&gt;xaml&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/smf/default.aspx" rel="tag"&gt;smf&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/silverlight+media+framework/default.aspx" rel="tag"&gt;silverlight media framework&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/vertigo/default.aspx" rel="tag"&gt;vertigo&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/slvideoplayer/default.aspx" rel="tag"&gt;slvideoplayer&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/codeplex/default.aspx" rel="tag"&gt;codeplex&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/open+source/default.aspx" rel="tag"&gt;open source&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="wlWriterHeaderFooter" style="margin: 0px; padding: 0px;"&gt;&lt;hr /&gt;
&lt;div class="cc-license"&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution By license.&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14707.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wlVcxdY9S49knJ-HmOr6B1RpxPU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wlVcxdY9S49knJ-HmOr6B1RpxPU/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/wlVcxdY9S49knJ-HmOr6B1RpxPU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wlVcxdY9S49knJ-HmOr6B1RpxPU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer-silverlight/~4/ZK6xkvZpAvs" height="1" width="1"/&gt;</description>
            <dc:creator>Tim Heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2010/02/10/extending-silverlight-media-framework.aspx</guid>
            <pubDate>Wed, 10 Feb 2010 18:09:06 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14707.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2010/02/10/extending-silverlight-media-framework.aspx#feedback</comments>
            <slash:comments>14</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14707.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14707.aspx</trackback:ping>
        <feedburner:origLink>http://timheuer.com/blog/archive/2010/02/10/extending-silverlight-media-framework.aspx</feedburner:origLink></item>
        <item>
            <title>Quick FAQ on Visual Studio 2010 RC release (February 2010) and Silverlight development</title>
            <link>http://feeds.timheuer.com/~r/timheuer-silverlight/~3/KH9YURko1Tk/faq-silverlight-and-visual-studio-2010-release-candidate.aspx</link>
            <description>&lt;p&gt;Yesterday Microsoft announced that Visual Studio 2010 Release Candidate was available for MSDN subscribers and would be generally available on 10 February 2010 for the public.  This release represents a significant improvement in the overall Visual Studio product and a lot was based on beta tester feedback.&lt;/p&gt;  &lt;p&gt;Of course, as a &lt;a href="http://silverlight.net"&gt;Silverlight&lt;/a&gt; developer you will be wondering: &lt;em&gt;Can I still develop Silverlight 4 applications with the VS2010 RC?&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Here’s the simplest form of a FAQ I could provide for you:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q: What was released this week for Visual Studio 2010?&lt;/strong&gt;    &lt;br /&gt;A: The Visual Studio team released &lt;em&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx#"&gt;Visual Studio 2010 and .NET Framework 4 Release Candidate builds&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q: When can I download them?     &lt;br /&gt;&lt;/strong&gt;A: If you are an &lt;a href="http://msdn.microsoft.com/downloads"&gt;MSDN subscriber&lt;/a&gt;, you can today (8 FEB).  Generally availability will be 10 FEB.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q: Can I developer Silverlight applications?&lt;/strong&gt;    &lt;br /&gt;A: Yes, you can develop &lt;strong&gt;Silverlight 3&lt;/strong&gt; applications with the release candidate of Visual Studio 2010.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q: What about Silverlight 4 applications?     &lt;br /&gt;Q: Is there an updated Silverlight 4 Tools installer?      &lt;br /&gt;Q: Is there an updated &lt;/strong&gt;&lt;a href="http://silverlight.net/riaservices"&gt;&lt;strong&gt;WCF RIA Services&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; build for VS2010?     &lt;br /&gt;Q: Is there an updated &lt;/strong&gt;&lt;a href="http://silverlight.codeplex.com"&gt;&lt;strong&gt;Silverlight Toolkit&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; build for VS2010/Silverlight 4?     &lt;br /&gt;Q: Is there an updated Blend for .NET 4 Preview build?&lt;/strong&gt;    &lt;br /&gt;A: At this time, VS2010 RC does not support developing Silverlight 4 applications.  This means that at this time there is no update for Silverlight 4 runtime/tools or the WCF RIA Services or other companion frameworks (toolkit controls, etc.).  This will not be enabled until the next public build of Silverlight 4 and companion frameworks.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q: If I want to develop Silverlight 4 applications, what should I do?&lt;/strong&gt;    &lt;br /&gt;A: You should stick on the public Beta 2 build of Visual Studio for now with the companion tools/framework builds.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q: You mentioned ‘next public build’ so when will that be for Silverlight 4?     &lt;br /&gt;&lt;/strong&gt;A: We haven’t released a timeframe on that availability right now. :-(&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q: Can I run Visual Studio 2010 Beta 2 and Visual Studio RC side-by-side?&lt;/strong&gt;    &lt;br /&gt;A: No.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q: Are there hacks to make Silverlight 4 tools work with the VS2010 RC?  &lt;br /&gt;&lt;/strong&gt;A: I’m sure someone might cobble something together, but frankly there are issues between the two and the combination isn’t supported.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q: What is wrong with you people?  Why don’t you release things at the same time?!&lt;/strong&gt;    &lt;br /&gt;A: If everyone could intern for a week in the developer division at Microsoft you’d see the challenges faced with various products innovating on different time schedules and resources and teams managing as best they can.  Frankly, Visual Studio is on a path.  Silverlight 4 as a &lt;em&gt;not-yet-released-product&lt;/em&gt; has to wait for VS milestones to ensure SL tools work well with our builds.  This same holds true for the companion frameworks and Blend.  It is not a fun place to be as we are all moving targets for each other with varying dependencies.  The Silverlight and RIA Services teams are working hard to finish a product.  That is our goal.  We want to make sure not to distract resources from adding support to interim builds that we simply can’t handle right now in order to deliver a quality FINAL product for you.&lt;/p&gt;  &lt;p&gt;Hopefully this helps, even if it isn’t what you wanted to hear for Silverlight development at this time.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6afd8522-1ad1-4f04-b4ec-6d1ebd39d723" class="wlWriterEditableSmartContent"&gt;&lt;span class="tags"&gt;tags: &lt;a href="http://timheuer.com/blog/tags/silverlight/default.aspx" rel="tag"&gt;silverlight&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/riaservices/default.aspx" rel="tag"&gt;riaservices&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/xaml/default.aspx" rel="tag"&gt;xaml&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/visual+studio/default.aspx" rel="tag"&gt;visual studio&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/vs2010/default.aspx" rel="tag"&gt;vs2010&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/wcf+ria+services/default.aspx" rel="tag"&gt;wcf ria services&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/toolkit/default.aspx" rel="tag"&gt;toolkit&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;  &lt;br /&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;hr /&gt;&lt;div class="cc-license"&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution By license.&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14706.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VB-U8Txxqbx-l9YqJiSr28rj6xA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VB-U8Txxqbx-l9YqJiSr28rj6xA/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/VB-U8Txxqbx-l9YqJiSr28rj6xA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VB-U8Txxqbx-l9YqJiSr28rj6xA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer-silverlight/~4/KH9YURko1Tk" height="1" width="1"/&gt;</description>
            <dc:creator>Tim Heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2010/02/09/faq-silverlight-and-visual-studio-2010-release-candidate.aspx</guid>
            <pubDate>Tue, 09 Feb 2010 15:37:07 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14706.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2010/02/09/faq-silverlight-and-visual-studio-2010-release-candidate.aspx#feedback</comments>
            <slash:comments>72</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14706.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14706.aspx</trackback:ping>
        <feedburner:origLink>http://timheuer.com/blog/archive/2010/02/09/faq-silverlight-and-visual-studio-2010-release-candidate.aspx</feedburner:origLink></item>
        <item>
            <title>Silverlight DataGrid quick styling tip: keep selected row focus state</title>
            <link>http://feeds.timheuer.com/~r/timheuer-silverlight/~3/cow6UH5KIV8/changing-datagrid-selected-row-state.aspx</link>
            <description>&lt;p&gt;A developer asked me this question and while a simple answer, I thought it would be a good quick tip to share for those who may be in similar situations.&lt;/p&gt;
&lt;p&gt;The scenario is the classic master-details scenario where perhaps you have a grid of data and when a user selects the row, the details are enabled in a form (or perhaps the child of the element) for editing.  Maybe something like this:&lt;/p&gt;
&lt;p&gt;&lt;img style="margin: 0px auto; display: block; float: none;" title="" alt="Master-details Typical view" src="http://storage.timheuer.com/dgstyling1.png" /&gt;&lt;/p&gt;
&lt;p&gt;See you can see the row clearly selected (note: this is using the default DataGrid styling).  But watch what happens when you go to the form to edit:&lt;/p&gt;
&lt;p&gt;&lt;img style="margin: 0px auto; display: block; float: none;" title="" alt="Focus change on selected row" src="http://storage.timheuer.com/dgstyling2.png" /&gt;&lt;/p&gt;
&lt;p&gt;Notice the focus now on the TextBox in the form, and the row, while still ‘selected’ is much more subtle in which row is selected.  The uninformed eye might miss which one.  For some scenarios this might be important.  Some might even think the row isn’t selected anymore since the visual state changed.&lt;/p&gt;
&lt;p&gt;In fact it still *IS* selected and the only thing that changed *IS* the visual state…literally.  Since &lt;a href="http://silverlight.net"&gt;Silverlight&lt;/a&gt; has the concept of the VisualStateManager, that is what we are seeing in action here.  So you want to change that to make your desired UI as expected…having the row retain it’s selected look even when the user is editing.  This is simple.&lt;/p&gt;
&lt;p&gt;Using &lt;a href="http://microsoft.com/expression"&gt;Expression Blend&lt;/a&gt;, you can select the DataGrid element and then choose Edit Additional Templates to find the RowStyle template to edit a copy of:&lt;/p&gt;
&lt;p&gt;&lt;img style="margin: 0px auto; display: block; float: none;" title="" alt="Expression Blend edit template" src="http://storage.timheuer.com/dgstyling3.png" /&gt;&lt;/p&gt;
&lt;p&gt;Once you have this, click the States tab in the tool and you’ll see the various visual states that a DataGridRow can have.  Notice the NormalSelected and UnfocusedSelected states:&lt;/p&gt;
&lt;p&gt;&lt;img style="margin: 0px auto; display: block; float: none;" title="" alt="Visual States for DataGridRow" src="http://storage.timheuer.com/dgstyling4.png" /&gt;&lt;/p&gt;
&lt;p&gt;You would modify the Fill.Color property of the UnfocusedSelected state to accomplish the desired change.  In this example, I just used the same color as the default grid for illustration.  The end result is what the user may be expecting more.  Notice the focus is on the TextBox in the form still, but the row still has a prominent selected color view:&lt;/p&gt;
&lt;p&gt;&lt;img style="margin: 0px auto; display: block; float: none;" title="" alt="Fixed focus visual UI" src="http://storage.timheuer.com/dgstyling5.png" /&gt;&lt;/p&gt;
&lt;p&gt;A simple edit, but a helpful UI change to give your users more indication of what they are doing.  Of course I’m just using the default styles of the DataGrid here, but you could use your own styles as well.  Hope this helps!&lt;/p&gt;
&lt;p&gt;Here is my style XAML as I completed the task above: &lt;a href="http://storage.timheuer.com/StaySelectedStyle.txt"&gt;StaySelectedStyle.txt&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div style="padding: 0px; margin: 0px; display: inline; float: none;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e5ee6e29-e872-498c-9442-a917fe2e0e52" class="wlWriterEditableSmartContent"&gt;&lt;span class="tags"&gt;tags: &lt;a href="http://timheuer.com/blog/tags/silverlight/default.aspx" rel="tag"&gt;silverlight&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/riaservices/default.aspx" rel="tag"&gt;riaservices&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/datagrid/default.aspx" rel="tag"&gt;datagrid&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/blend/default.aspx" rel="tag"&gt;blend&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/expression+blend/default.aspx" rel="tag"&gt;expression blend&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/visualstatemanager/default.aspx" rel="tag"&gt;visualstatemanager&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/themes/default.aspx" rel="tag"&gt;themes&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="wlWriterHeaderFooter" style="margin: 0px; padding: 0px;"&gt;&lt;hr /&gt;
&lt;div class="cc-license"&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution By license.&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14704.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ChyRv8IEFn1_-lKgn46MB9Gy1Yk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ChyRv8IEFn1_-lKgn46MB9Gy1Yk/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/ChyRv8IEFn1_-lKgn46MB9Gy1Yk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ChyRv8IEFn1_-lKgn46MB9Gy1Yk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer-silverlight/~4/cow6UH5KIV8" height="1" width="1"/&gt;</description>
            <dc:creator>Tim Heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2010/02/04/changing-datagrid-selected-row-state.aspx</guid>
            <pubDate>Thu, 04 Feb 2010 17:27:29 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14704.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2010/02/04/changing-datagrid-selected-row-state.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14704.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14704.aspx</trackback:ping>
        <feedburner:origLink>http://timheuer.com/blog/archive/2010/02/04/changing-datagrid-selected-row-state.aspx</feedburner:origLink></item>
        <item>
            <title>Reading MP3 metadata with Silverlight and drag-drop</title>
            <link>http://feeds.timheuer.com/~r/timheuer-silverlight/~3/G4wFuu1CRvc/reading-mp3-id3-tags-with-silverlight-taglib.aspx</link>
            <description>&lt;p&gt;I’m working on a little sample application for music management in &lt;a href="http://silverlight.net"&gt;Silverlight&lt;/a&gt; using &lt;a href="http://silverlight.net/riaservices"&gt;WCF RIA Services&lt;/a&gt; and some other new Silverlight 4 features.  One thing that I wanted to add to the application was the ability to drag an audio file and either lookup the data and/or add a new album/artist/song to the library automatically.&lt;/p&gt;  &lt;p&gt;Audio formats have a ‘tag’ format known as &lt;a href="http://id3.org/"&gt;ID3&lt;/a&gt;.  It’s a format used for audio file metadata that is used in Windows Media Player, iTunes, and various hardware devices as well.  Over the years there has been an evolution of this format, with the older ID3v1 format basically taking up a header space with fixed character spaces for various things like Album, Artist, Title, Year, Track.  Over time though the ID3v2 format has been adapted more as it is more flexible for things like album art, and longer titles, etc.  There are various &lt;a href="http://id3.org/Implementations"&gt;implementations of ID3 libraries for .NET&lt;/a&gt; that developers can choose from.  All of these implementations don’t take into account Silverlight unfortunately.&lt;/p&gt;  &lt;p&gt;Silverlight can only reference Silverlight-compatible libraries.  Most of these libraries were targeted for the full .NET Framework and thus I can’t binary reference them.  Luckily most of them (except one) are Open Source so I could tinker.  I took the step of simply copying the files to a Silverlight project and recompiling.  This did not work 100% in a single task.  Most of the libraries had some form of Serialization attributes/constructors and almost all used some form of ASCII encoding for various string manipulation of byte arrays.&lt;/p&gt;  &lt;p&gt;I settled on &lt;a href="http://developer.novell.com/wiki/index.php/TagLib_Sharp"&gt;TagLib#&lt;/a&gt; as the library that was the easiest to modify for me.  I had to make the same changes I mentioned above to this library as well.  I created a new Silverlight 4 class library and compiled it as such.  One thing that TagLib# didn’t have was a stream input implementation.  Most of the libraries, in fact, assumed a local file path.  Luckily the library was written using a generic ‘File’ interface, so I just had to create my own StreamFileAbstraction.  I chose to do this within my project rather than the base library.  It was easy since the LocalFileAbstraction actually perfomed an Open on the file as it’s first task and set some public variables.  My abstraction basically just hands the stream already and ready to go.&lt;/p&gt;  &lt;p&gt;Now, using the &lt;a href="http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx#droptarget"&gt;Silverlight 4 drop target feature&lt;/a&gt;, I created just a simple test harness to test my theory.  My XAML basically is this (pretty rudimentary just to test my theory):&lt;/p&gt;  &lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;   &lt;div id="codeSnippet" class="csharpcode"&gt;     &lt;pre class="alteven"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="LayoutRoot"&lt;/span&gt; &lt;span class="attr"&gt;Background&lt;/span&gt;&lt;span class="kwrd"&gt;="White"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt;             &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Border&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="DropZone"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="700"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="300"&lt;/span&gt; &lt;span class="attr"&gt;Background&lt;/span&gt;&lt;span class="kwrd"&gt;="Silver"&lt;/span&gt; &lt;span class="attr"&gt;CornerRadius&lt;/span&gt;&lt;span class="kwrd"&gt;="8"&lt;/span&gt; &lt;span class="attr"&gt;AllowDrop&lt;/span&gt;&lt;span class="kwrd"&gt;="True"&lt;/span&gt; &lt;span class="attr"&gt;Drop&lt;/span&gt;&lt;span class="kwrd"&gt;="DropZone_Drop"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;TextWrapping&lt;/span&gt;&lt;span class="kwrd"&gt;="Wrap"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="drop here"&lt;/span&gt; &lt;span class="attr"&gt;FontSize&lt;/span&gt;&lt;span class="kwrd"&gt;="64"&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Center"&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Center"&lt;/span&gt; &lt;span class="attr"&gt;Foreground&lt;/span&gt;&lt;span class="kwrd"&gt;="Gray"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt;             &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Border&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum6" class="lnum"&gt;   6:&lt;/span&gt;             &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="255"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="700"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum7" class="lnum"&gt;   7:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum8" class="lnum"&gt;   8:&lt;/span&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ColumnDefinition&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="111"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum9" class="lnum"&gt;   9:&lt;/span&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ColumnDefinition&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="*"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum10" class="lnum"&gt;  10:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum11" class="lnum"&gt;  11:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum12" class="lnum"&gt;  12:&lt;/span&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="Auto"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum13" class="lnum"&gt;  13:&lt;/span&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="Auto"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum14" class="lnum"&gt;  14:&lt;/span&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="Auto"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum15" class="lnum"&gt;  15:&lt;/span&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="Auto"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum16" class="lnum"&gt;  16:&lt;/span&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="50*"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum17" class="lnum"&gt;  17:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum18" class="lnum"&gt;  18:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dataInput:Label&lt;/span&gt; &lt;span class="attr"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;="Artist"&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Right"&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Top"&lt;/span&gt; &lt;span class="attr"&gt;FontWeight&lt;/span&gt;&lt;span class="kwrd"&gt;="Bold"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="4"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum19" class="lnum"&gt;  19:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dataInput:Label&lt;/span&gt; &lt;span class="attr"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;="Album"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Right"&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Top"&lt;/span&gt; &lt;span class="attr"&gt;FontWeight&lt;/span&gt;&lt;span class="kwrd"&gt;="Bold"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="4"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum20" class="lnum"&gt;  20:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dataInput:Label&lt;/span&gt; &lt;span class="attr"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;="Title"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Right"&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Top"&lt;/span&gt; &lt;span class="attr"&gt;FontWeight&lt;/span&gt;&lt;span class="kwrd"&gt;="Bold"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="4"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum21" class="lnum"&gt;  21:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dataInput:Label&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Left"&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="Artist"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="4"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum22" class="lnum"&gt;  22:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dataInput:Label&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Left"&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="Album"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="4"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum23" class="lnum"&gt;  23:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dataInput:Label&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Left"&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Top"&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="Title"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="4"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum24" class="lnum"&gt;  24:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Image&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="4"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="118"&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Left"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="4,2,0,0"&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="AlbumArt"&lt;/span&gt; &lt;span class="attr"&gt;Stretch&lt;/span&gt;&lt;span class="kwrd"&gt;="Fill"&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Top"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="118"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum25" class="lnum"&gt;  25:&lt;/span&gt;             &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum26" class="lnum"&gt;  26:&lt;/span&gt;         &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum27" class="lnum"&gt;  27:&lt;/span&gt;     &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Notice on the Border the &lt;em&gt;AllowDrop=”True”&lt;/em&gt; attribute.  This tells Silverlight that the element can be used as a drop target (for a file from the file system).  The rendered UI looks like this:&lt;/p&gt;

&lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" alt="Sample MP3 test UI" src="http://storage.timheuer.com/mpsdrop1.png" width="600" height="498" /&gt;&lt;/p&gt;

&lt;p&gt;You may also notice the &lt;em&gt;Drop&lt;/em&gt; attribute on the Border element that maps to the event handler &lt;em&gt;DropZone_Drop&lt;/em&gt;.  This event handler basically gives us an event argument that represents the dropped objects on the surface (yes you can drop more than one).  The initial stub of this function looks like this:&lt;/p&gt;

&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
  &lt;div id="codeSnippet" class="csharpcode"&gt;
    &lt;pre class="alteven"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DropZone_Drop(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, DragEventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt;     IDataObject drop = e.Data &lt;span class="kwrd"&gt;as&lt;/span&gt; IDataObject;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt;     &lt;span class="kwrd"&gt;object&lt;/span&gt; data = drop.GetData(DataFormats.FileDrop);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum6" class="lnum"&gt;   6:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum7" class="lnum"&gt;   7:&lt;/span&gt;     FileInfo[] files = data &lt;span class="kwrd"&gt;as&lt;/span&gt; FileInfo[];&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum8" class="lnum"&gt;   8:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum9" class="lnum"&gt;   9:&lt;/span&gt;     FileInfo file = files[0];&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum10" class="lnum"&gt;  10:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;I’m being a little verbose in the code to show each of the steps.  As you can see you get a FileInfo array and can pull items out of that.  For my sample I’m just assuming one item was dropped.  In the next steps I just need to get the Stream from the file and use my library.  Here is the full function (with a quick check to make sure it is a supported audio file):&lt;/p&gt;

&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
  &lt;div id="codeSnippet" class="csharpcode"&gt;
    &lt;pre class="alteven"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DropZone_Drop(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, DragEventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt;     IDataObject drop = e.Data &lt;span class="kwrd"&gt;as&lt;/span&gt; IDataObject;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt;     &lt;span class="kwrd"&gt;object&lt;/span&gt; data = drop.GetData(DataFormats.FileDrop);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum6" class="lnum"&gt;   6:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum7" class="lnum"&gt;   7:&lt;/span&gt;     FileInfo[] files = data &lt;span class="kwrd"&gt;as&lt;/span&gt; FileInfo[];&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum8" class="lnum"&gt;   8:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum9" class="lnum"&gt;   9:&lt;/span&gt;     FileInfo file = files[0];&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum10" class="lnum"&gt;  10:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum11" class="lnum"&gt;  11:&lt;/span&gt;     &lt;span class="kwrd"&gt;if&lt;/span&gt; (file.Extension.ToLower() != &lt;span class="str"&gt;".mp3"&lt;/span&gt; &amp;amp;&amp;amp; file.Extension.ToLower() != &lt;span class="str"&gt;".wma"&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum12" class="lnum"&gt;  12:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum13" class="lnum"&gt;  13:&lt;/span&gt;         MessageBox.Show(&lt;span class="str"&gt;"Must be an MP3 file"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum14" class="lnum"&gt;  14:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum15" class="lnum"&gt;  15:&lt;/span&gt;     &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum16" class="lnum"&gt;  16:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum17" class="lnum"&gt;  17:&lt;/span&gt;         Stream fileStream = file.OpenRead();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum18" class="lnum"&gt;  18:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum19" class="lnum"&gt;  19:&lt;/span&gt;         TagLib.File.IFileAbstraction fileAbstraction = &lt;span class="kwrd"&gt;new&lt;/span&gt; StreamFileAbstraction(fileStream, file.Name);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum20" class="lnum"&gt;  20:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum21" class="lnum"&gt;  21:&lt;/span&gt;         TagLib.File tagFile = TagLib.File.Create(fileAbstraction);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum22" class="lnum"&gt;  22:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum23" class="lnum"&gt;  23:&lt;/span&gt;         &lt;span class="kwrd"&gt;if&lt;/span&gt; (tagFile.Tag.TagTypes.HasFlag(TagLib.TagTypes.Id3v2))&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum24" class="lnum"&gt;  24:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum25" class="lnum"&gt;  25:&lt;/span&gt;             Artist.Content = tagFile.Tag.FirstAlbumArtist;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum26" class="lnum"&gt;  26:&lt;/span&gt;             Album.Content = &lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(tagFile.Tag.Album) ? &lt;span class="str"&gt;"NO ALBUM NAME"&lt;/span&gt; : tagFile.Tag.Album;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum27" class="lnum"&gt;  27:&lt;/span&gt;             Title.Content = tagFile.Tag.Title;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum28" class="lnum"&gt;  28:&lt;/span&gt;             &lt;span class="kwrd"&gt;if&lt;/span&gt; (tagFile.Tag.Pictures.Length &amp;gt; 0)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum29" class="lnum"&gt;  29:&lt;/span&gt;             {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum30" class="lnum"&gt;  30:&lt;/span&gt;                 IPicture pic = tagFile.Tag.Pictures[0];&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum31" class="lnum"&gt;  31:&lt;/span&gt;                 MemoryStream img = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream(pic.Data.Data);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum32" class="lnum"&gt;  32:&lt;/span&gt;                 BitmapImage bmp = &lt;span class="kwrd"&gt;new&lt;/span&gt; BitmapImage();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum33" class="lnum"&gt;  33:&lt;/span&gt;                 bmp.SetSource(img);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum34" class="lnum"&gt;  34:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum35" class="lnum"&gt;  35:&lt;/span&gt;                 AlbumArt.Source = bmp;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum36" class="lnum"&gt;  36:&lt;/span&gt;             }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum37" class="lnum"&gt;  37:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum38" class="lnum"&gt;  38:&lt;/span&gt;         &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum39" class="lnum"&gt;  39:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum40" class="lnum"&gt;  40:&lt;/span&gt;             MessageBox.Show(&lt;span class="str"&gt;"no id3v2 tag"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum41" class="lnum"&gt;  41:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum42" class="lnum"&gt;  42:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Once all the pieces are together you drag an audio file on the drop surface and the items will populate.  Here’s a quick video showing how it all works together.&lt;/p&gt;

&lt;p align="center"&gt;&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="640" height="480"&gt;
		  &lt;param name="source" value="http://video.timheuer.com/players/smf1/SmfSimplePlayer.xap" /&gt;
		  &lt;param name="background" value="white" /&gt;
			&lt;param name="enableHtmlAccess" value="true" /&gt;
		  &lt;param name="minRuntimeVersion" value="3.0.40818.0" /&gt;
          	&lt;param name="initParams" value="media=http://video.timheuer.com/mp3drop/dropmp3.wmv" /&gt;
		  &lt;param name="autoUpgrade" value="true" /&gt;
		  &lt;a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;amp;v=3.0.40818.0" style="text-decoration:none"&gt;
 			  &lt;img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none" /&gt;
		  &lt;/a&gt;
	    &lt;/object&gt;&lt;/p&gt;

&lt;p&gt;So this is just a start – and I’ve got only the tag reading working…didn’t bother looking at the other parts of the library so I &lt;em&gt;know&lt;/em&gt; it isn’t fully ported for Silverlight.&lt;/p&gt;

&lt;p&gt;What do you think?  Found a better implementation of ID3 tag reading?&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:01d17dc9-da66-4af7-ae5f-2402b0526a83" class="wlWriterEditableSmartContent"&gt;&lt;span class="tags"&gt;tags: &lt;a href="http://timheuer.com/blog/tags/silverlight/default.aspx" rel="tag"&gt;silverlight&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/riaservices/default.aspx" rel="tag"&gt;riaservices&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/ria/default.aspx" rel="tag"&gt;ria&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/xaml/default.aspx" rel="tag"&gt;xaml&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/mp3/default.aspx" rel="tag"&gt;mp3&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/id3/default.aspx" rel="tag"&gt;id3&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/id3v2/default.aspx" rel="tag"&gt;id3v2&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/wma/default.aspx" rel="tag"&gt;wma&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/media/default.aspx" rel="tag"&gt;media&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;

&lt;br /&gt;



&lt;br /&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;hr /&gt;&lt;div class="cc-license"&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution By license.&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14702.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GWu-saRt49asfcPvJsHdq_d4-9A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GWu-saRt49asfcPvJsHdq_d4-9A/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/GWu-saRt49asfcPvJsHdq_d4-9A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GWu-saRt49asfcPvJsHdq_d4-9A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer-silverlight/~4/G4wFuu1CRvc" height="1" width="1"/&gt;</description>
            <dc:creator>Tim Heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2010/01/30/reading-mp3-id3-tags-with-silverlight-taglib.aspx</guid>
            <pubDate>Sat, 30 Jan 2010 22:38:00 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14702.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2010/01/30/reading-mp3-id3-tags-with-silverlight-taglib.aspx#feedback</comments>
            <slash:comments>8</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14702.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14702.aspx</trackback:ping>
        <feedburner:origLink>http://timheuer.com/blog/archive/2010/01/30/reading-mp3-id3-tags-with-silverlight-taglib.aspx</feedburner:origLink></item>
        <item>
            <title>Silverlight Client for Facebook available</title>
            <link>http://feeds.timheuer.com/~r/timheuer-silverlight/~3/hw1mi-5jozI/silverlight-client-for-facebook-from-pdc-available.aspx</link>
            <description>&lt;p&gt;Remember the final moments of the &lt;a href="http://weblogs.asp.net/scottgu"&gt;Scott Guthrie&lt;/a&gt; keynote presentation at PDC09?  Where Brian Goldfarb came on stage and demonstrated a completed application using a lot of the features of &lt;a href="http://silverlight.net"&gt;Silverlight&lt;/a&gt; 4?  Yeah, &lt;strong&gt;&lt;em&gt;that&lt;/em&gt;&lt;/strong&gt; Facebook application.  Well, it’s here now!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://bit.ly/facebookclient"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Microsoft Silverlight 4 Beta Client for Facebook" border="0" alt="Microsoft Silverlight 4 Beta Client for Facebook" src="http://storage.timheuer.com/slf-homepage.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Silverlight Client for Facebook - Home view" alt="Silverlight Client for Facebook - Home view" src="http://storage.timheuer.com/sfc-home.png" /&gt;&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;Microsoft Silverlight 4 Beta Client for Facebook&lt;/strong&gt; has been released as a developer preview sample.  In order to use it you must have Silverlight 4 developer builds installed.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;NOTE: When you run this application you’ll be installing the &lt;em&gt;developer&lt;/em&gt; builds of Silverlight.  When Silverlight 4 releases, unless you are a developer, you’ll likely want to uninstall this plugin and install the released software.  This sample application is being provided as a developer preview to showcase and inspire.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The application is installed as a trusted application and does all the things you’d expect for Facebook.&lt;/p&gt;  &lt;p&gt;Status updates:&lt;/p&gt;  &lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Silverlight Client for Facebook - Status updates" alt="Silverlight Client for Facebook - Status updates" src="http://storage.timheuer.com/sfc-status-updates.png" /&gt;&lt;/p&gt;  &lt;p&gt;Drag/drop pictures from your computer to a photo album:&lt;/p&gt;  &lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Silverlight Client for Facebook - Add photo" alt="Silverlight Client for Facebook - Add photo" src="http://storage.timheuer.com/sfc-dragdroppix.png" /&gt;&lt;/p&gt;  &lt;p&gt;A photo feed view:&lt;/p&gt;  &lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Silverlight Client for Facebook - photo feed" alt="Silverlight Client for Facebook - photo feed" src="http://storage.timheuer.com/sfc-photofeed.png" /&gt;&lt;/p&gt;  &lt;p&gt;Notifications for messages to you:&lt;/p&gt;  &lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Silverlight Client for Facebook - notification window" alt="Silverlight Client for Facebook - notification window" src="http://storage.timheuer.com/sfc-notification.png" /&gt;&lt;/p&gt;  &lt;p&gt;Add a photo to a post using your web camera on your computer:&lt;/p&gt;  &lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Silverlight Client for Facebook - Webcamera input" alt="Silverlight Client for Facebook - Webcamera input" src="http://storage.timheuer.com/sfc-webcam.png" /&gt;&lt;/p&gt;  &lt;p&gt;And yes, anyone uploading video to Facebook can be played back in the app as well:&lt;/p&gt;  &lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Silverlight Client for Facebook - flash video playback in Silverlight" alt="Silverlight Client for Facebook - flash video playback in Silverlight" src="http://storage.timheuer.com/sfc-vimeo-playback.png" /&gt;&lt;/p&gt;  &lt;p&gt;A lot of cool ways to explore your Facebook information (sorry, no mafia war games…for me that’s a good thing).  You can also see some Outlook integration if you right-click on events that you may have to send an email and such (I don’t have any events in my Facbook account to snapshot).&lt;/p&gt;  &lt;h2&gt;So what’s NOT in there?&lt;/h2&gt;  &lt;p&gt;Good question.  At PDC09 you may have seen a few things that I haven’t mentioned yet above.  The chromeless (borderless application) aspect of the application is not in this preview.  This is because the beta of Silverlight doesn’t include that feature right now.  Additionally the plug-in the camera and have it automatically import the pictures is not in this preview as well.  That was implemented using some COM integration and the team just didn’t clean that code up for this preview for the public.&lt;/p&gt;  &lt;h2&gt;What about source code?&lt;/h2&gt;  &lt;p&gt;At this time no source code is being provided…and probably won’t be.  I’m not the decision maker on ultimately if it will or not, just my assumption.  The Facebook client is meant to be a working demonstration/inspiration of what one could do with existing services and providing different views into an existing application framework.&lt;/p&gt;  &lt;h2&gt;How can I install this and will it work on my Mac?&lt;/h2&gt;  &lt;p&gt;You can play around with the app by visiting the &lt;a href="http://bit.ly/facebookclient"&gt;Microsoft Silverlight 4 Beta Client for Facebook&lt;/a&gt; app on the Silverlight samples site (which also includes the other sample applications from PDC09).  As a reminder, this is a developer preview build and intended for developers.  You will need to have Silverlight 4 installed on your machine (which is a beta plugin).  The link to the app will direct you where you can get the appropriate download.&lt;/p&gt;  &lt;p&gt;Yes, it will work on your Mac (as long as you have an Intel processor version).  When you install the app you’ll see the Apple preferred install guidelines to drag the application to your Applications folder and can navigate to it there or use Spotlight search to find it.&lt;/p&gt;  &lt;p&gt;This is a fun little application to navigate your Facebook account.  The team had a good time building it and is excited to share it with others.  Have fun!&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6028b812-2847-40e9-9efc-fbc1813cefaf" class="wlWriterEditableSmartContent"&gt;&lt;span class="tags"&gt;tags: &lt;a href="http://timheuer.com/blog/tags/silverlight/default.aspx" rel="tag"&gt;silverlight&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/riaservices/default.aspx" rel="tag"&gt;riaservices&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/facebook/default.aspx" rel="tag"&gt;facebook&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/pdc09/default.aspx" rel="tag"&gt;pdc09&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/scottgu/default.aspx" rel="tag"&gt;scottgu&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/expression+blend/default.aspx" rel="tag"&gt;expression blend&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;hr /&gt;&lt;div class="cc-license"&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution By license.&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14700.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cbFTs8hj3wM8Gm7epPS7wX97m-g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cbFTs8hj3wM8Gm7epPS7wX97m-g/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/cbFTs8hj3wM8Gm7epPS7wX97m-g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cbFTs8hj3wM8Gm7epPS7wX97m-g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer-silverlight/~4/hw1mi-5jozI" height="1" width="1"/&gt;</description>
            <dc:creator>Tim Heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2010/01/25/silverlight-client-for-facebook-from-pdc-available.aspx</guid>
            <pubDate>Mon, 25 Jan 2010 20:39:29 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14700.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2010/01/25/silverlight-client-for-facebook-from-pdc-available.aspx#feedback</comments>
            <slash:comments>34</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14700.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14700.aspx</trackback:ping>
        <feedburner:origLink>http://timheuer.com/blog/archive/2010/01/25/silverlight-client-for-facebook-from-pdc-available.aspx</feedburner:origLink></item>
        <item>
            <title>RIA Services and relational data</title>
            <link>http://feeds.timheuer.com/~r/timheuer-silverlight/~3/m-s9DC7lErc/master-details-with-ria-services-and-includedresults.aspx</link>
            <description>&lt;p&gt;As we’ve all been guilty, when you see demonstrations of technologies most of the time the data samples show single table solutions.  When was the last time you’ve developed a single-table system? :-)  Thought so.&lt;/p&gt;  &lt;p&gt;In RIA Services demonstrations, most of them have been single-table samples as well.  So how do you go about retrieving relational data (master/details type) with RIA Services?  Here’s an option.  I’m using VS2010, Silverlight 4 and the &lt;a href="http://silverlight.net/riaservices"&gt;WCF RIA Services&lt;/a&gt; preview using the below sample.  I’m also using the &lt;a href="http://chinookdatabase.codeplex.com"&gt;Chinook&lt;/a&gt; sample database which has become one of my favorite simpler relational data samples to use.&lt;/p&gt;  &lt;h2&gt;Creating your project and associated RIA Services&lt;/h2&gt;  &lt;p&gt;This is easy, create a new &lt;a href="http://silverlight.net"&gt;Silverlight&lt;/a&gt; project and make sure the ‘Enable .NET RIA Services’ link is checked (yes, we know it doesn’t say WCF in that dialog).  My Silverlight application will be a simple button to retrieve artists then show their associated albums.  Here’s my XAML to start:&lt;/p&gt;  &lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;   &lt;div id="codeSnippet" class="csharpcode"&gt;     &lt;pre class="alteven"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="LayoutRoot"&lt;/span&gt; &lt;span class="attr"&gt;Background&lt;/span&gt;&lt;span class="kwrd"&gt;="White"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="400"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Button&lt;/span&gt; &lt;span class="attr"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;="Get Artist Information"&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="GetArtistButton"&lt;/span&gt; &lt;span class="attr"&gt;Click&lt;/span&gt;&lt;span class="kwrd"&gt;="GetArtistButton_Click"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;Orientation&lt;/span&gt;&lt;span class="kwrd"&gt;="Horizontal"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt;             &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="ArtistsContext"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum6" class="lnum"&gt;   6:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;Orientation&lt;/span&gt;&lt;span class="kwrd"&gt;="Horizontal"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum7" class="lnum"&gt;   7:&lt;/span&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Artists: "&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum8" class="lnum"&gt;   8:&lt;/span&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding ElementName=ListOfArtists, Path=Items.Count}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum9" class="lnum"&gt;   9:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum10" class="lnum"&gt;  10:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ListBox&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="ListOfArtists"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="200"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="300"&lt;/span&gt; &lt;span class="attr"&gt;DisplayMemberPath&lt;/span&gt;&lt;span class="kwrd"&gt;="Name"&lt;/span&gt; &lt;span class="attr"&gt;ItemsSource&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding}"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum11" class="lnum"&gt;  11:&lt;/span&gt;             &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum12" class="lnum"&gt;  12:&lt;/span&gt;             &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="AlbumsContext"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum13" class="lnum"&gt;  13:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;Orientation&lt;/span&gt;&lt;span class="kwrd"&gt;="Horizontal"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum14" class="lnum"&gt;  14:&lt;/span&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Albums: "&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum15" class="lnum"&gt;  15:&lt;/span&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding ElementName=ListOfAlbums, Path=Items.Count}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum16" class="lnum"&gt;  16:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum17" class="lnum"&gt;  17:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ListBox&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="ListOfAlbums"&lt;/span&gt; &lt;span class="attr"&gt;DisplayMemberPath&lt;/span&gt;&lt;span class="kwrd"&gt;="Title"&lt;/span&gt; &lt;span class="attr"&gt;ItemsSource&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding}"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="200"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="300"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum18" class="lnum"&gt;  18:&lt;/span&gt;             &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum19" class="lnum"&gt;  19:&lt;/span&gt;         &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum20" class="lnum"&gt;  20:&lt;/span&gt;     &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum21" class="lnum"&gt;  21:&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Now on the server side I need to create the associated models and domain services to be consumed.  I’m creating my model using Entity Framework and it looks like this:&lt;/p&gt;

&lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Chinook Entity Model" alt="Chinook Entity Model" src="http://storage.timheuer.com/riasvcsrelational.png" /&gt;&lt;/p&gt;

&lt;p&gt;Now I need to create my Domain Service class for that model (remember to build the solution after you create your model so it will show up in the tools).  When we create the Domain Service class be sure to enable the checkbox to generate associated classes for metadata.  Once we finish we have some stub services created for us.  &lt;/p&gt;

&lt;h2&gt;Using the Domain Service functions&lt;/h2&gt;

&lt;p&gt;We have GetArtists and GetAlbums functions we can work with.  As an example we can wire up the button click to retrieve a list of artists using the default functions we got:&lt;/p&gt;

&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
  &lt;div id="codeSnippet" class="csharpcode"&gt;
    &lt;pre class="alteven"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; ChinookContext ctx = &lt;span class="kwrd"&gt;new&lt;/span&gt; ChinookContext();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetArtistButton_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt;     ArtistsContext.DataContext = ctx.Artists;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum6" class="lnum"&gt;   6:&lt;/span&gt;     ctx.Load(ctx.GetArtistsQuery());&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum7" class="lnum"&gt;   7:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;But what about when a user clicks on an Artist, we want to show the albums for &lt;em&gt;that artist&lt;/em&gt; and not the others.  We need to modify our Domain Service to add a function:&lt;/p&gt;

&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
  &lt;div id="codeSnippet" class="csharpcode"&gt;
    &lt;pre class="alteven"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; IQueryable&amp;lt;Album&amp;gt; GetAlbumsForArtist(&lt;span class="kwrd"&gt;int&lt;/span&gt; ArtistId)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.ObjectContext.Albums.Where(a =&amp;gt; a.ArtistId == ArtistId);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Now we can use that function when a user clicks on an associated artist to populate the album information:&lt;/p&gt;

&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
  &lt;div id="codeSnippet" class="csharpcode"&gt;
    &lt;pre class="alteven"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ListOfArtists_SelectionChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, SelectionChangedEventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt;     ListBox theList = sender &lt;span class="kwrd"&gt;as&lt;/span&gt; ListBox;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt;     Artist a = theList.SelectedItem &lt;span class="kwrd"&gt;as&lt;/span&gt; Artist;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt;     ctx.Albums.Clear();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum6" class="lnum"&gt;   6:&lt;/span&gt;     AlbumsContext.DataContext = ctx.Albums;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum7" class="lnum"&gt;   7:&lt;/span&gt;     ctx.Load(ctx.GetAlbumsForArtistQuery(a.ArtistId));&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum8" class="lnum"&gt;   8:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Cool.&lt;/p&gt;

&lt;p&gt;However, the second event handling for our master-details section for this particular data set seems unnecessary.  After all, why not just include the children data with our initial request if we *know* that we’re doing an explicit master-details view (and our set is not that large relatively speaking).&lt;/p&gt;

&lt;h2&gt;Modify the metadata classes&lt;/h2&gt;

&lt;p&gt;Remember the generated metadata classes?  Go back to it now.  You’ll see a definition of the ArtistMetadata that includes this:&lt;/p&gt;

&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
  &lt;div id="codeSnippet" class="csharpcode"&gt;
    &lt;pre class="alteven"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; EntityCollection&amp;lt;Album&amp;gt; Albums;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Notice it has an Albums collection property.  Great, so we could just modify our XAML binding to use some element binding and get the Albums property of the SelectedItem right?  Well, not yet.  If we do that, we’ll have no data.  Why is that?  Because we haven’t told RIA Services to perform the necessary additional query to get the data.  Simple add [Include] at the top of the Albums collection:&lt;/p&gt;

&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
  &lt;div id="codeSnippet" class="csharpcode"&gt;
    &lt;pre class="alteven"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; [Include]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; EntityCollection&amp;lt;Album&amp;gt; Albums;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;And that’s what we need.  Now we can add a function to our Domain Service class to get the additional data:&lt;/p&gt;

&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
  &lt;div id="codeSnippet" class="csharpcode"&gt;
    &lt;pre class="alteven"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; IQueryable&amp;lt;Artist&amp;gt; GetArtistsWithAlbums()&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.ObjectContext.Artists.Include(&lt;span class="str"&gt;"Albums"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Now we just need to do some clean up.  We need to change our button click code to get the GetArtistsWithAlbums query now instead of the other one first.&lt;/p&gt;

&lt;p /&gt;

&lt;p /&gt;

&lt;p /&gt;

&lt;p /&gt;

&lt;p /&gt;

&lt;p /&gt;

&lt;h2&gt;Remove unnecessary code and use binding to help us&lt;/h2&gt;

&lt;p&gt;Now we can remove the SelectionChanged event handler for our Artists ListBox as well as add some binding commands to our XAML like this:&lt;/p&gt;

&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
  &lt;div id="codeSnippet" class="csharpcode"&gt;
    &lt;pre class="alteven"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="LayoutRoot"&lt;/span&gt; &lt;span class="attr"&gt;Background&lt;/span&gt;&lt;span class="kwrd"&gt;="White"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="400"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Button&lt;/span&gt; &lt;span class="attr"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;="Get Artist Information"&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="GetArtistButton"&lt;/span&gt; &lt;span class="attr"&gt;Click&lt;/span&gt;&lt;span class="kwrd"&gt;="GetArtistButton_Click"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;Orientation&lt;/span&gt;&lt;span class="kwrd"&gt;="Horizontal"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt;             &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="ArtistsContext"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum6" class="lnum"&gt;   6:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;Orientation&lt;/span&gt;&lt;span class="kwrd"&gt;="Horizontal"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum7" class="lnum"&gt;   7:&lt;/span&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Artists: "&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum8" class="lnum"&gt;   8:&lt;/span&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding ElementName=ListOfArtists, Path=Items.Count}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum9" class="lnum"&gt;   9:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum10" class="lnum"&gt;  10:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ListBox&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="ListOfArtists"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="200"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="300"&lt;/span&gt; &lt;span class="attr"&gt;DisplayMemberPath&lt;/span&gt;&lt;span class="kwrd"&gt;="Name"&lt;/span&gt; &lt;span class="attr"&gt;ItemsSource&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding}"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum11" class="lnum"&gt;  11:&lt;/span&gt;             &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum12" class="lnum"&gt;  12:&lt;/span&gt;             &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="AlbumsContext"&lt;/span&gt; &lt;span class="attr"&gt;DataContext&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding ElementName=ListOfArtists, Path=SelectedItem}"&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum13" class="lnum"&gt;  13:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;Orientation&lt;/span&gt;&lt;span class="kwrd"&gt;="Horizontal"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum14" class="lnum"&gt;  14:&lt;/span&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Albums: "&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum15" class="lnum"&gt;  15:&lt;/span&gt;                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding ElementName=ListOfAlbums, Path=Items.Count}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum16" class="lnum"&gt;  16:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum17" class="lnum"&gt;  17:&lt;/span&gt;                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ListBox&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="ListOfAlbums"&lt;/span&gt; &lt;span class="attr"&gt;DisplayMemberPath&lt;/span&gt;&lt;span class="kwrd"&gt;="Title"&lt;/span&gt; &lt;span class="attr"&gt;ItemsSource&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding Albums}"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="200"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="300"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum18" class="lnum"&gt;  18:&lt;/span&gt;             &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum19" class="lnum"&gt;  19:&lt;/span&gt;         &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum20" class="lnum"&gt;  20:&lt;/span&gt;     &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum21" class="lnum"&gt;  21:&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Notice how the DataContext of my Albums ListBox is now set using element binding to the SelectedItem of the Artists ListBox.  Then the ItemsSource of the ListBox for Albums has a {Binding Albums} command.  This is because our Artists query now &lt;em&gt;includes&lt;/em&gt; the associated Album data and we can just reference the property.&lt;/p&gt;

&lt;h2&gt;Use with caution&lt;/h2&gt;

&lt;p&gt;While this example shows how easy it can be to have included results in your Domain Service query result, be mindful of when you are using.  For instance if you have a customer database of 1000 customers and you want all orders to be retrieved…it might not be wise to use this particular type of method.  &lt;/p&gt;

&lt;p&gt;This presents merely another choice for areas where you may want/need it (i.e., country/state/city) for your application.&lt;/p&gt;

&lt;p&gt;You can download the sample solution for the above code snippets here: &lt;a href="http://storage.timheuer.com/SilverlightApplication41.zip"&gt;SilverlightApplication41.zip&lt;/a&gt;.  Reminder that you will need to have the Chinook database installed already – it is NOT included with this sample download.&lt;/p&gt;

&lt;p&gt;Hope this helps!&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ca7d8e8c-ced3-405e-84dd-d6e3eeb10926" class="wlWriterEditableSmartContent"&gt;&lt;span class="tags"&gt;tags: &lt;a href="http://timheuer.com/blog/tags/riaservices/default.aspx" rel="tag"&gt;riaservices&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/silverlight/default.aspx" rel="tag"&gt;silverlight&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/ria/default.aspx" rel="tag"&gt;ria&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/xaml/default.aspx" rel="tag"&gt;xaml&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/master+details/default.aspx" rel="tag"&gt;master details&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/relational/default.aspx" rel="tag"&gt;relational&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/chinook/default.aspx" rel="tag"&gt;chinook&lt;/a&gt;, &lt;a href="http://timheuer.com/blog/tags/domainservice/default.aspx" rel="tag"&gt;domainservice&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;hr /&gt;&lt;div class="cc-license"&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution By license.&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14698.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5gd49BxrOnfejnu7jyBAc5mHCsk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5gd49BxrOnfejnu7jyBAc5mHCsk/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/5gd49BxrOnfejnu7jyBAc5mHCsk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5gd49BxrOnfejnu7jyBAc5mHCsk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer-silverlight/~4/m-s9DC7lErc" height="1" width="1"/&gt;</description>
            <dc:creator>Tim Heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2010/01/05/master-details-with-ria-services-and-includedresults.aspx</guid>
            <pubDate>Wed, 06 Jan 2010 00:02:10 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14698.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2010/01/05/master-details-with-ria-services-and-includedresults.aspx#feedback</comments>
            <slash:comments>30</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14698.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14698.aspx</trackback:ping>
        <feedburner:origLink>http://timheuer.com/blog/archive/2010/01/05/master-details-with-ria-services-and-includedresults.aspx</feedburner:origLink></item>
        <item>
            <title>January 2010 Silverlight MVPs</title>
            <link>http://feeds.timheuer.com/~r/timheuer-silverlight/~3/ESsZ5IOMDqQ/new-january-2010-silverlight-mvp-awards.aspx</link>
            <description>&lt;p&gt;Happy new year to all!  I hope you enjoyed a safe celebration whether that be playing a board game with friends, toasting the new year with some bubbly, throwing things at Ryan Seacrest on TV, or whatever.&lt;/p&gt;
&lt;p&gt;Each quarter, new MVP (Microsoft Most Valuable Professional) candidates are awarded.  January 2010 is the first awards of the year and so I present the new/moved/re-awarded &lt;a href="http://silverlight.net"&gt;Silverlight&lt;/a&gt; specific MVPs:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://www.wintellect.com/cs/blogs/jprosise/" rel="friend met"&gt;Jeff Prosise&lt;/a&gt; – If you aren’t subscribed to Jeff’s blog, stop and do so now.  It’s filled with some great nuggest that are usually on the advanced ‘how’d he do that’ side of things.  Jeff does a good job spelunking the framework and figuring things out.&lt;/li&gt;
    &lt;li&gt;&lt;a href="blog.davidyack.com "&gt;David Yack&lt;/a&gt; (&lt;a href="http://twitter.com/davidyack"&gt;@davidyack&lt;/a&gt;) – David is a CRM guru and has also written a great &lt;a href="http://timheuer.com/blog/articles/silverlight-book-recommendations.aspx"&gt;Silverlight 3 Jumpstart book&lt;/a&gt; (recommended for beginners).  He’s been spending more time with RIA Services for biz/CRM apps lately and been providing great insights into integration uses.  He should blog more :-)&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://weblogs.asp.net/lduveau/"&gt;Laurent Duveau&lt;/a&gt; (&lt;a href="http://twitter.com/LaurentDuveau"&gt;@LaurentDuveau&lt;/a&gt;) – another re-award for Laurent who keeps cranking out great stuff and helps with the Silverlight Tour in Canada.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://blog.galasoft.ch "&gt;Laurent Bugnion&lt;/a&gt; (&lt;a href="http://twitter.com/lbugnion"&gt;@lbugnion&lt;/a&gt;) – one of the XAML experts at IdentityMine, Laurent also has written one of the definitive &lt;a href="http://timheuer.com/blog/articles/silverlight-book-recommendations.aspx"&gt;Silverlight reference books&lt;/a&gt; – and is one of the nicest guys you’ll meet.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://neverindoubtnet.blogspot.com/"&gt;Ward Bell&lt;/a&gt; (&lt;a href="http://twitter.com/wardbell"&gt;@wardbell&lt;/a&gt;) – Ward has some great thoughts on application building for XAML clients and extensive experience with multicolored jackets and general antagonistic views ;-)&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://pagebrooks.com/"&gt;Page Brooks&lt;/a&gt; – organizer of SilverlightContrib and various control development efforts in the community.  Control Wrangler?&lt;/li&gt;
    &lt;li&gt;Rob Eisenberg (&lt;a href="http://twitter.com/EisenbergEffect"&gt;@EisenbergEffect&lt;/a&gt;) – one of the brains behind &lt;a href="http://www.codeplex.com/caliburn"&gt;Caliburn&lt;/a&gt;, an Open Source Silverlight application framework.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.andybeaulieu.com/"&gt;Andy Beaulieu&lt;/a&gt; – have you played a Silverlight game?  If you have, it’s most likely been one of Andy’s :-)&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://blog.webjak.net/"&gt;Jordan Knight&lt;/a&gt; (&lt;a href="http://twitter.com/jakkaj"&gt;@jakkaj&lt;/a&gt;)– hailing from down under (is that phrase still used?), Jordan does a lot in the Melbourne area around Silverlight community and has a great blog of content.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/novecento/"&gt;Alessio Leoncini&lt;/a&gt; (&lt;a href="http://twitter.com/aleoncini"&gt;@aleoncini&lt;/a&gt;) – One of our Italian friends that has been doing a lot in working with Silverlight in Italy and spreading the good word! Grazie!&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://andrewtokeley.net/"&gt;Andrew Tokeley&lt;/a&gt; – Andrew was one of the developers behind the &lt;a href="http://buttercupreader.codeplex.com/"&gt;Buttercup Reader&lt;/a&gt;, a completely accessible Silverlight application which is now Open Source.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://silverlightspy.com"&gt;Koen Zwikstra&lt;/a&gt; (&lt;a href="http://twitter.com/kozw"&gt;@kozw&lt;/a&gt;) – Have you heard of Silverlight Spy, the indispensible Silverlight debugging tool!?  Koen is the brain behind it.&lt;/li&gt;
    &lt;li&gt;Qing Li is a new MVP in China that has been doing a great amount of work helping the community understand and learn Silverlight development.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Congratulations to all the new/renewed/moved Silverlight MVPs.  I look forward to seeing you at the MVP Summit soon!&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f2d296ea-6fcf-4f21-8946-2c029b540ca9" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;&lt;span class="tags"&gt;tags: &lt;a rel="tag" href="http://timheuer.com/blog/tags/silverlight/default.aspx"&gt;silverlight&lt;/a&gt;, &lt;a rel="tag" href="http://timheuer.com/blog/tags/mvp/default.aspx"&gt;mvp&lt;/a&gt;, &lt;a rel="tag" href="http://timheuer.com/blog/tags/riaservices/default.aspx"&gt;riaservices&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin: 0px; padding: 0px;" class="wlWriterHeaderFooter"&gt;&lt;hr /&gt;
&lt;div class="cc-license"&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution By license.&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://timheuer.com/blog/aggbug/14697.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/plkYs_keZlk0YPCjexHR1iaHli4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/plkYs_keZlk0YPCjexHR1iaHli4/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/plkYs_keZlk0YPCjexHR1iaHli4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/plkYs_keZlk0YPCjexHR1iaHli4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/timheuer-silverlight/~4/ESsZ5IOMDqQ" height="1" width="1"/&gt;</description>
            <dc:creator>Tim Heuer</dc:creator>
            <guid isPermaLink="false">http://timheuer.com/blog/archive/2010/01/04/new-january-2010-silverlight-mvp-awards.aspx</guid>
            <pubDate>Mon, 04 Jan 2010 19:00:01 GMT</pubDate>
            <wfw:comment>http://timheuer.com/blog/comments/14697.aspx</wfw:comment>
            <comments>http://timheuer.com/blog/archive/2010/01/04/new-january-2010-silverlight-mvp-awards.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://timheuer.com/blog/comments/commentRss/14697.aspx</wfw:commentRss>
            <trackback:ping>http://timheuer.com/blog/services/trackbacks/14697.aspx</trackback:ping>
        <feedburner:origLink>http://timheuer.com/blog/archive/2010/01/04/new-january-2010-silverlight-mvp-awards.aspx</feedburner:origLink></item>
    </channel>
</rss>
