<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Will Asrari ~ Bellingham, WA Web Development (ASP.NET, VB .NET, C#, SQL)</title><link>http://blog.willasrari.com</link><description>Personal blog, code samples, tutorials, and articles about ASP.NET, C#, and SQL!</description><copyright>Copyright (C) 2005-2006</copyright><ttl>5</ttl><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/WillAsrari" type="application/rss+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>Generic jQuery Function to Remove CSS Classes</title><description>&lt;P&gt;I've been using a lot of &lt;A href="http://jquery.com/"&gt;jQuery&lt;/A&gt; lately in a new project and am falling in love with it!&amp;nbsp; It is a wonder why I have never used it before but am glad I was kind of forced to learn it ;)&lt;/P&gt;
&lt;P&gt;As with anything new there is a bit of a learning curve.&amp;nbsp; The application I am working on boasts a large number of tabs for different sections of the site.&amp;nbsp; One of the requirements is to toggle the "active" tab via CSS class.&amp;nbsp; Easy right?&amp;nbsp; This was easy to do in vanilla JavaScript so it should be super-easy to do with jQuery.&amp;nbsp; It is!&lt;/P&gt;&lt;CODE&gt;&lt;B&gt;
&lt;P&gt;$(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;'#FooItem1'&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;).removeClass(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;'active'&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;);&lt;BR&gt;$(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;'#FooItem2'&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;).removeClass(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;'active'&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;);&lt;BR&gt;$(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;'#FooItem3'&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;).removeClass(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;'active'&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;);&lt;BR&gt;$(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;'#FooItem4'&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;).removeClass(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;'active'&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;);&lt;BR&gt;$(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;'#FooItem5'&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;).removeClass(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;'active'&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;);&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/CODE&gt;
&lt;P&gt;That works great but there is one caveat: adding new tabs.&amp;nbsp; If the requirements of the UI changed and we were to have to add a new tab (or 6 more) then we would have to not only change the view (or in this case partial view ;) ) but also the JavaScript functions dealing with these tabs.&amp;nbsp; Since all of our tabs are &lt;CODE&gt;UL&lt;/CODE&gt; with stylized &lt;CODE&gt;LI&lt;/CODE&gt;'s containing anchor tags I decided to create something like this:&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;function&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt; RemoveActiveClassFromListItemControlByID(controlID) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;"#"&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt; + controlID).children().each(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;function&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;).children(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;"a"&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;).removeClass(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;"active"&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;);});&lt;BR&gt;}&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/CODE&gt;
&lt;P&gt;Now this isn't &lt;EM&gt;that&lt;/EM&gt; generic since I have the "a" and "active" strings hard-coded.&amp;nbsp; In this case it works for us since all the tabs are the same format and all we really need is the id of the control.&amp;nbsp; This little function will enumerate the children of the control (in this case all &lt;CODE&gt;LI&lt;/CODE&gt;'s and then enumerate the &lt;CODE&gt;A&lt;/CODE&gt; children and remove the &lt;CODE&gt;active&lt;/CODE&gt; css class.&amp;nbsp; Simple.&amp;nbsp; To extend this to be even more generic you could do the following:&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;function&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt; RemoveClassNamesFromChildElementByControlID(controlID, childElement, className) {&lt;BR&gt;$(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;"#"&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt; + controlID).children().each(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;function&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;).children(childElement).removeClass(className);});&lt;BR&gt;}&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/CODE&gt;
&lt;P&gt;Here's an example of how you could use the function above.&amp;nbsp; Let's say that you want to enumerate all children in a &lt;CODE&gt;OL&lt;/CODE&gt; with an id of "fooList". Each children has a &lt;CODE&gt;span&lt;/CODE&gt; tag with a css class of &lt;CODE&gt;BAR&lt;/CODE&gt; and you want to reset all of them when a user clicks on a hyperlink.&amp;nbsp; This would be extremely simple:&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;a&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt; &lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;href&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;="javascript:(RemoveClassNamesFromChildElementByControlID('fooList', 'span', 'BAR'));"&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;CLICK HERE&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;a&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/CODE&gt;
&lt;P&gt;Easy.&amp;nbsp; I'm really starting to love this jQuery business.&lt;/P&gt;
&lt;P&gt;jQuery + MVC = love&lt;/P&gt;</description><link>http://www.willasrari.com/blog/generic-jquery-function-to-remove-css-classes/000334.aspx</link><pubDate>6/10/2009 3:10:42 PM</pubDate><author>Will Asrari</author></item><item><title>SQL Server 2008 Save Not Permitted Dialog Box</title><description>&lt;P&gt;I was creating some tables this evening in a SQL Server 2008 database this evening so that I could sandbox some MVC functionality for a current project.&amp;nbsp; I had designed the tables according to the tutorial only to find out that this wasn't the case.&amp;nbsp; I'll just log back in to SQL and make the necessary changes.&amp;nbsp; Easy.&lt;/P&gt;
&lt;P&gt;When I added the missing column I went ahead and reordered to match the same order of the tutorial because, well; I am a little OCD at times.&amp;nbsp; I remember doing this in the past pre-SQL 2008 with no trouble.&amp;nbsp; This time I was hit with this:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://i41.tinypic.com/vqtwn5.png"&gt;&lt;/P&gt;
&lt;P&gt;Weird.&amp;nbsp; Again, I had never seen this before so I was a bit surprised.&lt;/P&gt;
&lt;P&gt;According to &lt;A href="http://msdn.microsoft.com/en-us/library/bb895146.aspx"&gt;SQL Server 2008 Books Online&lt;/A&gt; this can be caused by any of the following:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Adding a new column to the middle of the table 
&lt;LI&gt;Dropping a column 
&lt;LI&gt;Changing column nullability 
&lt;LI&gt;Changing the order of the columns 
&lt;LI&gt;Changing the data type of a column&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Really?&amp;nbsp; These all seem like fairly common tasks when working within a database.&amp;nbsp; As odd as this may seem (maybe there is a good reason for this?), there is a very easy fix.&lt;/P&gt;
&lt;P&gt;From the &lt;STRONG&gt;Tools&lt;/STRONG&gt; menu click on &lt;STRONG&gt;Options&lt;/STRONG&gt;, expand &lt;STRONG&gt;Designers&lt;/STRONG&gt;, click on &lt;STRONG&gt;Table and Database Designers&lt;/STRONG&gt;.&amp;nbsp; Select or clear the &lt;STRONG&gt;Prevent saving changes that require table re-creation&lt;/STRONG&gt; option.&lt;/P&gt;
&lt;P&gt;Much better.&amp;nbsp; Back to work.&lt;/P&gt;</description><link>http://www.willasrari.com/blog/sql-server-2008-save-not-permitted-dialog-box/000333.aspx</link><pubDate>6/3/2009 12:49:46 AM</pubDate><author>Will Asrari</author></item><item><title>SQL 2008 and The Setup Failed to Read IIsMimeMap Table</title><description>&lt;P&gt;Decided to install SQL 2008 recently because of it being 2009 and all.&amp;nbsp; What an adventure.&amp;nbsp; Although not near as bad as upgrading from Vista Home Premium to Vista Ultimate, it sucked pretty bad.&lt;/P&gt;
&lt;P&gt;I downloaded the 120-day trial Developer Edition as a self-extracting executable because I didn't feel like burning a DVD / using Daemon Toolz.&amp;nbsp; The download was the smoothest part of this whole deal.&lt;/P&gt;
&lt;P&gt;From the installer screen I chose the Upgrade from SQL 2000 / 2005 option because I have SQL 2005 Developer Edition installed so this made the most sense.&amp;nbsp; Miserable fail.&amp;nbsp; I kept erroring out when trying to install SQL Reporting Services.&amp;nbsp; The exact error(s) escape me but I remember it having something to do with authentication and the report service.&amp;nbsp; Naturally I thought to manually stop and start the service to see if there was any issue.&amp;nbsp; Good thing because manually starting the service failed.&amp;nbsp; It then dawned on me that between the time I had initially installed SQL 2005 and that very instant I had changed my Windows password.&amp;nbsp; Right-click, 'Properties' and changed it to my current password, restart the service: SUCCESS!&lt;/P&gt;
&lt;P&gt;Now let's try upgrading again: FAIL!&lt;/P&gt;
&lt;P&gt;After hitting the Google fairly hard I read a couple of blog entries detailing how uninstalling SQL Server 2005 entirely from the Control Panel would remedy the situation.&amp;nbsp; I tried this and received the following error when attempting to uninstall SQL 2005 Reporting Services:&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="Failed to read IIsMimeMap table 01" src="http://i43.tinypic.com/205vxx5.png"&gt;&lt;/P&gt;
&lt;P&gt;Awesome.&amp;nbsp; Have no idea what this means so I searched Google for it.&amp;nbsp; Apparently no one else does either.&amp;nbsp; There were tons of suggestions as to how to go about remedy'ing this so I tried a couple.&amp;nbsp; These solutions ranged from reconfiguring Reporting Services to uninstalling and reinstalling IIS7.&amp;nbsp; I opted to try and reconfigure Reporting Services only to find that the configuration tools no longer existed on my machine seeing as how that was successfully uninstalled before receiving the error message above.&amp;nbsp; I then tried to uninstall again and received this error message.&lt;/P&gt;&lt;IMG alt="Failed to read IIsMimeMap table 02" src="http://i39.tinypic.com/j82j6d.png"&gt; 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Same error, different error code. Weird.&lt;/P&gt;
&lt;P&gt;The final solution was to install each component of SQL 2005 one-by-one from Control Panel.&amp;nbsp; As crazy as that sounds it actually ended up being successful.&lt;/P&gt;
&lt;P&gt;So, if you are getting these error messages try uninstalling each and every SQL 2005 component one-by-one and then do a clean install of SQL 2008.&amp;nbsp; It worked for me.&lt;/P&gt;</description><link>http://www.willasrari.com/blog/sql-2008-and-the-setup-failed-to-read-iismimemap-table/000332.aspx</link><pubDate>1/6/2009 1:27:40 PM</pubDate><author>Will Asrari</author></item><item><title>LAMP Developer Needed</title><description>&lt;P&gt;Checked an e-mail account that has apparently been exluded from my main Send/Receive group in Outlook today and found this e-mail in the Junk E-mail folder.&lt;/P&gt;
&lt;P&gt;Maybe I should use this to setup a rule...&lt;/P&gt;
&lt;P&gt;;)&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="LAMP Developer Needed" src="http://i36.tinypic.com/35asttu.png"&gt;&lt;/P&gt;
&lt;P&gt;I have learned a bunch of exciting things over the past couple of months but unfortunately it's proprietary and I can't blog about it! &lt;/P&gt;
&lt;P&gt;I was never one to blog about where I work or what projects I have been working or else I'd have a ton of new entries.&lt;/P&gt;</description><link>http://www.willasrari.com/blog/lamp-developer-needed/000331.aspx</link><pubDate>12/11/2008 9:14:08 PM</pubDate><author>Will Asrari</author></item><item><title>Microsoft Office Interop Outlook &amp; C# For Outlook Searches</title><description>&lt;P&gt;I had a need yesterday to query a bunch of Outlook e-mails: 44,743 to be exact.&amp;nbsp; This was the result of a clients mailing list account being setup incorrectly and we just found out about it!&amp;nbsp; An e-mail account was setup strictly for the mailing list and it was never properly setup as an Outlook account locally.&amp;nbsp; No big deal.&amp;nbsp; When the hosting provider contacted us to clean it up I noticed that there were a BUNCH of bad e-mail addresses (Return to sender, bad account, etc...).&amp;nbsp; At first I started to click on individual e-mails, copy the bad e-mail address to a .txt file, then search that folder for the same e-mail address and delete the results.&amp;nbsp; That takes FOOOOORRREEEEVVVVEEEEERRRRRRR.&amp;nbsp; Then I realized I could dork around with Outlook via a C# console application and harvest the e-mails and output them in a sorted Excel spreadsheet.&lt;/P&gt;
&lt;P&gt;Enter &lt;CODE&gt;Microsoft.Office.Core&lt;/CODE&gt; and &lt;CODE&gt;Microsoft.Office.Interop.Outlook&lt;/CODE&gt; namespaces.&amp;nbsp;I decided&amp;nbsp;it would be best to create a little&amp;nbsp;C# console application utilizing these namespaces to search the e-mail, write a&amp;nbsp;little regular expression&amp;nbsp;pattern (by write I mean copy &amp;amp; paste&amp;nbsp;one from the interwebs)&amp;nbsp;to parse out e-mail addresses, and add e-mail addresses that didn't have the host name or the reply e-mail account in it to a &lt;CODE&gt;List&amp;lt;string&amp;gt;&lt;/CODE&gt; (if it didn't already contain it!).&amp;nbsp; It was pretty easy.&lt;/P&gt;
&lt;P&gt;First:&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;using&lt;/FONT&gt; Outlook = Microsoft.Office.Interop.Outlook;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt; Microsoft.Office.Interop.Outlook;&lt;/P&gt;&lt;/FONT&gt;&lt;/CODE&gt;
&lt;P&gt;I'm not going to bore you with the entire application unless you really want it.&amp;nbsp; I'll just get you to the point where you can start to do &lt;EM&gt;stuff&lt;/EM&gt; with your e-mails.&lt;/P&gt;
&lt;P&gt;Now you need to instantiate your Outlook object.&lt;/P&gt;&lt;CODE&gt;
&lt;P&gt;Outlook.&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Application&lt;/FONT&gt; application = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Application&lt;/FONT&gt;();&lt;BR&gt;Outlook.&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;NameSpace&lt;/FONT&gt; nameSpace = application.GetNamespace(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"MAPI"&lt;/FONT&gt;);&lt;BR&gt;Outlook.&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;MAPIFolder&lt;/FONT&gt; mapiFolder = nameSpace.GetDefaultFolder(&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;OlDefaultFolders&lt;/FONT&gt;.olFolderJunk);&lt;/P&gt;&lt;/FONT&gt;&lt;/CODE&gt;
&lt;P&gt;It might be worth mentioning the olFolderJunk business you see there.&amp;nbsp; In the interest of time I didn't want to mess around with trying to navigate to the folder that I actually stored these e-mails in since I have a bunch of subfolders in Outlook due to using multiple accounts and a handful of rules and what-not.&amp;nbsp; So in the interest of time I moved all the e-mails to the junk folder since I could easily access it.&amp;nbsp; I think the correct syntax would be something like:&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;nameSpace.Folders[&lt;FONT color=#a52a2a&gt;"FOLDER"&lt;/FONT&gt;].Folders[&lt;FONT color=#a52a2a&gt;"SUB"&lt;/FONT&gt;].Folders[&lt;FONT color=#a52a2a&gt;"YOU_GET_IT"&lt;/FONT&gt;];&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Moving on.&amp;nbsp; Once you finally get access to your designated folder you need to start being able to do stuff with the items in that folder.&amp;nbsp; It's as easy as enumerating the, you guessed it; &lt;CODE&gt;MailItem&lt;/CODE&gt; objects a la:&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;foreach&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;MailItem&lt;/FONT&gt; mailItem &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; mapiFolder.Items)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008000&gt;// do stuff&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;/CODE&gt;
&lt;P&gt;Easy.&amp;nbsp; The properties are fairly braindead as well.&amp;nbsp; &lt;A href="http://msdn.microsoft.com/en-us/library/bb176688.aspx"&gt;MailItem Object Members&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Have fun.&amp;nbsp; I'll probably use this in the future as well.&lt;/P&gt;</description><link>http://www.willasrari.com/blog/microsoft-office-interop-outlook--c-for-outlook-searches/000330.aspx</link><pubDate>10/21/2008 1:32:06 PM</pubDate><author>Will Asrari</author></item><item><title>Dilbert &amp; Agile Programming</title><description>&lt;p&gt;Just saw this cartoon this morning. Late pass I'm sure ;)&lt;/p&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 494px; HEIGHT: 203px" height=182 alt="Dilbert &amp;amp; Agile Programming" src="http://i37.tinypic.com/2wrn985.gif" width=460&gt;&lt;/P&gt;</description><link>http://www.willasrari.com/blog/dilbert--agile-programming/000329.aspx</link><pubDate>10/8/2008 2:50:00 PM</pubDate><author>Will Asrari</author></item><item><title>Silverlight ObservableCollection Bug Will Be the Death of Me</title><description>&lt;P mce_keep="true"&gt;&lt;STRONG&gt;BUG:&lt;/STRONG&gt; Items are sorted correctly sometimes, other times not so much.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;FREQUENCY: &lt;/STRONG&gt;Intermittent, never when debugging and stepping through everything, always seems to happen when I'm not.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;RATING:&lt;/STRONG&gt; Probably the most painful bug I've worked on in some time.&lt;/P&gt;
&lt;P mce_keep="true"&gt;So I've got an ItemsControl in a custom XAML user control.&amp;nbsp; All this does is display an IEnumerable&amp;lt;T&amp;gt; of video items.&amp;nbsp; Simple.&amp;nbsp; To provide a better user experience we implemented an ObservableCollection&amp;lt;T&amp;gt; as the source of the ItemsControl with a Collection_Changed event so we can add one item at a time to the collection so as to not wait for the entire collection to populate before displaying to the user.&amp;nbsp; Now we're able&amp;nbsp;to display the first 2 items and the scrollbar height shrinks as items are being added.&amp;nbsp; It's a nice user-experience.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Anyway, so for the implementation.&amp;nbsp; When the VideoRetrieveComplete event fires (after making a web service request for the data) we call the UpdateVideoCollection method.&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#2b91af&gt;
&lt;P&gt;UIThread&lt;/FONT&gt;.Run(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;delegate&lt;BR&gt;&lt;/FONT&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;videoListControl.UpdateVideos(args.VideoItems);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;videoListControl.itemsControlVideoListing.DataContext = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;VideoItem&lt;/FONT&gt;();&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/CODE&gt;
&lt;P&gt;Notice that we're doing this in the UI Thread.&amp;nbsp; The code above is located in our Controller class.&amp;nbsp; The args.VideoItems is an IEnumerable&amp;lt;VideoItem&amp;gt; and they are sorted in the order they need to be in.&amp;nbsp; I have verified this time and time again with painful debugging.&lt;/P&gt;
&lt;P&gt;Now time for VideoList controls properties, objects, and methods:&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; CurrentPageIndex { &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt;; }&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;ObservableCollection&lt;/FONT&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;VideoItem&lt;/FONT&gt;&amp;gt; ObservableCollection { &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt;; }&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;List&lt;/FONT&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;VideoItem&lt;/FONT&gt;&amp;gt; VideoItems = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;List&lt;/FONT&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;VideoItem&lt;/FONT&gt;&amp;gt;();&lt;/P&gt;&lt;/FONT&gt;&lt;/CODE&gt;
&lt;P&gt;Constructor where everything is initialized.&amp;nbsp; Probably important to include this.&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;public&lt;/FONT&gt; VideoList()&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;CurrentPageIndex = 0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitializeComponent();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ObservableCollection = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;ObservableCollection&lt;/FONT&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;VideoItem&lt;/FONT&gt;&amp;gt;();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;itemsControlVideoListing.ItemsSource = ObservableCollection;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ObservableCollection.CollectionChanged += CollectionChanged;&lt;BR&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;/CODE&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; UpdateVideos(&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;List&lt;/FONT&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;VideoItem&lt;/FONT&gt;&amp;gt; videoItems)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;UIThread&lt;/FONT&gt;.Run(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;delegate&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VideoItems.AddRange(videoItems);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ObservableCollection.Clear();&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&lt;/FONT&gt; (VideoItems != &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; VideoItems.Count &amp;gt; 0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VideoItem&lt;/FONT&gt; videoItem = VideoItems[0];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VideoItems.RemoveAt(0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ObservableCollection.Add(videoItem);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;BR&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;/CODE&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;void&lt;/FONT&gt; CollectionChanged(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;NotifyCollectionChangedEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (VideoItems.Count &amp;gt; 0)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UIThread&lt;/FONT&gt;.Run(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;delegate&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VideoItem&lt;/FONT&gt; videoItem = VideoItems[0];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VideoItems.RemoveAt(0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ObservableCollection.Add(videoItem);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;BR&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;/CODE&gt;
&lt;P&gt;The reason for removing an item, and then re-adding it is that this is the only way we can get our Converters to fire off, otherwise the collection hasn't changed and UI elements don't update.&amp;nbsp; For example, switching between tabs the user can add videos to their playlist.&amp;nbsp; Each time the tabs are selected and the VideoListing populates the VideoItems within that listing needs to show either an ADD / DELETE FROM PLAYLIST button depending on whether or not the item is in the playlist.&amp;nbsp; If there's another way to get those Converters to fire off I'm all ears.&lt;/P&gt;
&lt;P&gt;So the problem is that more often than not the videos, which come in sorted correctly, are not always displayed that way.&amp;nbsp; For example, if I have&amp;nbsp;5 videos with dates 10/1/2008, 10/1/2008, 9/30/2008, 9/29/2008, 9/28/2008 sometimes the sort will be:&lt;/P&gt;
&lt;P&gt;10/1/2008&lt;BR&gt;9/30/2008&lt;BR&gt;9/29/2008&lt;BR&gt;9/28/2008&lt;BR&gt;10/1/2008&lt;/P&gt;
&lt;P&gt;or:&lt;/P&gt;
&lt;P&gt;9/30/2008&lt;BR&gt;9/29/2008&lt;BR&gt;10/1/2008&lt;BR&gt;9/28/2008&lt;BR&gt;10/1/2008&lt;/P&gt;
&lt;P&gt;You get the idea.&amp;nbsp; Could it be that we are not implementing this correctly?&amp;nbsp; Do we need to rebind the ItemsControl or is this correct?&lt;/P&gt;
&lt;P&gt;I've been working on this bug for a day and a half now and have nothing.&amp;nbsp; I'm sure it's probably something stupid.&lt;/P&gt;
&lt;P&gt;I'm all ears if you have anything. ANYTHING!&lt;/P&gt;
&lt;P&gt;Oh, should probably add that if I page to the next listing of videos and then back it'll remedy itself!&lt;/P&gt;</description><link>http://www.willasrari.com/blog/silverlight-observablecollection-bug-will-be-the-death-of-me/000328.aspx</link><pubDate>10/2/2008 5:37:11 PM</pubDate><author>Will Asrari</author></item><item><title>What's Wrong With This Picture?</title><description>&lt;P&gt;Tried to debug a new Silverlight application today.&amp;nbsp; By new I mean it was hosted in a different web project then the one I had been previously working on due to the fact that I needed to test some stuff locally.&amp;nbsp; I was trying for about half an hour to get this thing to debug.&amp;nbsp; The application would start to load up and then just hang on the loading animation.&amp;nbsp; A co-worker told me to make sure I had the Silverlight debugger checkbox checked.&amp;nbsp; I then go into the appropriate property tab and am greeted with this:&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="what's wrong with this picture? (image)" src="http://i37.tinypic.com/2ibndrc.png"&gt;&lt;/P&gt;
&lt;P&gt;I remember this debugger option used to be located in the appropriate Debuggers group box.&amp;nbsp; Apparently when I performed my Visual Studio 2008 and .NET Framework updates my Visual Studio 2008 UI ended up getting mutated.&lt;/P&gt;
&lt;P&gt;Very strange.&lt;/P&gt;</description><link>http://www.willasrari.com/blog/whats-wrong-with-this-picture/000327.aspx</link><pubDate>10/1/2008 5:42:23 PM</pubDate><author>Will Asrari</author></item><item><title>Way to Go Vista File Transfers!</title><description>&lt;P&gt;Better grab a lunch, or 9.&lt;/P&gt;
&lt;P&gt;&lt;img src="http://i35.tinypic.com/2vbv502.png" /&gt;&lt;/P&gt;</description><link>http://www.willasrari.com/blog/way-to-go-vista-file-transfers/000326.aspx</link><pubDate>9/18/2008 5:54:28 PM</pubDate><author>Will Asrari</author></item><item><title>The Zune Update Totally Sucks</title><description>&lt;P&gt;Updated the Zune application software this morning at about 7:00am.&amp;nbsp; Since I had no choice in the matter, I went ahead and did it ;)&lt;/P&gt;
&lt;P&gt;Wow.&amp;nbsp; Talk about a change... for the worst.&amp;nbsp; The application seems to lag a lot even when I have nothing else open.&amp;nbsp; If I try to listen to it with Visual Studio 2008, SQL Management Studio, and Outlook forget about it.&amp;nbsp; Too bad because those are all the things I use on a daily basis for work.&amp;nbsp; That's also when I listen to the most of my music.&lt;/P&gt;
&lt;P&gt;Luckily I've got 4 stereos in the house wired up to my Zune player so depending on where in the house I'm working (laptop) I can listen to my music.&amp;nbsp; I've also got 2 30GB zunes for this and am thinking of buying another when the new line is released (if it hasn't been already).&lt;/P&gt;
&lt;P&gt;Like any Microsoft product there will be a patch released for the Zune software if enough people are experiencing these symptoms and at the end of the day I'm still glad I don't use any Apple products.&lt;/P&gt;
&lt;P&gt;Does anyone else find that the Zune software responds a lot like a poorly-written RIA (rich internet application)?&amp;nbsp; To me it responds like Silverlight applications do when they are first written; before any story board animations / overlays are added to let the user know that SOMETHING is actually happening.&amp;nbsp; Just a thought....&lt;/P&gt;
&lt;P&gt;If anyone from Zune reads this you might want to update the Zune Card widget (see left navigation column) to utilize Silverlight instead of Flash.&amp;nbsp; It would probably be a good look since, you know; you're Microsoft and you have this new technology you want to promote.&lt;/P&gt;
&lt;P&gt;Looks like I'll try this again later.&amp;nbsp; Maybe rebooting (again) will help.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;UPDATE&lt;/STRONG&gt;&lt;BR&gt;Unresponsiveness of the application aside, the hardware update seems to be pretty sweet! Now I can play games while listening to tasty licks by The Chameleons.&amp;nbsp; The wireless feature is pretty sweet. I wonder if I &lt;EM&gt;have&lt;/EM&gt;&amp;nbsp;to be at one of 9,800 McDonald's restaurants to be able to download?&amp;nbsp; I'd guess not...&lt;/P&gt;</description><link>http://www.willasrari.com/blog/the-zune-update-totally-sucks/000325.aspx</link><pubDate>9/18/2008 12:42:02 PM</pubDate><author>Will Asrari</author></item><item><title>No Generic List FindAll Method in Silverlight 2 Beta 2</title><description>&lt;P&gt;Came across a need this morning to use the &lt;A href="http://msdn.microsoft.com/en-us/library/fh1w7y8z.aspx"&gt;FindAll&lt;/A&gt; method. To my dismay it wasn't there.&amp;nbsp; I know that Silverlight uses a subset of the .NET Framework but the System.Collections.Generic namespace is definitely there.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="System.Collections.Generic namespace in Silverlight 2 Beta 2" src="http://i36.tinypic.com/20fbvpk.png"&gt;&lt;/P&gt;
&lt;P&gt;You can clearly see that I'm using the namespace in the above image.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="ReSharper List.FindAll Error Silverlight 2 Beta 2" src="http://i34.tinypic.com/35bcnxv.png"&gt;&lt;/P&gt;
&lt;P&gt;Here you can see that ReSharper's background compiling caught it right away. For a second there I thought: "You know, maybe ReSharper is full of shit. This can't be right."&amp;nbsp;I tried to compile to make sure (which was the case with the version 4 nightly builds).&lt;/P&gt;
&lt;P&gt;
&lt;BLOCKQUOTE&gt;&lt;CODE&gt;'System.Collections.Generic.List&lt;STRING&gt;' does not contain a definition for 'FindAll' and no extension method 'FindAll' accepting a first argument of type 'System.Collections.Generic.List&lt;STRING&gt;' could be found (are you missing a using directive or an assembly reference?)&lt;/CODE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Weird.&lt;/P&gt;</description><link>http://www.willasrari.com/blog/no-generic-list-findall-method-in-silverlight-2-beta-2/000324.aspx</link><pubDate>9/4/2008 11:38:25 AM</pubDate><author>Will Asrari</author></item><item><title>Hacking Silverlight, ObservableCollections, &amp; Scarface</title><description>&lt;P&gt;In working with Silverlight lately I've found that there's not a lot of documentation, especially for more complex functionality.&amp;nbsp; More times than not I find myself sort of scratching my head and wondering if the solution provided is really the best way to accomplish a certain task.&lt;/P&gt;
&lt;P&gt;Let's say you're creating an application that serves up articles (i.e. for a library search application).&amp;nbsp; You have an ItemsControl that uses a article item control as it's DataTemplate. The ItemsSource of this ItemsControl is an &lt;A href="http://msdn.microsoft.com/en-us/library/ms668613.aspx"&gt;ObservableCollection&lt;/A&gt;&amp;lt;T&amp;gt; of type, I don't know; SearchResult.&amp;nbsp; The DataContext for your ItemsControl is, you guessed it; SearchResult.&lt;/P&gt;
&lt;P&gt;Now say you have, above your search results, a little panel that provides filtering.&amp;nbsp; The filters are List&amp;lt;T&amp;gt; -bound that expand&amp;nbsp;when clicked (and roll up when done).&amp;nbsp;In keeping with our library search application let's pretend the filters are by year (Last Week, Last Month, Last Year, Last 2 Years, etc....) and by topic (Sociology, Psychology, Political Science, Computer Science, etc..).&amp;nbsp; The year filter allows you to select only one (the selection of a listitem triggers the list to hide and the listing of articles below to refresh).&amp;nbsp; The user can select any number of topics.&amp;nbsp; Each listitem in the topic filter has an overlay that provides button functionality such as "SELECT / DESELECT, CLEAR ALL, DONE".&amp;nbsp; When you select an item, it highlights that row.&amp;nbsp; DESELECT unhighlights the row.&amp;nbsp; DONE means you are done selecting and rolls (hides) the list back up.&amp;nbsp; CLEAR ALL&amp;nbsp;is the problem child.&amp;nbsp; Behind the scenes we are storing the id for the listitem in a List&amp;lt;T&amp;gt;.&amp;nbsp; We have easy access to these on MouseLeftButtonUp due to our DataContext being set earlier.&amp;nbsp; Clicking done will trigger the enumeration of this list to build our query and then that is sent to a web service.&amp;nbsp; There is a subscription to the ArticleRefresh trigger and the ItemsControl listing is updated. Easy.&lt;/P&gt;
&lt;P&gt;The issue is the unhighlighting of all the listitems&amp;nbsp;in the topic list upon clicking CLEAR ALL.&amp;nbsp; That sounds really easy (and it may very well be!) but I haven't seemed to figure out an efficient way to do this.&lt;/P&gt;
&lt;P&gt;In ASP.NET it was extremely easy to enumerate all the controls from within, let's say a Repeater.&amp;nbsp; You have in your ItemTemplate a control that you want to repeat.&amp;nbsp; You could write a little bit of code to enumerate every RepeaterItem and alter the display of certain text and controls within that Repeater.&amp;nbsp; It's extremely easy.&lt;/P&gt;
&lt;P&gt;In Silverlight you don't have that luxury.&amp;nbsp; Well, you're supposed to have an easier way of doing business but I haven't yet found it.&amp;nbsp; By the way, I'm talking about Silverlight 2 Beta 2.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;My first attempt at this was to create a Converter that sets the IsSelected property based on the presence of the topic's id in the List&amp;lt;T&amp;gt; it is bound to.&amp;nbsp; I get a BAD_PROPERTY_VALUE error when that is attempted.&lt;/P&gt;
&lt;P&gt;The next attempt was creating an event handler for the Loaded event of my topic filter control that will cast the sender to the filter object, check to see if the id of the objects DataContext is contained in the List&amp;lt;T&amp;gt;.&amp;nbsp; If it is, highlight, else, no highlight.&amp;nbsp; This works the first time the application is loaded but not on subsequent list views.&amp;nbsp; Reason being the use of the ObservableCollection&amp;lt;T&amp;gt;.&amp;nbsp; The collection itself hasn't changed, so no rebinding needs to occur.&amp;nbsp; This is probably a good thing.&amp;nbsp; What if the collection had 100's, 1000's of items?&amp;nbsp; Makes for quick UI responsiveness.&lt;/P&gt;
&lt;P&gt;The only way I have found to accomplish this is instantiating an IEnumerable object, setting its collection to that of the ObservableCollection&amp;lt;T&amp;gt; that the filter list is bound to (public property), then setting said public property&amp;nbsp;to this IEnumerable object that is, in a sense, the same exact thing.&amp;nbsp; This way the collection has changed (sort of), and the &lt;A href="http://msdn.microsoft.com/en-us/library/ms653375.aspx"&gt;CollectionChanged&lt;/A&gt;&amp;nbsp;event now gets fired.&amp;nbsp; The list is re-bound and we start from scratch with no highlighted rows.&lt;/P&gt;
&lt;P&gt;That seems like kind of a hack to me.&amp;nbsp; Anyone else care to chime in?&lt;/P&gt;
&lt;P&gt;I'll try to get a code sample but this is one of those things that I had to voice out first.&amp;nbsp; I hope it's not too hard to follow.&amp;nbsp;&amp;nbsp; For some reason today I had Paul Engemann's "Push it to the Limit" in my head while trying out all sorts of different ways of accomplishing this task.&amp;nbsp; I kind of laughed to myself at the idea of a programming montage set to this song (kind of like in the South Park episode with the skiing contest. And, of course, &lt;A href="http://en.wikipedia.org/wiki/Scarface_(1983_film)"&gt;Scarface&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;For the first time EVER on this blog, musical accompaniment:&lt;/P&gt;
&lt;P&gt;&lt;EMBED src=http://www.youtube.com/v/hs510bgQa2I&amp;amp;hl=en&amp;amp;fs=1 width=425 height=344 type=application/x-shockwave-flash allowfullscreen="true"&gt;&lt;/P&gt;</description><link>http://www.willasrari.com/blog/hacking-silverlight-observablecollections--scarface/000323.aspx</link><pubDate>8/21/2008 10:18:26 PM</pubDate><author>Will Asrari</author></item><item><title>JSON Serialization with Silverlight Isolated Storage For the Win</title><description>&lt;P&gt;I'm going to post this to help others who are killing themselves trying to figure out IsolatedStorage in Silverlight 2 Beta 2.&amp;nbsp; Ordinarily I'd post stuff like this for my own reference but I have had it beaten into my head for the past 12 straight hours.&lt;/P&gt;
&lt;P&gt;The &lt;A href="http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragefile.aspx"&gt;IsolatedStorageFile&lt;/A&gt; class abstracts the virtual file system for isolated storage.&amp;nbsp; It can be used to store stuff such as application settings or user login information.&amp;nbsp; The application settings being persisted on a user's machine were exactly what we needed to accomplish so that led me down this road.&amp;nbsp; I read numerous blogs, watched countless videos, and did endless searching and finally crafted my solution as a hodge-podge of all of them!&lt;/P&gt;
&lt;P&gt;First, what didn't work.&lt;/P&gt;
&lt;P&gt;Channel 9 had a video on "how easy it is to persist user application settings" using IsolatedStorage.&amp;nbsp; Their solution consisted of the following:&lt;/P&gt;&lt;CODE&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;LocalStorageHelper&lt;BR&gt;&lt;/FONT&gt;{&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;const&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; KEY = &lt;/FONT&gt;&lt;FONT color=#a31515&gt;"FOO"&lt;/FONT&gt;;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static object&lt;/FONT&gt; RetrieveObjectFromLocalStorage()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageSettings&lt;/FONT&gt;.ApplicationSettings.Contains(KEY))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageSettings&lt;/FONT&gt;.ApplicationSettings[KEY];&lt;/FONT&gt;&lt;/FONT&gt; 
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null&lt;/FONT&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; UpdateLocalStorageObject(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; value)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageSettings&lt;/FONT&gt;.ApplicationSettings.Contains(KEY))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageSettings&lt;/FONT&gt;.ApplicationSettings[KEY] = value;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageSettings&lt;/FONT&gt;.ApplicationSettings.Add(KEY, value);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/CODE&gt;
&lt;P&gt;Simple enough.&amp;nbsp; The video presenter did all sorts of cool things like shut down the browser, open it back up, press F5 repeatedly and the storage still contained the user data.&amp;nbsp; I'm guessing this solution worked flawlessly in Beta 1.&amp;nbsp; I also had to add the checks for whether or not the ApplicationSettings contained the specified key.&amp;nbsp; Needless to say this implementation isn't very reliable.&lt;/P&gt;
&lt;P&gt;It was then that I started looking into JSON and other storage options.&amp;nbsp; I remember in .NET 2.0 I was used to serializing objects into XML and thought I would take this route.&amp;nbsp; This was easier said than done because Silverlight is using a subset of the .NET Framework and the XML Serialization namespace didn't make it.&amp;nbsp; (NOTE: I could've used Linq XML but it was an after thought!).&lt;/P&gt;
&lt;P&gt;Enter the &lt;A href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer.aspx"&gt;DataContractJsonSerializer&lt;/A&gt; class.&amp;nbsp; Since we are only given a default storage of 1MB (more can be requested but the end-user has the option of shutting you down) JSON is a likely candidate since it isn't as verbose as XML.&amp;nbsp; A simple string written in a text file within the file store is more than sufficient enough to give us an instance of the object which holds the properties we want to persist.&lt;/P&gt;
&lt;P&gt;Some code for converting an object to JSON string and vice-versa.&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; ConvertObjectToJsonString(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; input)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;MemoryStream&lt;/FONT&gt; memoryStream = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;MemoryStream&lt;/FONT&gt;())&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;DataContractJsonSerializer&lt;/FONT&gt; dataContractJsonSerializer = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;DataContractJsonSerializer&lt;/FONT&gt;(input.GetType());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataContractJsonSerializer.WriteObject(memoryStream, input);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memoryStream.Position = 0;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;StreamReader&lt;/FONT&gt; streamReader = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;StreamReader&lt;/FONT&gt;(memoryStream))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; streamReader.ReadToEnd();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;catch&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;InvalidDataContractException&lt;/FONT&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;.Empty;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; T ConvertJsonStringToObject&amp;lt;T&amp;gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; json)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;MemoryStream&lt;/FONT&gt; memoryStream = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;MemoryStream&lt;/FONT&gt;())&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;byte&lt;/FONT&gt;[] bytes = &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Encoding&lt;/FONT&gt;.Unicode.GetBytes(json);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memoryStream.Write(bytes, 0, bytes.Length);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memoryStream.Position = 0;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataContractJsonSerializer&lt;/FONT&gt; dataContractJsonSerializer = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;DataContractJsonSerializer&lt;/FONT&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(T));&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; (T)dataContractJsonSerializer.ReadObject(memoryStream);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;catch&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;SerializationException&lt;/FONT&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;default&lt;/FONT&gt;(T);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/CODE&gt;
&lt;P&gt;You might notice the &lt;A href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.invaliddatacontractexception.aspx"&gt;InvalidDataContractException&lt;/A&gt; I am catching above.&amp;nbsp; Like with XML Serialization you want to mark a class &amp;amp; properties as Serializable.&amp;nbsp; If you don't you won't be able to serialize it.&amp;nbsp; Hence the catch block.&amp;nbsp; Here's an example of a serializable class:&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;using&lt;/FONT&gt; System.Runtime.Serialization;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;namespace&lt;/FONT&gt; LocalStorage.Objects&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;DataContract&lt;/FONT&gt;]&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;UserAccount&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;DataMember&lt;/FONT&gt;] &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; EmailAddress { &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt;; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;DataMember&lt;/FONT&gt;] &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Password { &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt;; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;/CODE&gt;
&lt;P&gt;I'll show an example of how to store the user account in a second.&amp;nbsp; First how to open / create this in isolated storage.&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; SaveDataToLocalStorage(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; data, &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; filename)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageFile&lt;/FONT&gt; isolatedStorageFile = &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageFile&lt;/FONT&gt;.GetUserStoreForApplication())&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (!isolatedStorageFile.FileExists(filename))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageFileStream&lt;/FONT&gt; isolatedStorageFileStream = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageFileStream&lt;/FONT&gt;(filename, &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;FileMode&lt;/FONT&gt;.Create, isolatedStorageFile))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;StreamWriter&lt;/FONT&gt; streamWriter = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;StreamWriter&lt;/FONT&gt;(isolatedStorageFileStream))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;streamWriter.Write(data);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageFileStream&lt;/FONT&gt; isolatedStorageFileStream = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageFileStream&lt;/FONT&gt;(filename, &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;FileMode&lt;/FONT&gt;.Open, isolatedStorageFile))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;StreamWriter&lt;/FONT&gt; streamWriter = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;StreamWriter&lt;/FONT&gt;(isolatedStorageFileStream))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;streamWriter.Write(data);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;catch&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageException&lt;/FONT&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; RetrieveDataFromLocalStorage(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; filename)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageFile&lt;/FONT&gt; isolatedStorageFile = &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageFile&lt;/FONT&gt;.GetUserStoreForApplication())&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (!isolatedStorageFile.FileExists(filename))|&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;.Empty;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;using&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageFileStream&lt;/FONT&gt; isolatedStorageFileStream = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageFileStream&lt;/FONT&gt;(filename, &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;FileMode&lt;/FONT&gt;.Open, isolatedStorageFile))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;StreamReader&lt;/FONT&gt; streamReader = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;StreamReader&lt;/FONT&gt;(isolatedStorageFileStream))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; streamReader.ReadToEnd();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;catch&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IsolatedStorageException&lt;/FONT&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;.Empty;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;/CODE&gt;
&lt;P&gt;I apologize for the mess but those are some pretty lengthy class names and descriptive variable names 8^)&lt;/P&gt;
&lt;P&gt;So now how to use:&lt;/P&gt;&lt;CODE&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;// instantiate our user&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;UserAccount&lt;/FONT&gt; user = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;UserAccount&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EmailAddress =&amp;nbsp;&lt;FONT color=#a52a2a&gt;"asdf@asdf.asdf"&lt;/FONT&gt;,&amp;nbsp;&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Password = &lt;/FONT&gt;&lt;FONT color=#a31515&gt;"stupid"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;};&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;// convert to JSON string&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; json = ConvertObjectToJsonString(user);&lt;BR&gt;SaveDataToLocalStorage(json, &lt;/FONT&gt;&lt;FONT color=#a31515&gt;"UserAccount.txt"&lt;/FONT&gt;);&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;// convert back to UserAccount&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; json = RetrieveDataFromLocalStorage(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"UserAccount.txt"&lt;/FONT&gt;);&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (!&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;.IsNullOrEmpty(json))&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;UserAccount&lt;/FONT&gt; account = ConvertJsonStringToObject&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;UserAccount&lt;/FONT&gt;&amp;gt;(json);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#008000&gt;// do stuff with userAccount here...&lt;BR&gt;&lt;/FONT&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;/CODE&gt;
&lt;P&gt;Now the user can be persisted on each site visit.&amp;nbsp; If you wanted to store the email address and password you could log your user in when they visit the application.&amp;nbsp; Think "remember me" checkbox or something similar.&amp;nbsp; Another good use would be to serialize the RSS categories and only display those articles from within your silverlight application.&lt;/P&gt;
&lt;P&gt;The possibilities are endless.&amp;nbsp; Remember that this information is stored with the client in their AppData folder so don't put anything &lt;EM&gt;too&lt;/EM&gt; private in there ;)&lt;/P&gt;
&lt;P&gt;Easy.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;UPDATE&lt;BR&gt;&lt;/STRONG&gt;If this is a little too cluttered for you to read might I suggest viewing the RSS &lt;A href="http://feeds.feedburner.com/WillAsrari"&gt;feed&lt;/A&gt;.&lt;/P&gt;</description><link>http://www.willasrari.com/blog/json-serialization-with-silverlight-isolated-storage-for-the-win/000322.aspx</link><pubDate>8/19/2008 11:21:45 PM</pubDate><author>Will Asrari</author></item><item><title>Silverlight Databinding and Interaction with Controls</title><description>&lt;P&gt;Busy, busy with Silverlight lately.&amp;nbsp; I'm starting to really enjoy it and am learning a ton.&amp;nbsp; It's still so new to me that I don't know if I'm doing everything correctly but I am getting stuff to work ;)&lt;/P&gt;
&lt;P&gt;The biggest issue I've had with Silverlight lately is databinding and interacting with the bound data.&amp;nbsp; For example, with ASP.NET you can bind a &lt;CODE&gt;List&amp;lt;Foo&amp;gt;&lt;/CODE&gt; to a &lt;CODE&gt;Repeater&lt;/CODE&gt; and implement a method for &lt;CODE&gt;ItemDataBound&lt;/CODE&gt; event that wires up each of the hyperlinks, buttons, etc... to perform certain actions when each Repeater item is databound.&amp;nbsp; In Silverlight you do not have this luxury.&amp;nbsp; The more I work with Silverlight the more I realize that you don't need this.&lt;/P&gt;
&lt;P&gt;The way I have been working with Silverlight is the same as working with ASP.NET in that I am a big fan of encapsulation of functionality.&amp;nbsp; This means modularizing a XAML control with a C# code-behind much like an ASCX in ASP.NET.&amp;nbsp; Let's say you have 2 controls: Article, and ArticleList.&amp;nbsp; ArticleList is simply an ItemsControl of Article's. Simple.&amp;nbsp; Here is the XAML:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ArticleListing.xaml&lt;/STRONG&gt;&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#a31515&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;StackPanel&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; x&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;Name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="stackPanelArticleListing"&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;ItemsControl&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; x&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;Name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="itemsControlArticleListing"&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;ItemsControl.ItemTemplate&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;DataTemplate&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;Controls&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;FONT color=#a31515&gt;Article&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; x&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;Name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="article" /&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a31515&gt;DataTemplate&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a31515&gt;ItemsControl.ItemTemplate&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a31515&gt;ItemsControl&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a31515&gt;StackPanel&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&amp;nbsp;&lt;/CODE&gt; &lt;/P&gt;
&lt;P&gt;Simple enough. All the binding syntax is in the Article.xaml.&amp;nbsp; In the Article.xaml I have a TextBox called "textArticle" that displays the entire article.&lt;/P&gt;
&lt;P&gt;What if I have a button in my Article control that, when clicked, displays the full article in an ArticleViewer control?&amp;nbsp; It's actually pretty easy if you set the &lt;A href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.datacontext(VS.95).aspx"&gt;DataContext&lt;/A&gt; of the ItemsControl control.&amp;nbsp; I've got another Silverlight Class Library as part of my solution and I've got a class called Article.&amp;nbsp; Article looks like this:&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Article&lt;BR&gt;&lt;/FONT&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Guid&lt;/FONT&gt; ArticleId { &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt;; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Author { &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt;; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Body { &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt;; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Introduction { &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt;; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;DateTime&lt;/FONT&gt; PublishDate { &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt;; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; PublishDateShort { &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt;; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; AuthorUrl { &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt;; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; AuthorImageUrl { &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt;; }&lt;BR&gt;&lt;/FONT&gt;}&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;So when I go to bind my List&amp;lt;Article&amp;gt; to the ItemsControl I would do this:&lt;/P&gt;&lt;CODE&gt;
&lt;P&gt;itemsControlArticleListing.DataContext = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; ArticleLibrary.&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Article&lt;/FONT&gt;();&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;var&lt;/FONT&gt;&amp;nbsp;results = ArticleLibrary.&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Article&lt;/FONT&gt;.RetrieveAllArticles();&lt;BR&gt;itemsControlArticleListing.ItemsSource = results;&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;So now in my Article control I can get the current DataContext by way of the following:&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#2b91af&gt;
&lt;P&gt;TextBlock&lt;/FONT&gt; textBlock = sender &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;TextBlock&lt;/FONT&gt;;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (textBlock != &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;var&lt;/FONT&gt; &lt;/FONT&gt;article = textBlock.DataContext &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; ArticleLibrary.&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Article&lt;/FONT&gt;;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&lt;/FONT&gt; (article != &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;// set another control's text property to article stuff :D&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;}&lt;BR&gt;}&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;So I set a breakpoint and you can see that my article object above won't be null:&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="Article != null" src="http://i34.tinypic.com/168zewp.png"&gt;&lt;/P&gt;
&lt;P&gt;You can also see that I was able to get the exact object that I clicked on.&amp;nbsp; Well, you really can't &lt;EM&gt;see&lt;/EM&gt; it because of the lack of screen grabs but take my word that this is the one that I clicked on.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="Article object local information" src="http://i35.tinypic.com/1fvack.png"&gt;&lt;/P&gt;
&lt;P&gt;Awesome right?&lt;/P&gt;
&lt;P&gt;Sorry if this post is all over the place.&amp;nbsp; It's been a work in progress and I've been adding snippets here and there in between work!&lt;/P&gt;</description><link>http://www.willasrari.com/blog/silverlight-databinding-and-interaction-with-controls/000321.aspx</link><pubDate>7/30/2008 9:04:20 PM</pubDate><author>Will Asrari</author></item><item><title>So I'm Zuning Now</title><description>&lt;P&gt;I've had a Zune for a little while now and am just getting around to the social side of things.&amp;nbsp; I'm a Microsoft geekboy for life so that's why I didn't get an iPod.&lt;/P&gt;
&lt;P&gt;Peep&amp;nbsp; my uber-cool Zune username and slick Zune Card gadget on the left.&lt;/P&gt;
&lt;P&gt;Feel free to add me to your social if you're a Zuner as well. :)&lt;/P&gt;</description><link>http://www.willasrari.com/blog/so-im-zuning-now/000320.aspx</link><pubDate>7/18/2008 8:18:10 PM</pubDate><author>Will Asrari</author></item><item><title>Using Converters for Conditional Silverlight Databinding</title><description>&lt;P&gt;&lt;A href="/blog/is-there-a-conditional-syntax-for-silverlight-ui-databinding/000318.aspx"&gt;Yesterday&lt;/A&gt;&amp;nbsp;I posed a question about conditional syntax and how one would accomplish this in xaml / silverlight pages &amp;amp; controls.&amp;nbsp; There were no responses and I'm attributing that to the fact that it is a Friday.&amp;nbsp; Anyway, after a day of much next-level blog-reading and trial-and-error I have come up with a solution that might not be the most elegant but it works.&lt;/P&gt;
&lt;P&gt;I'm going to use a converter utility to provide this functionality.&amp;nbsp; This will be a class that implements &lt;CODE&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx"&gt;IValueConverter&lt;/A&gt;&lt;/CODE&gt;.&amp;nbsp; This is is an interface that allows one to apply custom logic to a binding which is pretty much what I wanted to do in the first place.&lt;/P&gt;
&lt;P&gt;If you are familiar with Scott Guthrie's &lt;A href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-1-creating-quot-hello-world-quot-with-silverlight-2-and-vs-2008.aspx"&gt;8-part series&lt;/A&gt; on Silverlight (which is fairly outdated btw with the new release of Beta 2) I will be building on the Digg example from that as that is the most pertinent "Hello World"'ey example I can think of.&lt;/P&gt;
&lt;P&gt;So anyone familiar with Digg will know that there is a little box on the left of a story that displays how many diggs a story has.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="Digg Example" src="http://i37.tinypic.com/2ef6npi.png"&gt;&lt;/P&gt;
&lt;P&gt;That screenshot is from the example I built awhile ago following Scott's tutorial.&amp;nbsp; See how even if a story has 1 or 2 the text below still says "diggs" ?&amp;nbsp; With the example I will show you can customize that to where if a story has more than 1 digg it will read "diggs" or else it will simply read "digg".&amp;nbsp; It sounds like a very trivial task (and it kind of is) but not anywhere near as trivial as with ASP.NET.&lt;/P&gt;
&lt;P&gt;First add a class file to your SilverlightUI class library and name it something like NumberOfDiggsConverter.cs (what I did).&lt;/P&gt;
&lt;P&gt;Here's my class.&amp;nbsp; It's very important to implement the &lt;CODE&gt;IValueConverter&lt;/CODE&gt; interface.&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;using&lt;/FONT&gt; System;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt; System.Windows.Data;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt; System.Globalization;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;namespace&lt;/FONT&gt; SilverlightSandbox.Converters&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;NumberOfDiggsConverter&lt;/FONT&gt; : &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IValueConverter&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; Convert(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; value,&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Type&lt;/FONT&gt; targetType,&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; parameter,&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;CultureInfo&lt;/FONT&gt; culture)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; System.&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Convert&lt;/FONT&gt;.ToInt32(value) &amp;gt; 1 ? &lt;/FONT&gt;&lt;FONT color=#a31515&gt;"diggs"&lt;/FONT&gt; : &lt;/FONT&gt;&lt;FONT color=#a31515&gt;"digg"&lt;/FONT&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; ConvertBack(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; value,&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Type&lt;/FONT&gt; targetType,&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; parameter,&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;CultureInfo&lt;/FONT&gt; culture)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;throw&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;NotImplementedException&lt;/FONT&gt;();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;}&lt;BR&gt;}&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Easy enough.&amp;nbsp; Notice I didn't check the value parameter for null or anything fancy.&amp;nbsp; Again, just a quick example and if you use something like this in production you might want to think about something a little better.&lt;/P&gt;
&lt;P&gt;Now that we have our converter class we should register it and use it within our xaml user control.&lt;/P&gt;
&lt;P&gt;Here is what my xaml looks like.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;BEFORE REGISTERING CONVERTER&lt;/STRONG&gt;&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;UserControl&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; x&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;Class&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="SilverlightSandbox.Page"&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000&gt;xmlns&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000&gt;xmlns&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;x&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&amp;gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;AFTER REGISTERING CONVERTER&lt;/STRONG&gt;&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;UserControl&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; x&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;Class&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="SilverlightSandbox.Page"&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000&gt;xmlns&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000&gt;xmlns&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;x&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000&gt;xmlns&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;Converters&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="clr-namespace:SilverlightSandbox.Converters"&amp;gt;&lt;/FONT&gt;&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Now create a &lt;CODE&gt;UserControl.Resources&lt;/CODE&gt; section. I added mine at the top of my page right before my main grid.&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#a31515&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;UserControl.Resources&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;Converters&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;FONT color=#a31515&gt;NumberOfDiggsConverter&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; x&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;Key&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="DiggConverter" /&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a31515&gt;UserControl.Resources&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;The next, and final, step is to actually implement this.&amp;nbsp; In our case we will set the text property of the digg block to the &lt;CODE&gt;NumberOfDiggs&lt;/CODE&gt; property of my &lt;CODE&gt;Digg&lt;/CODE&gt; object.&amp;nbsp; I'll show the before and after syntax of the # of diggs text block.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;BEFORE&lt;/STRONG&gt;&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;TextBlock&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; Text&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="diggs"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt;&lt;/FONT&gt;&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;AFTER&lt;/STRONG&gt;&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;TextBlock&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; Text&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="{&lt;/FONT&gt;&lt;FONT color=#a31515&gt;Binding&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; Diggs&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; Converter&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;={&lt;/FONT&gt;&lt;FONT color=#a31515&gt;StaticResource&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; DiggConverter&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;}}"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt;&lt;/FONT&gt;&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Here's the final result:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://i35.tinypic.com/10wphqh.png"&gt;&lt;/P&gt;
&lt;P&gt;Easy.&lt;/P&gt;</description><link>http://www.willasrari.com/blog/using-converters-for-conditional-silverlight-databinding/000319.aspx</link><pubDate>7/18/2008 7:14:59 PM</pubDate><author>Will Asrari</author></item><item><title>Is There A Conditional Syntax for Silverlight UI Databinding?</title><description>&lt;P&gt;I'm working on a Silverlight 2 project currently and am running into sort of a wall when it comes to databinding.&amp;nbsp; Without going into too much detail let's take into the consideration that I have the following objects.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;&lt;FONT color=#2b91af&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#2b91af&gt;&lt;FONT color=#2b91af&gt;Foo&lt;/FONT&gt;&lt;/FONT&gt;&amp;gt; list;&lt;BR&gt;&lt;FONT color=#2b91af&gt;Repeater &lt;FONT color=#000000&gt;repeaterFoo&lt;/FONT&gt;&lt;FONT color=#000000&gt;;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;My &lt;CODE&gt;repeaterFoo&lt;/CODE&gt;'s DataSource property is the &lt;CODE&gt;list&lt;/CODE&gt; above.&amp;nbsp; Let's say depending on a certain property of &lt;CODE&gt;Foo&lt;/CODE&gt; that I want to display a 1 or a 2 in my UI.&amp;nbsp; That's a pretty basic requirement right?&lt;/P&gt;
&lt;P&gt;Here's how I would do this in ASP.NET:&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;asp&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;FONT color=#a31515&gt;Repeater&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;ID&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="repeaterFoo"&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;runat&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="server"&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;ItemTemplate&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&amp;lt;%&lt;FONT color=#0000ff&gt;#&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;.IsNullOrEmpty(Eval(&lt;FONT color=#a31515&gt;"Name"&lt;/FONT&gt;).ToString()) ? &lt;FONT color=#a31515&gt;"1"&lt;/FONT&gt; : &lt;FONT color=#a31515&gt;"2"&lt;/FONT&gt; %&amp;gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a31515&gt;ItemTemplate&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;BR&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a31515&gt;asp&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;FONT color=#a31515&gt;Repeater&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Now, for the sake of argument (and proof of concept); let's pretend that this example is 100% useful.&amp;nbsp; How would I&amp;nbsp;accomplish this in&amp;nbsp;Silverlight 2 with it's funky &lt;CODE&gt;{ Binding PropertyName }&lt;/CODE&gt; syntax?&lt;/P&gt;
&lt;P&gt;I'm not expecting any simple answer after seeing the dog-and-pony show that is formatting a date / currency in a Grid.&lt;/P&gt;
&lt;P&gt;Don't get me wrong, I absolutely love Silverlight so far, it's just&amp;nbsp;kind of frustrating trying to get&amp;nbsp;used to the little things that were oh-so-easy in ASP.NET!&lt;/P&gt;
&lt;P&gt;Thanks in advance.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;UPDATE&lt;/STRONG&gt;&lt;BR&gt;I figured this out. New entry to come soon.&lt;/P&gt;
&lt;P&gt;Hint: It relates to the dog-and-pony show I alluded to earlier :(&lt;/P&gt;</description><link>http://www.willasrari.com/blog/is-there-a-conditional-syntax-for-silverlight-ui-databinding/000318.aspx</link><pubDate>7/17/2008 10:42:00 PM</pubDate><author>Will Asrari</author></item><item><title>Outlook Doesn't Respond After Latest Windows Update</title><description>&lt;P&gt;Just installed a bunch of Windows Updates for my laptop and now I can't send / receive e-mail with Outlook.&amp;nbsp; After about a minute or so it NOT RESPONDING's out.&amp;nbsp; It was mostly updates dealing with Office 2007 so I'm guessing something went south.&amp;nbsp; Needless to say I am uninstalling all of them and turning off automatic updates.&lt;/P&gt;
&lt;P&gt;The only difference between now and last night at midnight when I went to bed was that I could send / receive e-mail then and updates were installed in the meantime.&lt;/P&gt;
&lt;P&gt;WTF Microsoft?&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;UPDATE&lt;/STRONG&gt;&lt;BR&gt;Restored my system to the point right before installing the updates (thankfully this restore point is automatically created) and my Outlook works as it did before.&lt;/P&gt;
&lt;P&gt;I think it's safe to say there was something iffy about this update as it relates to my computer. Weird.&lt;/P&gt;</description><link>http://www.willasrari.com/blog/outlook-doesnt-respond-after-latest-windows-update/000317.aspx</link><pubDate>7/9/2008 11:06:15 AM</pubDate><author>Will Asrari</author></item><item><title>LINQ to SQL and Using Multiple Connection Strings</title><description>&lt;P&gt;So I found something pretty interesting today in regards to LINQ and LINQ-to-SQL classes.&amp;nbsp; I was setting up a staging server to deploy a new 3.5 web application.&amp;nbsp; I then realized, "Oh crap, different connection string!".&amp;nbsp; This should be easy as all I should have to do is modify the app.config and update the connectionString accordingly. WRONG!&lt;/P&gt;
&lt;P&gt;The connection string is actually compiled into the code. That sucks. Here's what I see in Reflector:&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;[SpecialSetting(SpecialSetting.ConnectionString), ApplicationScopedSetting, DebuggerNonUserCode, DefaultSettingValue("Data Source=(local);Initial Catalog=FooDB;User ID=;Password=")]&lt;BR&gt;public string FooDBConnectionString&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;get&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return (string) this["FooDBConnectionString"];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&lt;/CODE&gt;Gross.&amp;nbsp; I thought of a work-around that &lt;EM&gt;could&lt;/EM&gt; work.&amp;nbsp; This code is in the Settings.Designer.cs class so I could do something like:&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; FooDBConnectionString&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;#if&lt;/FONT&gt; DEBUG&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt; { &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; ((&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;)(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;[&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"FooDBConnectionStringDev"&lt;/FONT&gt;])); }&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;#else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#808080&gt;get { return ((string)(this["FooDBConnectionStringProduction"])); }&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endif&lt;BR&gt;&lt;/FONT&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;/CODE&gt;
&lt;P&gt;This way the appropriate connection string could be compiled into the code depending on whether or not the configuration for the project is set to Debug or Release.&amp;nbsp; The thing about this solution is that you would have to write this code each and every time you regenerate your LINQ-to-SQL class file(s).&amp;nbsp; Very inefficient. *NOTE* For this to even work you have to add another connection string in your Settings file. No thanks.&lt;/P&gt;
&lt;P&gt;The &lt;EM&gt;REAL&lt;/EM&gt; way to solve this:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Create a LINQ-to-SQL dbml file with an initial connection string 
&lt;LI&gt;Right-click dbml surface 
&lt;LI&gt;Click 'Properties' 
&lt;LI&gt;Expand the 'Connection' node 
&lt;LI&gt;Select 'None' for Connection String 
&lt;LI&gt;Select 'True' for Application Settings (don't know if this is completely necessary) 
&lt;LI&gt;Create a partial class for 'YourDataContextHere' 
&lt;LI&gt;Within this partial class create a parameterless constructor for 'YourDataContextHere' 
&lt;LI&gt;Set your base connection string accordingly a la:&lt;/LI&gt;&lt;/OL&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;public&lt;/FONT&gt; FooDB() : &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;(&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;ConfigurationManager&lt;/FONT&gt;.ConnectionStrings[&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"FooDB"&lt;/FONT&gt;].ConnectionString, mappingSource)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008000&gt;// anything else&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;}&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Just make sure you have ConnectionStrings node in your app/web configuration files and that you have the specified key in there or this won't work :D&lt;/P&gt;
&lt;P&gt;Easy. Now you can throw a different connection string in your Business Layer's configuration file and be good to go.&lt;/P&gt;
&lt;P&gt;Thanks to &lt;A href="http://blogs.msdn.com/jongallant/archive/2007/11/25/linq-and-web-application-connection-strings.aspx"&gt;Jon Gallant&lt;/A&gt;&amp;nbsp;and &lt;A href="http://ddkonline.blogspot.com/2008/02/set-connection-string-in-linq-dbml-file.html"&gt;David Klein&lt;/A&gt; for the initial posts. &lt;/P&gt;</description><link>http://www.willasrari.com/blog/linq-to-sql-and-using-multiple-connection-strings/000314.aspx</link><pubDate>7/1/2008 2:44:23 PM</pubDate><author>Will Asrari</author></item><item><title>Elegant Way of Executing a Stored Procedure using LINQ?</title><description>&lt;P&gt;I was working in a project today and I was trying to create a generic way of using a DataContext class to execute a stored procedure.&amp;nbsp; Of course there's the way of dragging a stored procedure onto the designer, etc... but I'm not interested in this at the moment.&amp;nbsp;&amp;nbsp;TBQH, I haven't even been doing the ORM mapping in this manner lately after using the &lt;CODE&gt;System.Data.Linq.Mapping&lt;/CODE&gt; namespace to map a POCO (Plain 'Ole CLR Object) to an actual SQL table (as well as using &lt;CODE&gt;ColumnAttribute&lt;/CODE&gt;'s to map the properties to columns.&amp;nbsp;&amp;nbsp;This is extremely helpful&amp;nbsp;for larger&amp;nbsp;2.0 projects that were recently converted to 3.5.&amp;nbsp; &amp;nbsp;Some might argue that this isn't how LINQ was supposed to be used or that it makes it more complicated.&amp;nbsp;&amp;nbsp;&amp;nbsp;First of all, I don't think that there is any right or wrong way to use LINQ.&amp;nbsp; Secondly, I find it can be a pain to have to remove the table from the designer, reconnect via Server Explorer, refresh the database, re-drag onto designer over-and-over when making changes to tables, views, procedures, etc...&amp;nbsp; This is also problematic if you don't have access to a production database from your dev environment.&amp;nbsp; Most web servers I experience don't have Visual Studio 2008 installed so it's not like I can quickly generate a newer set of LINQ-to-SQL classes.&amp;nbsp; If a table column name changes, I simply refactor the corresponding property in my library and I'm good to go.&lt;/P&gt;&lt;CODE&gt;
&lt;P&gt;[&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Table&lt;/FONT&gt;(Name = &lt;/FONT&gt;&lt;FONT color=#a31515&gt;"dbo.FooTable"&lt;/FONT&gt;)]&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Foo&lt;BR&gt;&lt;/FONT&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;#region&lt;/FONT&gt; Table Columns / Properties&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Column&lt;/FONT&gt;]&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;long&lt;/FONT&gt; FooId { &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt;; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Column&lt;/FONT&gt;]&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&amp;nbsp;FooName { &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt;; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Column&lt;/FONT&gt;]&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&amp;nbsp;FooDescription { &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt;; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;#endregion&lt;/FONT&gt; Table Columns / Properties&lt;BR&gt;&lt;/FONT&gt;}&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Easy.&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Database&lt;/FONT&gt;&amp;lt;TDataContext, TEntity&amp;gt;&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008000&gt;// ...&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;}&lt;/FONT&gt;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Take the previous data access helper class.&amp;nbsp; Let's say I want to create just a generic function to execute a stored procedure against my database.&amp;nbsp; Let's call it "ExecuteCommand".&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; ExecuteCommand(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; command, &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt;[] parameters)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;.IsNullOrEmpty(command))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;throw&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;ArgumentNullException&lt;/FONT&gt;(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"command"&lt;/FONT&gt;);&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;using&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;var&lt;/FONT&gt; database = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; TDataContext())&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;database.ExecuteCommand(command, parameters);&lt;BR&gt;}&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Basic.&amp;nbsp; The implementation is pretty mindless as well.&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#2b91af&gt;
&lt;P&gt;Database&lt;/FONT&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;MyDataContext&lt;/FONT&gt;, &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;TFoo&lt;/FONT&gt;&amp;gt;.ExecuteCommand(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"CommandName"&lt;/FONT&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;);&lt;/FONT&gt;&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;This sucks when you have parameters because I haven't found any documentation on how to execute a procedure elegantly using this approach.&amp;nbsp; It appears that the &lt;CODE&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.executecommand.aspx"&gt;DataContext.ExecuteCommand&lt;/A&gt;&lt;/CODE&gt; approach is best-suited for on-the-fly dynamic SQL.... gross!&amp;nbsp; I also read (need to find the link again) that some super-sleuthing uncovered that parameter substitution is silently ignored.&amp;nbsp; (I'll have to check back on that)&lt;/P&gt;
&lt;P&gt;I did find a way to implement using a stored procedure....&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;string&lt;/FONT&gt;&amp;nbsp;command = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;.Format(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"exec Command '{0}', {1}"&lt;/FONT&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515&gt;"string"&lt;/FONT&gt;, 1);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Database&lt;/FONT&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;MyDataContext&lt;/FONT&gt;, &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;TFoo&lt;/FONT&gt;&amp;gt;.ExecuteCommand(command, &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;);&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;That is disgusting.&amp;nbsp; Not a huge fan.&amp;nbsp; What if you have&amp;nbsp;a procedure that has 5, 10, 20 parameters? Ouch.&amp;nbsp; What if your input parameters contain ' 's? You would then have to replace all ' with a ''.&lt;/P&gt;
&lt;P&gt;Any suggestions?&amp;nbsp; I'm hoping that there is a much more elegant / succinct way of doing this that I haven't found yet.&amp;nbsp; I've tried to "RTFM" as they say but a couple thousand pages of LINQ reference books and I've got nothing.&lt;/P&gt;
&lt;P&gt;Here's a little 2.0 throwback of what I'm trying to accomplish.&amp;nbsp; Like I said before, there has to bge a more elegant way of doing this with the 3.5 Framework / LINQ / DataContext that doesn't involve dragging-and-dropping procedures onto the designer.&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;public&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; ExecuteProcedure(&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;List&lt;/FONT&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;SqlParameter&lt;/FONT&gt;&amp;gt; parameters, &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; command)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;DBManager&lt;/FONT&gt; manager = ...)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;manager.Open();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;manager.CreateParameters(parameters.Count);&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; parameters.Count; ++i)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;manager.AddParameters(i, parameters[i].ParameterName, parameters[i].Value);&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;) manager.ExecuteScalar(&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;CommandType&lt;/FONT&gt;.StoredProcedure, command);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;catch&lt;/FONT&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;SqlException&lt;/FONT&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; 0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;}&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Help me from the following please!!&lt;/P&gt;&lt;CODE&gt;&lt;FONT color=#2b91af&gt;
&lt;P&gt;StringBuilder&lt;/FONT&gt; query = &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt;(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"exec Command "&lt;/FONT&gt;);&lt;BR&gt;query.AppendFormat(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"{0},"&lt;/FONT&gt;, foo.FooProperty1);&lt;BR&gt;query.AppendFormat(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"'{0}',"&lt;/FONT&gt;, foo.FooProperty2.Replace(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"'"&lt;/FONT&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515&gt;"''"&lt;/FONT&gt;));&lt;BR&gt;query.AppendFormat(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"'{0}',"&lt;/FONT&gt;, foo.FooProperty3.Replace(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"'"&lt;/FONT&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515&gt;"''"&lt;/FONT&gt;));&lt;BR&gt;&lt;/FONT&gt;query.AppendFormat(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"'{0}',"&lt;/FONT&gt;, foo.FooProperty4.Replace(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"'"&lt;/FONT&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515&gt;"''"&lt;/FONT&gt;));&lt;BR&gt;query.AppendFormat(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"'{0}',"&lt;/FONT&gt;, foo.FooProperty5.Replace(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"'"&lt;/FONT&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515&gt;"''"&lt;/FONT&gt;));&lt;BR&gt;query.AppendFormat(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"'{0}',"&lt;/FONT&gt;, foo.FooProperty6.Replace(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"'"&lt;/FONT&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515&gt;"''"&lt;/FONT&gt;));&lt;BR&gt;query.AppendFormat(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"'{0}'"&lt;/FONT&gt;, foo.FooProperty7.Replace(&lt;/FONT&gt;&lt;FONT color=#a31515&gt;"'"&lt;/FONT&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515&gt;"''"&lt;/FONT&gt;));&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Database&lt;/FONT&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;MyDataContext&lt;/FONT&gt;, &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Foo&lt;/FONT&gt;&amp;gt;.ExecuteCommand(query.ToString(), &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;);&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;</description><link>http://www.willasrari.com/blog/elegant-way-of-executing-a-stored-procedure-using-linq/000312.aspx</link><pubDate>6/18/2008 9:59:18 PM</pubDate><author>Will Asrari</author></item></channel></rss>
