<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Non-Destructive Me</title><link>http://vistasquad.co.uk/blogs/nondestructive/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Non-destructiveMe" type="application/rss+xml" /><item><title>Nxtgen Oxford Demo Code and Slides</title><link>http://feedproxy.google.com/~r/Non-destructiveMe/~3/FzPVgW4QF1A/nxtgen-oxford-demo-code-and-slides.aspx</link><pubDate>Mon, 06 Jul 2009 21:42:00 GMT</pubDate><guid isPermaLink="false">f2440694-4650-4f0c-aac9-60139914070e:42018</guid><dc:creator>Ray Booysen</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://vistasquad.co.uk/blogs/nondestructive/rsscomments.aspx?PostID=42018</wfw:commentRss><comments>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/07/06/nxtgen-oxford-demo-code-and-slides.aspx#comments</comments><description>&lt;p&gt;As promised, I&amp;rsquo;ve uploaded my demo code and slides from this evening&amp;rsquo;s talk.&amp;nbsp; Thank you to everyone who made the journey to see the wonderful world of MVVM!&amp;nbsp; If you have any questions, feedback or anything else regarding WPF or Silverlight, please do drop me an email.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vistasquad.co.uk/media/p/42017/download.aspx"&gt;Slides and Code&lt;/a&gt;    &lt;br /&gt;&lt;a href="mailto:ray@vistasquad.co.uk"&gt;ray@vistasquad.co.uk&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://vistasquad.co.uk/aggbug.aspx?PostID=42018" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/Non-destructiveMe/~4/FzPVgW4QF1A" height="1" width="1"/&gt;</description><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/nxtgen/default.aspx">nxtgen</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/MVVM/default.aspx">MVVM</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/slides/default.aspx">slides</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/code/default.aspx">code</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/download/default.aspx">download</category><feedburner:origLink>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/07/06/nxtgen-oxford-demo-code-and-slides.aspx</feedburner:origLink></item><item><title>Wikipedia &amp; Scrumwall: Azure Applications in Action</title><link>http://feedproxy.google.com/~r/Non-destructiveMe/~3/ee8HxnZB93I/wikipedia-amp-scrumwall-azure-applications-in-action.aspx</link><pubDate>Tue, 26 May 2009 22:25:27 GMT</pubDate><guid isPermaLink="false">f2440694-4650-4f0c-aac9-60139914070e:40598</guid><dc:creator>Ray Booysen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://vistasquad.co.uk/blogs/nondestructive/rsscomments.aspx?PostID=40598</wfw:commentRss><comments>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/05/26/wikipedia-amp-scrumwall-azure-applications-in-action.aspx#comments</comments><description>&lt;div id="xrPlayerEmbededDiv07f7bd934e094af29756895fd56964ac"&gt;&lt;object id="xrPlayerEmbeded07f7bd934e094af29756895fd56964ac" width="646" height="396"&gt;&lt;param name="movie" value="http://exposureroom.com/flash/xrVideoPlayer.swf?domain=exposureroom.com/&amp;amp;assetId=07f7bd934e094af29756895fd56964ac&amp;amp;size=md&amp;amp;titleColor=white" /&gt;&lt;param name="allowNetworking" value="all" /&gt;&lt;param name="quality" value="best" /&gt;&lt;param name="wmode" value="transparent" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;param name="allowFullScreen" value="false" /&gt;&lt;embed type="application/x-shockwave-flash" src="http://exposureroom.com/flash/xrVideoPlayer.swf?domain=exposureroom.com/&amp;amp;assetId=07f7bd934e094af29756895fd56964ac&amp;amp;size=md&amp;amp;titleColor=white" quality="best" width="646" height="396" allowscriptaccess="always" allowfullscreen="false"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;  &lt;div style="margin-top:10px;margin-bottom:10px;font-size:10px;"&gt;Meeting #1, Talk#2: Azure Application Demonstrations of Wikipedia Explorer and ScrumWall (Ray Booysen By &lt;b&gt;UK AzureUserGroup&lt;/b&gt;     &lt;br /&gt;&lt;a href="http://exposureroom.com/members/UKAzureUserGroup.aspx/assets/07f7bd934e094af29756895fd56964ac/"&gt;View in &lt;b&gt;HD&lt;/b&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://exposureroom.com/members/UKAzureUserGroup.aspx/assets/07f7bd934e094af29756895fd56964ac/" target="_blank"&gt;Download Version&lt;/a&gt;&amp;#160; &lt;a href="http://exposureroom.com/members/UKAzureUserGroup.aspx/videos/" target="_blank"&gt;Visit UK AzureUserGroup&amp;#39;s ExposureRoom Videos Page&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;Just finished uploading a video of a talk I did at &lt;a href="http://ukazurenet.com"&gt;UKAzure Net&lt;/a&gt;.&amp;#160; I demonstrated 2 real world applications (&lt;a href="http://www.dotnetsolutions.ltd.uk/evidence/products/scrum-wall/"&gt;Scrumwall&lt;/a&gt; &amp;amp; &lt;a href="http://www.dotnetsolutions.ltd.uk/evidence/wikiexplorer/"&gt;Wikipedia Explorer&lt;/a&gt;) and how Azure solved the business problems that these two applications brought up.&amp;#160; Thanks to &lt;a href="http://irascian.blogspot.com/"&gt;Ian Smith&lt;/a&gt; for his awesome work at this production.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://vistasquad.co.uk/aggbug.aspx?PostID=40598" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/Non-destructiveMe/~4/ee8HxnZB93I" height="1" width="1"/&gt;</description><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/talk/default.aspx">talk</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/azure/default.aspx">azure</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/video/default.aspx">video</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/scrumwall/default.aspx">scrumwall</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/windows+azure/default.aspx">windows azure</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/wikipedia+explorer/default.aspx">wikipedia explorer</category><feedburner:origLink>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/05/26/wikipedia-amp-scrumwall-azure-applications-in-action.aspx</feedburner:origLink></item><item><title>Demo Code and Slides from DDD Scotland</title><link>http://feedproxy.google.com/~r/Non-destructiveMe/~3/wBdsdbHTPaQ/demo-code-and-slides-from-ddd-scotland.aspx</link><pubDate>Sat, 02 May 2009 12:33:19 GMT</pubDate><guid isPermaLink="false">f2440694-4650-4f0c-aac9-60139914070e:40061</guid><dc:creator>Ray Booysen</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://vistasquad.co.uk/blogs/nondestructive/rsscomments.aspx?PostID=40061</wfw:commentRss><comments>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/05/02/demo-code-and-slides-from-ddd-scotland.aspx#comments</comments><description>&lt;p&gt;As requested, I’ve put the code and slides up from my talk at &lt;a href="http://www.developerdayscotland.com/"&gt;DDD Scotland&lt;/a&gt;.&amp;#160; Its slightly different from my previous talk at DevEvening so download the latest!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://vistasquad.co.uk/media/p/40060/download.aspx"&gt;Download Link&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://vistasquad.co.uk/aggbug.aspx?PostID=40061" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/Non-destructiveMe/~4/wBdsdbHTPaQ" height="1" width="1"/&gt;</description><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/MVVM/default.aspx">MVVM</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/design/default.aspx">design</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/download/default.aspx">download</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/DDD/default.aspx">DDD</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/design+pattern/default.aspx">design pattern</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/DDD+Scotland/default.aspx">DDD Scotland</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/demo/default.aspx">demo</category><feedburner:origLink>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/05/02/demo-code-and-slides-from-ddd-scotland.aspx</feedburner:origLink></item><item><title>Busy Week – DDD Scotland &amp; Enterprise Developer Conference</title><link>http://feedproxy.google.com/~r/Non-destructiveMe/~3/TMSb7R0oqv0/busy-week-ddd-scotland-amp-enterprise-developer-conference.aspx</link><pubDate>Tue, 28 Apr 2009 20:28:08 GMT</pubDate><guid isPermaLink="false">f2440694-4650-4f0c-aac9-60139914070e:39971</guid><dc:creator>Ray Booysen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://vistasquad.co.uk/blogs/nondestructive/rsscomments.aspx?PostID=39971</wfw:commentRss><comments>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/04/28/busy-week-ddd-scotland-amp-enterprise-developer-conference.aspx#comments</comments><description>&lt;p&gt;Looking forward to the coming week!&amp;#160; I’m leaving Friday for &lt;a href="http://developerdayscotland.com/main/Default.aspx"&gt;DDD Scotland&lt;/a&gt; and will be giving my WPF MVVM talk just before lunch on Saturday.&amp;#160; If you’re interested in coming, drop me an email (&lt;a href="mailto:ray@vistasquad.co.uk"&gt;ray@vistasquad.co.uk&lt;/a&gt;) and I’ll find out if there are any more tickets.&lt;/p&gt;  &lt;p&gt;After I get home on Sunday, I’m off bright and early on Monday morning to New York for the &lt;a href="http://entdevcon.istreamplanet.com/"&gt;Enterprise Developer and Solutions Conference&lt;/a&gt;.&amp;#160; I’m co-presenting with &lt;a href="http://www.dotnetsolutions.ltd.uk"&gt;Dan Scarfe&lt;/a&gt; on Azure technologies and how it helped with a product we wrote in-house.&amp;#160; Very exciting stuff.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://vistasquad.co.uk/aggbug.aspx?PostID=39971" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/Non-destructiveMe/~4/TMSb7R0oqv0" height="1" width="1"/&gt;</description><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/wpf/default.aspx">wpf</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/MVVM/default.aspx">MVVM</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/presentation/default.aspx">presentation</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/azure/default.aspx">azure</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/DDD/default.aspx">DDD</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/DDD+Scotland/default.aspx">DDD Scotland</category><feedburner:origLink>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/04/28/busy-week-ddd-scotland-amp-enterprise-developer-conference.aspx</feedburner:origLink></item><item><title>Carbonite – Stay Away</title><link>http://feedproxy.google.com/~r/Non-destructiveMe/~3/WuYEHBr0NGw/carbonite-stay-away.aspx</link><pubDate>Wed, 22 Apr 2009 21:42:57 GMT</pubDate><guid isPermaLink="false">f2440694-4650-4f0c-aac9-60139914070e:39750</guid><dc:creator>Ray Booysen</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://vistasquad.co.uk/blogs/nondestructive/rsscomments.aspx?PostID=39750</wfw:commentRss><comments>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/04/22/carbonite-stay-away.aspx#comments</comments><description>&lt;p&gt;A while ago, I decided that I needed an off-site backup solution so after testing some providers, I settled on &lt;a href="http://www.carbonite.com"&gt;Carbonite&lt;/a&gt; as my provider of choice.&amp;#160; I am an amateur photographer and after a few years of RAW photography, I’ve hit around 120GB of files and other less important things.&lt;/p&gt;  &lt;p&gt;I installed Carbonite and it has been whizzing away backing up files as it saw fit and everything was right in the world of my backups.&amp;#160; I recently reinstalled Windows on my box and followed the instructions on the Carbonite site to restore the application to my PC.&amp;#160; And so begin the problems.&lt;/p&gt;  &lt;p&gt;The first issue began when I remoted into my machine and noticed the primary OS partition (20GB, don’t ask) was full with 0 bytes free.&amp;#160; Running a quick check on the drive I found that Carbonite had helpfully created a 3GB log file.&amp;#160; Irrespective of what caused this log file to be created, there is no reason why it should be allowed to run amok on my system filling up the drive.&amp;#160; Even better is that it is created in c:\documents and settings\all users.&amp;#160; Irrespective of that it contains, a quick look shows full path names to files, nothing major, but why?&amp;#160; A fast (ok 25 minute) live chat with a support representitive and we came to the conclusion that the best method to solve this problem is to uninstall Carbonite.&amp;#160; Brilliant!&lt;/p&gt;  &lt;p&gt;The second issue was with some weirdness with the application which has completely broken my belief that the backup system actually works.&amp;#160; When Carbonite installs, My Computer has a new item installed called the Carbonite Backup drive.&amp;#160; This allows you to see what is backed up and other such information.&amp;#160; This useful little drive was telling me my main 115GB backup was pending.&amp;#160; However, the application that runs was showing me the backup was complete and was taking no further action. Which one do I believe?&amp;#160; Is my data secure?&amp;#160; Another short (15 minute) live chat and we came to the conclusion that a reinstall would help.&amp;#160; Nope it wouldn’t, no change there.&amp;#160; Well how about you send us the log files? Ummmm, these are 3GB big, how would you like them?&lt;/p&gt;  &lt;p&gt;This is on top of the fact that Carbonite does NOT backup video files without being explicitly told to backup EACH file.&amp;#160; You have to mark individual video files that they must be backed up.&amp;#160; Helpfully Carbonite support will point you to an entry in their FAQ that tells you this and honestly I believed the front page of their site which says “Completely Automatic”.&lt;/p&gt;  &lt;p&gt;The experience has been far from pleasant.&amp;#160; The amount of time I’ve had to spend on Live Chats with people that can’t move from the support script they’ve been given, and the fact the software is pretty rubbish means I’m not staying.&amp;#160; I’ve asked for a refund and hopefully I’ll get a response, but hopefully this blog post helps some others from making the mistake I did.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://vistasquad.co.uk/aggbug.aspx?PostID=39750" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/Non-destructiveMe/~4/WuYEHBr0NGw" height="1" width="1"/&gt;</description><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/carbonite/default.aspx">carbonite</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/backup/default.aspx">backup</category><feedburner:origLink>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/04/22/carbonite-stay-away.aspx</feedburner:origLink></item><item><title>DevEvening Code and Slides</title><link>http://feedproxy.google.com/~r/Non-destructiveMe/~3/D-fjVmpZGg8/devevening-code-and-slides.aspx</link><pubDate>Fri, 17 Apr 2009 18:14:00 GMT</pubDate><guid isPermaLink="false">f2440694-4650-4f0c-aac9-60139914070e:39710</guid><dc:creator>Ray Booysen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://vistasquad.co.uk/blogs/nondestructive/rsscomments.aspx?PostID=39710</wfw:commentRss><comments>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/04/17/devevening-code-and-slides.aspx#comments</comments><description>&lt;p&gt;I promised the guys from DevEvening the code and slides from my talk.&amp;nbsp; So here you go!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vistasquad.co.uk/media/p/39709/download.aspx"&gt;Download Link&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://vistasquad.co.uk/aggbug.aspx?PostID=39710" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/Non-destructiveMe/~4/D-fjVmpZGg8" height="1" width="1"/&gt;</description><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/wpf/default.aspx">wpf</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/events/default.aspx">events</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/MVVM/default.aspx">MVVM</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/code/default.aspx">code</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/download/default.aspx">download</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/devEvening/default.aspx">devEvening</category><feedburner:origLink>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/04/17/devevening-code-and-slides.aspx</feedburner:origLink></item><item><title>Next Vista Squad Event – 20 May</title><link>http://feedproxy.google.com/~r/Non-destructiveMe/~3/AidDhSE9kh8/next-vista-squad-event-20-may.aspx</link><pubDate>Fri, 17 Apr 2009 15:41:11 GMT</pubDate><guid isPermaLink="false">f2440694-4650-4f0c-aac9-60139914070e:39707</guid><dc:creator>Ray Booysen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://vistasquad.co.uk/blogs/nondestructive/rsscomments.aspx?PostID=39707</wfw:commentRss><comments>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/04/17/next-vista-squad-event-20-may.aspx#comments</comments><description>&lt;p&gt;We’ve booked our next Vista Squad event! I’ve attached the blurb below for your reading pleasure, but hurry on over to our &lt;a href="http://vistasquad-may-nondestructive.eventbrite.com/"&gt;sign up page&lt;/a&gt; to get your ticket!&lt;/p&gt;  &lt;p&gt;Azure is here in a big way so hold onto your hats while we do a fantastic introduction into the shiny new cloud computing offering.&amp;#160; Marcus Tillett will be giving us a great talk on the Azure platform and what you can do with it.&amp;#160; &lt;/p&gt;  &lt;p&gt;For the IT Pros, Matt McSpirit rejoins us for Hyper-V in Server 2008 R2 which promises to be a fantastic evening all round.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Agenda &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;6pm - 6.30pm: Arrive and introductions    &lt;br /&gt;6.30pm - 7:30pm: Hyper-V in the R2 Wave (Matt McSpirit)     &lt;br /&gt;7.30pm - 8:15: Break, food and drinks     &lt;br /&gt;8:15pm - 9:15: Azure (Marcus Tillett)     &lt;br /&gt;9:15pm: Swag Giveaway, Wrap up!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://vistasquad.co.uk/aggbug.aspx?PostID=39707" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/Non-destructiveMe/~4/AidDhSE9kh8" height="1" width="1"/&gt;</description><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/vista+squad/default.aspx">vista squad</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/azure/default.aspx">azure</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/Hyper-V/default.aspx">Hyper-V</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/meeting/default.aspx">meeting</category><feedburner:origLink>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/04/17/next-vista-squad-event-20-may.aspx</feedburner:origLink></item><item><title>MVVM Slides and Code</title><link>http://feedproxy.google.com/~r/Non-destructiveMe/~3/swNzcIEBmkk/mvvm-slides-and-code.aspx</link><pubDate>Sat, 21 Mar 2009 19:54:00 GMT</pubDate><guid isPermaLink="false">f2440694-4650-4f0c-aac9-60139914070e:37945</guid><dc:creator>Ray Booysen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://vistasquad.co.uk/blogs/nondestructive/rsscomments.aspx?PostID=37945</wfw:commentRss><comments>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/03/21/mvvm-slides-and-code.aspx#comments</comments><description>&lt;p&gt;As promised, I've uploaded a copy of my slides and the code used in the demonstration.&amp;nbsp; If you have any questions or some feedback on the talk, please don't hesitate to contact me.&lt;/p&gt;&lt;p&gt;&lt;a href="http://vistasquad.co.uk/assets/mvvm/mvvm.zip"&gt;Link to code and slides&lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Email: ray@vistasquad.co.uk&lt;br&gt;Twitter: raybooysen&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://vistasquad.co.uk/aggbug.aspx?PostID=37945" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/Non-destructiveMe/~4/swNzcIEBmkk" height="1" width="1"/&gt;</description><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/MVVM/default.aspx">MVVM</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/slides/default.aspx">slides</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/code/default.aspx">code</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/download/default.aspx">download</category><feedburner:origLink>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/03/21/mvvm-slides-and-code.aspx</feedburner:origLink></item><item><title>DDD Scotland Registration is Open</title><link>http://feedproxy.google.com/~r/Non-destructiveMe/~3/owbD3OtSwfk/ddd-scotland-registration-is-open.aspx</link><pubDate>Mon, 02 Mar 2009 22:12:22 GMT</pubDate><guid isPermaLink="false">f2440694-4650-4f0c-aac9-60139914070e:26613</guid><dc:creator>Ray Booysen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://vistasquad.co.uk/blogs/nondestructive/rsscomments.aspx?PostID=26613</wfw:commentRss><comments>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/03/02/ddd-scotland-registration-is-open.aspx#comments</comments><description>&lt;p&gt;Developer Day Scotland is now open for registration. It has a &lt;a href="http://developerdayscotland.com/main/Agenda/tabid/84/Default.aspx"&gt;fantastic agenda&lt;/a&gt; with a dedicated SQL Bits track – so it isn’t just for developers! &lt;/p&gt;    &lt;p&gt;I’ll be there presenting on the MVVM pattern for WPF.&amp;#160; Hope to see you there!&lt;/p&gt;    &lt;p&gt;&lt;a href="http://developerdayscotland.com/main/Registration/tabid/82/Default.aspx"&gt;Register for your place&lt;/a&gt; before tickets are gone.&lt;/p&gt;&lt;img src="http://vistasquad.co.uk/aggbug.aspx?PostID=26613" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/Non-destructiveMe/~4/owbD3OtSwfk" height="1" width="1"/&gt;</description><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/talk/default.aspx">talk</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/event/default.aspx">event</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/MVVM/default.aspx">MVVM</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/DDD/default.aspx">DDD</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/scotland/default.aspx">scotland</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/developerdeveloperdeveloper/default.aspx">developerdeveloperdeveloper</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/DeveloperDay/default.aspx">DeveloperDay</category><feedburner:origLink>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/03/02/ddd-scotland-registration-is-open.aspx</feedburner:origLink></item><item><title>Avoid List.FindAll</title><link>http://feedproxy.google.com/~r/Non-destructiveMe/~3/DzepkvSdieQ/avoid-list-findall.aspx</link><pubDate>Tue, 24 Feb 2009 21:12:00 GMT</pubDate><guid isPermaLink="false">f2440694-4650-4f0c-aac9-60139914070e:23974</guid><dc:creator>Ray Booysen</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://vistasquad.co.uk/blogs/nondestructive/rsscomments.aspx?PostID=23974</wfw:commentRss><comments>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/02/24/avoid-list-findall.aspx#comments</comments><description>&lt;p&gt;**Update** I was corrected that FindAll and Find were available since 2.0 not 3.5. Apologies. :) &lt;br&gt;&lt;/p&gt;&lt;p&gt;If you’re using .NET 3.5, you’ll find two new methods on the generic List&amp;lt;T&amp;gt; class.&amp;nbsp; These are the &lt;a href="http://msdn.microsoft.com/en-us/library/fh1w7y8z.aspx"&gt;FindAll&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/x0b5b5bc.aspx"&gt;Find&lt;/a&gt; methods, both taking a &lt;a href="http://msdn.microsoft.com/en-us/library/x0b5b5bc.aspx"&gt;Predicate&amp;lt;T&amp;gt;&lt;/a&gt; as a parameter which provides the matching functionality for returning the correct item/s.&amp;nbsp; Find will return the first item that the predicate matches while FindAll&amp;lt;T&amp;gt; returns a List&amp;lt;T&amp;gt; containing each item that matches the predicate.&lt;/p&gt;  &lt;p&gt;So, why avoid the method?&amp;nbsp; The answer lies in the implementation.&amp;nbsp; The FindAll method internally creates a new List&amp;lt;T&amp;gt;, loops through each item in the list, does the matching against the predicate and if the match returns true, adds the current item to the list.&amp;nbsp; Finally the method returns the newly created List.&amp;nbsp; Why is this a bad idea?&amp;nbsp; Because of the creation of that new List&amp;lt;T&amp;gt; internally which if I use this in further expressions, it becomes increasingly inefficient.&amp;nbsp; For example:&lt;/p&gt;  &lt;p&gt;List&amp;lt;string&amp;gt; myStrings = new List&amp;lt;string&amp;gt; { “Hello”, “ray”, “AAA”, “BBB”, “aa”, “aaaaa”};    &lt;br&gt;var query = myStrings.FindAll(s =&amp;gt; s.Contains(“a”)).FindAll(s =&amp;gt; s.Length == 2);&lt;/p&gt;  &lt;p&gt;This query will enumerate myStrings, returning 3 items and then enumerate that new list using the Length test returning a new List containing 1 item. This means that we enumerate 2 Lists and end up creating 2 new Lists.&amp;nbsp; If I instead wrote this query in this fashion:&lt;/p&gt;  &lt;p&gt;List&amp;lt;string&amp;gt; strings = new List&amp;lt;string&amp;gt; { “Hello”, “ray”, “King”, “AAA”, “BBB”, “aa”, “aaaaa”}; var query = strings.Where(s =&amp;gt; s.Contains(“a”)).Where(s =&amp;gt; s.Length == 2);&lt;/p&gt;  &lt;p&gt;We now find that the collection is enumerated only once.&amp;nbsp; Instead of FindAll using the yield statement which would allow for much more composable queries, we’re left with an extremely inefficient method of finding items in our lists.&lt;/p&gt;&lt;img src="http://vistasquad.co.uk/aggbug.aspx?PostID=23974" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/Non-destructiveMe/~4/DzepkvSdieQ" height="1" width="1"/&gt;</description><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/query/default.aspx">query</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/List/default.aspx">List</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/queries/default.aspx">queries</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/composable/default.aspx">composable</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/FindAll/default.aspx">FindAll</category><feedburner:origLink>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/02/24/avoid-list-findall.aspx</feedburner:origLink></item><item><title>Azure Token Giveaway</title><link>http://feedproxy.google.com/~r/Non-destructiveMe/~3/xModTA2eIe4/azure-token-giveaway.aspx</link><pubDate>Sat, 21 Feb 2009 18:02:00 GMT</pubDate><guid isPermaLink="false">f2440694-4650-4f0c-aac9-60139914070e:22485</guid><dc:creator>Ray Booysen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://vistasquad.co.uk/blogs/nondestructive/rsscomments.aspx?PostID=22485</wfw:commentRss><comments>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/02/21/azure-token-giveaway.aspx#comments</comments><description>&lt;p&gt;Somewhat ironic after my previous post on investing in Azure, but I have an Azure token to give away.&amp;nbsp; This gives you:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Total compute usage: 2000 VM hours&lt;/li&gt;    &lt;li&gt;Cloud storage capacity: 50GB&lt;/li&gt;    &lt;li&gt;Total storage bandwidth: 20GB/day&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This first person to drop me an email at &lt;a href="mailto:ray@vistasquad.co.uk"&gt;ray@vistasquad.co.uk&lt;/a&gt; or send me a message on my &lt;a href="http://www.twitter.com/raybooysen"&gt;twitter account&lt;/a&gt; will have the code! &lt;/p&gt;&lt;img src="http://vistasquad.co.uk/aggbug.aspx?PostID=22485" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/Non-destructiveMe/~4/xModTA2eIe4" height="1" width="1"/&gt;</description><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/azure/default.aspx">azure</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/token/default.aspx">token</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/giveaway/default.aspx">giveaway</category><feedburner:origLink>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/02/21/azure-token-giveaway.aspx</feedburner:origLink></item><item><title>Should I Invest in Azure?</title><link>http://feedproxy.google.com/~r/Non-destructiveMe/~3/9MB7DEqG4IE/should-i-invest-in-azure.aspx</link><pubDate>Sat, 21 Feb 2009 17:56:00 GMT</pubDate><guid isPermaLink="false">f2440694-4650-4f0c-aac9-60139914070e:22478</guid><dc:creator>Ray Booysen</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://vistasquad.co.uk/blogs/nondestructive/rsscomments.aspx?PostID=22478</wfw:commentRss><comments>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/02/21/should-i-invest-in-azure.aspx#comments</comments><description>&lt;p&gt;I’ve spent the last week involved in porting a Silverlight application from an IIS hosted solution to a completely Azure hosted solution.&amp;nbsp; The application is quite complex, currently with a SQL Server backend, all data communicated via WCF services to the Silverlight application.&amp;nbsp; Authentication is done via LiveID with a authorisation done in Silverlight.&lt;/p&gt;
  
&lt;p&gt;Moving the data to Azure table storage was done in 2 days with the Silverlight app currently on hold as Azure has had some issues starting our web roles.&lt;/p&gt;
  
&lt;p&gt;This got me thinking.&amp;nbsp; With all the technology currently released or about to be released, should I be spending my time getting involved with Azure?&amp;nbsp; With Silverlight 3 most probably being announced at Mix09, ASP.NET MVC about to go RTM and .NET 4.0 with the parallel extensions available to play around with, what is the best for my career?&lt;/p&gt;
  
&lt;p&gt;What is the potential for you getting into a large Azure deployment compared to Silverlight, or ASP.NET MVC?&amp;nbsp; I’m guessing more likely to be the latter two over the cloud.&amp;nbsp; Table Storage, Queues, Blob storage, Azure SQL Data services – all of these make for a very large knowledge base that you require if you’re going to “get” Azure.&amp;nbsp; What will you choose?&lt;/p&gt;

&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fvistasquad.co.uk%2fblogs%2fnondestructive%2farchive%2f2009%2f02%2f21%2fshould-i-invest-in-azure.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fvistasquad.co.uk%2fblogs%2fnondestructive%2farchive%2f2009%2f02%2f21%2fshould-i-invest-in-azure.aspx" alt="kick it on DotNetKicks.com" border="0"&gt;&lt;/a&gt;&lt;img src="http://vistasquad.co.uk/aggbug.aspx?PostID=22478" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/Non-destructiveMe/~4/9MB7DEqG4IE" height="1" width="1"/&gt;</description><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/.NET/default.aspx">.NET</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/azure/default.aspx">azure</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/MVC/default.aspx">MVC</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/cloud+computing/default.aspx">cloud computing</category><feedburner:origLink>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/02/21/should-i-invest-in-azure.aspx</feedburner:origLink></item><item><title>Ever Wanted Friendly Names for Enums?</title><link>http://feedproxy.google.com/~r/Non-destructiveMe/~3/KBdVkAZseNo/ever-wanted-friendly-names-for-enums.aspx</link><pubDate>Sun, 11 Jan 2009 10:56:27 GMT</pubDate><guid isPermaLink="false">f2440694-4650-4f0c-aac9-60139914070e:5879</guid><dc:creator>Ray Booysen</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://vistasquad.co.uk/blogs/nondestructive/rsscomments.aspx?PostID=5879</wfw:commentRss><comments>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/01/11/ever-wanted-friendly-names-for-enums.aspx#comments</comments><description>&lt;p&gt;I have, often.&amp;#160; Too many times you have enum members that have names like &amp;quot;ActivityCycle&amp;quot; and you want to use this enum in data binding but would like a more friendly name like &amp;quot;Activity Cycle&amp;quot;.&amp;#160; There are other ways around this, such as having mapping methods but this means whenever you change the enum, some other method in another class needs to change.&lt;/p&gt;  &lt;p&gt;So, what can we do to make this better?&amp;#160; In System.ComponentModel there is an attribute named &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.descriptionattribute.aspx"&gt;Description&lt;/a&gt;.&amp;#160; What this allows us to do is decorate a member with a friendly name.&amp;#160; Lets do that now below:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;enum&lt;/span&gt; Cycle &lt;/pre&gt;

  &lt;pre&gt;{ &lt;/pre&gt;

  &lt;pre class="alt"&gt;  [Description(&lt;span class="str"&gt;&amp;quot;Activity Cycle&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;   ActivityCycle, &lt;/pre&gt;

  &lt;pre class="alt"&gt;  [Description(&lt;span class="str"&gt;&amp;quot;Washing Cycle&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;   WashingCycle &lt;/pre&gt;

  &lt;pre class="alt"&gt;   Default &lt;/pre&gt;

  &lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;What we now have are 2 members that require a friendly name and one that doesn't.&amp;#160; This fits in nicely as we're doing the minimal amount of work to get our end result.&amp;#160; Now we need something that will retrieve the values for us when we want to bind.&amp;#160; Below is a bit of code I wrote a while back.&amp;#160; It is an extension method and will be extended on to all structs as I can't do a where T : enum in the current C# spec.&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetDescription&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; enumerationValue)&lt;/pre&gt;

  &lt;pre&gt;            &lt;span class="kwrd"&gt;where&lt;/span&gt; T : &lt;span class="kwrd"&gt;struct&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;{&lt;/pre&gt;

  &lt;pre&gt;    Type type = enumerationValue.GetType();&lt;/pre&gt;

  &lt;pre class="alt"&gt;     &lt;span class="kwrd"&gt;if&lt;/span&gt; (!type.IsEnum)&lt;/pre&gt;

  &lt;pre&gt;     {&lt;/pre&gt;

  &lt;pre class="alt"&gt;                &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentException(&lt;/pre&gt;

  &lt;pre&gt;                    &lt;span class="str"&gt;&amp;quot;EnumerationValue must be of Enum type&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

  &lt;pre class="alt"&gt;                    &lt;span class="str"&gt;&amp;quot;enumerationValue&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;      }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;     &lt;span class="rem"&gt;//Tries to find a DescriptionAttribute &lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;     &lt;span class="rem"&gt;//for a potential friendly name&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;     &lt;span class="rem"&gt;//for the enum&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;     MemberInfo[] memberInfo = &lt;/pre&gt;

  &lt;pre&gt;         type.GetMember(enumerationValue.ToString());&lt;/pre&gt;

  &lt;pre class="alt"&gt;     &lt;span class="kwrd"&gt;if&lt;/span&gt; (memberInfo != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; memberInfo.Length &amp;gt; 0)&lt;/pre&gt;

  &lt;pre&gt;     {&lt;/pre&gt;

  &lt;pre class="alt"&gt;         &lt;span class="kwrd"&gt;object&lt;/span&gt;[] attrs = &lt;/pre&gt;

  &lt;pre&gt;             memberInfo[0]&lt;/pre&gt;

  &lt;pre class="alt"&gt;             .GetCustomAttributes(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(DescriptionAttribute), &lt;/pre&gt;

  &lt;pre&gt;             &lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;          &lt;span class="kwrd"&gt;if&lt;/span&gt; (attrs != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; attrs.Length &amp;gt; 0)&lt;/pre&gt;

  &lt;pre class="alt"&gt;         {&lt;/pre&gt;

  &lt;pre&gt;             &lt;span class="rem"&gt;//Pull out the description value&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;             &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;                 ((DescriptionAttribute)attrs[0]).Description;&lt;/pre&gt;

  &lt;pre class="alt"&gt;         }&lt;/pre&gt;

  &lt;pre&gt;     }&lt;/pre&gt;

  &lt;pre class="alt"&gt;     &lt;span class="rem"&gt;//If we have no description attribute, &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;     &lt;span class="rem"&gt;//just return the ToString of the enum&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; enumerationValue.ToString();&lt;/pre&gt;

  &lt;pre&gt; }&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The code above is pretty explanatory. If the type passed is not an enum, we throw an Exception.&amp;#160; If it is, we try and retrieve a DescriptionAttribute on the enum.&amp;#160; If there is a DescriptionAttribute, we can simply return the Description.&amp;#160; If not, we just return the .ToString() of the enum passed in.&amp;#160; The downside to this is that if you don't decorate a member as in the &amp;quot;Default&amp;quot; member in our example enum, we do go down quite a big set of code paths until simply returning .ToString().&lt;/p&gt;&lt;img src="http://vistasquad.co.uk/aggbug.aspx?PostID=5879" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/Non-destructiveMe/~4/KBdVkAZseNo" height="1" width="1"/&gt;</description><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/enum/default.aspx">enum</category><feedburner:origLink>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/01/11/ever-wanted-friendly-names-for-enums.aspx</feedburner:origLink></item><item><title>WPF TextBox with Watermark</title><link>http://feedproxy.google.com/~r/Non-destructiveMe/~3/RBO71UCZ7G0/wpf-textbox-with-watermark.aspx</link><pubDate>Fri, 02 Jan 2009 16:14:49 GMT</pubDate><guid isPermaLink="false">f2440694-4650-4f0c-aac9-60139914070e:4448</guid><dc:creator>Ray Booysen</dc:creator><slash:comments>12</slash:comments><wfw:commentRss>http://vistasquad.co.uk/blogs/nondestructive/rsscomments.aspx?PostID=4448</wfw:commentRss><comments>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/01/02/wpf-textbox-with-watermark.aspx#comments</comments><description>&lt;p&gt;WPF has simply the most powerful templating and visual engine that is available at the moment for designing your UI.&amp;#160; A requirement came up in a project that required a watermarked textbox for displaying some contextual help.&lt;/p&gt;  &lt;p&gt;With WPF this becomes trivial.&amp;#160; So lets first create a control that extends TextBox to add our watermark text property.&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TextBoxWithHelp : TextBox&lt;/pre&gt;

    &lt;pre&gt;    {&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; HelpText&lt;/pre&gt;

    &lt;pre&gt;        {&lt;/pre&gt;

    &lt;pre class="alt"&gt;            get {&lt;span class="kwrd"&gt;return&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;)GetValue(HelpTextProperty); }&lt;/pre&gt;

    &lt;pre&gt;            set { SetValue(HelpTextProperty, &lt;span class="kwrd"&gt;value&lt;/span&gt;); }&lt;/pre&gt;

    &lt;pre class="alt"&gt;        }&lt;/pre&gt;

    &lt;pre&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; DependencyProperty HelpTextProperty =&lt;/pre&gt;

    &lt;pre&gt;            DependencyProperty.Register(&lt;span class="str"&gt;&amp;quot;HelpText&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

    &lt;pre class="alt"&gt;                 &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;), &lt;/pre&gt;

    &lt;pre&gt;                 &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(TextBoxWithHelp), &lt;/pre&gt;

    &lt;pre class="alt"&gt;                 &lt;span class="kwrd"&gt;new&lt;/span&gt; PropertyMetadata(String.Empty));&lt;/pre&gt;

    &lt;pre&gt;    }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;This code creates us a control that functions exactly the same as a TextBox but allows us a DependencyProperty we can bind some watermark to. So now can we use this control and style it as needed.&amp;#160; And this becomes a pretty simple task.&amp;#160; What we will do is take the default style of a TextBox and add an additional element and some additional triggers.&amp;#160; For brevity, I’ve omitted all the TemplateBindings which are not required for this example.&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;div class="csharpcode"&gt;
      &lt;div class="csharpcode"&gt;
        &lt;pre class="alt"&gt;&amp;lt;Style x:Key=&lt;span class="str"&gt;&amp;quot;TextBoxWithHelp&amp;quot;&lt;/span&gt; &lt;/pre&gt;

        &lt;pre&gt;    TargetType=&lt;span class="str"&gt;&amp;quot;{x:Type local:TextBoxWithHelp}&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

        &lt;pre class="alt"&gt;    &amp;lt;Setter &lt;/pre&gt;

        &lt;pre&gt;        Property=&lt;span class="str"&gt;&amp;quot;Template&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

        &lt;pre class="alt"&gt;        &amp;lt;Setter.Value&amp;gt;&lt;/pre&gt;

        &lt;pre&gt;            &amp;lt;ControlTemplate &lt;/pre&gt;

        &lt;pre class="alt"&gt;                TargetType=&lt;span class="str"&gt;&amp;quot;{x:Type local:TextBoxWithHelp}&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

        &lt;pre&gt;                &amp;lt;Microsoft_Windows_Themes:ListBoxChrome  &lt;/pre&gt;

        &lt;pre class="alt"&gt;                    x:Name=&lt;span class="str"&gt;&amp;quot;Bd&amp;quot;&lt;/span&gt; &lt;/pre&gt;

        &lt;pre&gt;                    SnapsToDevicePixels=&lt;span class="str"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &amp;gt;&lt;/pre&gt;

        &lt;pre class="alt"&gt;                    &amp;lt;Grid&amp;gt;&lt;/pre&gt;

        &lt;pre&gt;                        &amp;lt;ScrollViewer &lt;/pre&gt;

        &lt;pre class="alt"&gt;                            x:Name=&lt;span class="str"&gt;&amp;quot;PART_ContentHost&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

        &lt;pre&gt;                        &amp;lt;TextBlock &lt;/pre&gt;

        &lt;pre class="alt"&gt;                            x:Name=&lt;span class="str"&gt;&amp;quot;PART_HelpTextElement&amp;quot;&lt;/span&gt; &lt;/pre&gt;

        &lt;pre&gt;                            Text=&lt;span class="str"&gt;&amp;quot;{TemplateBinding HelpText}&amp;quot;&lt;/span&gt; &lt;/pre&gt;

        &lt;pre class="alt"&gt;                            Visibility=&lt;span class="str"&gt;&amp;quot;Collapsed&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/pre&gt;

        &lt;pre&gt;                    &amp;lt;/Grid&amp;gt;&lt;/pre&gt;

        &lt;pre class="alt"&gt;                &amp;lt;/Microsoft_Windows_Themes:ListBoxChrome&amp;gt;&lt;/pre&gt;

        &lt;pre&gt;                &amp;lt;ControlTemplate.Triggers&amp;gt;&lt;/pre&gt;

        &lt;pre class="alt"&gt;                    &amp;lt;Trigger &lt;/pre&gt;

        &lt;pre&gt;                        Property=&lt;span class="str"&gt;&amp;quot;Text&amp;quot;&lt;/span&gt; &lt;/pre&gt;

        &lt;pre class="alt"&gt;                        Value=&lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

        &lt;pre&gt;                        &amp;lt;Setter &lt;/pre&gt;

        &lt;pre class="alt"&gt;                            TargetName=&lt;span class="str"&gt;&amp;quot;PART_HelpTextElement&amp;quot;&lt;/span&gt; &lt;/pre&gt;

        &lt;pre&gt;                            Property=&lt;span class="str"&gt;&amp;quot;Visibility&amp;quot;&lt;/span&gt; &lt;/pre&gt;

        &lt;pre class="alt"&gt;                            Value=&lt;span class="str"&gt;&amp;quot;Visible&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/pre&gt;

        &lt;pre&gt;                    &amp;lt;/Trigger&amp;gt;&lt;/pre&gt;

        &lt;pre class="alt"&gt;                    &amp;lt;Trigger &lt;/pre&gt;

        &lt;pre&gt;                        Property=&lt;span class="str"&gt;&amp;quot;Text&amp;quot;&lt;/span&gt; &lt;/pre&gt;

        &lt;pre class="alt"&gt;                        Value=&lt;span class="str"&gt;&amp;quot;{x:Null}&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

        &lt;pre&gt;                        &amp;lt;Setter &lt;/pre&gt;

        &lt;pre class="alt"&gt;                            TargetName=&lt;span class="str"&gt;&amp;quot;PART_HelpTextElement&amp;quot;&lt;/span&gt; &lt;/pre&gt;

        &lt;pre&gt;                            Property=&lt;span class="str"&gt;&amp;quot;Visibility&amp;quot;&lt;/span&gt; &lt;/pre&gt;

        &lt;pre class="alt"&gt;                            Value=&lt;span class="str"&gt;&amp;quot;Visible&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/pre&gt;

        &lt;pre&gt;                    &amp;lt;/Trigger&amp;gt;&lt;/pre&gt;

        &lt;pre class="alt"&gt;                &amp;lt;/ControlTemplate.Triggers&amp;gt;&lt;/pre&gt;

        &lt;pre&gt;            &amp;lt;/ControlTemplate&amp;gt;&lt;/pre&gt;

        &lt;pre class="alt"&gt;        &amp;lt;/Setter.Value&amp;gt;&lt;/pre&gt;

        &lt;pre&gt;    &amp;lt;/Setter&amp;gt;&lt;/pre&gt;

        &lt;pre class="alt"&gt;&amp;lt;/Style&amp;gt;&lt;/pre&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;What we have changed in the base TextBox style is the addition of the “PART_HelpTextElement” TextBlock.&amp;#160; This is the element that the watermark will sit in and is collapsed by default.&amp;#160; In the control template triggers collection, you’ll notice that the moment that the control’s Text Property is “” or null, the watermark TextBlock’s visibility property will be set to Visible and the watermark will become visible.&lt;/p&gt;

&lt;p&gt;This is a simple solution for a problem that occurs quite frequently.&amp;#160; Because of the&amp;#160; power of WPF, you are able to style the watermark in any fashion you require.&lt;/p&gt;&lt;img src="http://vistasquad.co.uk/aggbug.aspx?PostID=4448" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/Non-destructiveMe/~4/RBO71UCZ7G0" height="1" width="1"/&gt;</description><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/wpf/default.aspx">wpf</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/code/default.aspx">code</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/watermark/default.aspx">watermark</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/textbox/default.aspx">textbox</category><feedburner:origLink>http://vistasquad.co.uk/blogs/nondestructive/archive/2009/01/02/wpf-textbox-with-watermark.aspx</feedburner:origLink></item><item><title>Latest MSDN Events</title><link>http://feedproxy.google.com/~r/Non-destructiveMe/~3/jq8ehezF44U/latest-msdn-events.aspx</link><pubDate>Tue, 09 Dec 2008 12:59:40 GMT</pubDate><guid isPermaLink="false">f2440694-4650-4f0c-aac9-60139914070e:1768</guid><dc:creator>Ray Booysen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://vistasquad.co.uk/blogs/nondestructive/rsscomments.aspx?PostID=1768</wfw:commentRss><comments>http://vistasquad.co.uk/blogs/nondestructive/archive/2008/12/09/latest-msdn-events.aspx#comments</comments><description>&lt;p&gt;Michael Lonnon has just provided us with the latest MSDN half-day Roadshow events that are taking place in February 2009.&amp;#160; Its a sneak peak before the official announcement goes out on Wednesday, so head on over to sign up now.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-gb/bb905504.aspx"&gt;Find out about all MSDN events&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032397774&amp;amp;Culture=en-GB"&gt;MSDN: Catch up with Microsoft Rich Client Technologies for 2008&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Date: 10 February 2009&lt;/p&gt;  &lt;p&gt;Location: &lt;b&gt;London&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032397775&amp;amp;Culture=en-GB"&gt;MSDN: Catch up with Microsoft Rich Client Technologies for 2008&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Date: 12 February 2009&lt;/p&gt;  &lt;p&gt;Location: &lt;b&gt;Birmingham &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032397777&amp;amp;Culture=en-GB"&gt;MSDN: Catch up with Microsoft Rich Client Technologies for 2008&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Date: 24 February 2009&lt;/p&gt;  &lt;p&gt;Location: &lt;b&gt;Edinburgh&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;TBC&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;MSDN: Catch up with Microsoft Rich Client Technologies for 2008&lt;/p&gt;  &lt;p&gt;Date: 26 February 2009&lt;/p&gt;  &lt;p&gt;Location: Manchester &lt;/p&gt;&lt;img src="http://vistasquad.co.uk/aggbug.aspx?PostID=1768" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/Non-destructiveMe/~4/jq8ehezF44U" height="1" width="1"/&gt;</description><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/msdn/default.aspx">msdn</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/event/default.aspx">event</category><category domain="http://vistasquad.co.uk/blogs/nondestructive/archive/tags/roadshow/default.aspx">roadshow</category><feedburner:origLink>http://vistasquad.co.uk/blogs/nondestructive/archive/2008/12/09/latest-msdn-events.aspx</feedburner:origLink></item></channel></rss>
