<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Karl On WPF - .Net</title>
	<atom:link href="http://karlshifflett.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://karlshifflett.wordpress.com</link>
	<description>The Home of Mole and Karl&#039;s blog on .NET, WPF, Prism and Visual Studio Tools</description>
	<lastBuildDate>Fri, 24 May 2013 18:19:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='karlshifflett.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Karl On WPF - .Net</title>
		<link>http://karlshifflett.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://karlshifflett.wordpress.com/osd.xml" title="Karl On WPF - .Net" />
	<atom:link rel='hub' href='http://karlshifflett.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Visual Studio 2010 Tooltip Assassin</title>
		<link>http://karlshifflett.wordpress.com/2013/03/29/visual-studio-2010-tooltip-assassin/</link>
		<comments>http://karlshifflett.wordpress.com/2013/03/29/visual-studio-2010-tooltip-assassin/#comments</comments>
		<pubDate>Fri, 29 Mar 2013 16:22:26 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Extension]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>

		<guid isPermaLink="false">https://karlshifflett.wordpress.com/?p=1822</guid>
		<description><![CDATA[I don’t know about you, but the Visual Studio 2010 XAML and C# editor tooltips don’t provide much value.&#160; When presenting they are a distraction. When I collapse a region of XAML and the mouse wonders over the collapsed region I get this enormous tooltip painted over the XAML I’m looking at. I finally decided [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1822&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I don’t know about you, but the Visual Studio 2010 XAML and C# editor tooltips don’t provide much value.&nbsp; When presenting they are a distraction. When I collapse a region of XAML and the mouse wonders over the collapsed region I get this enormous tooltip painted over the XAML I’m looking at.</p>
<p>I finally decided to put a stop to this and code tooltip free.</p>
<p>I found this elegant solution provided by Noah Richards that he posted on github:&nbsp; <a href="https://github.com/NoahRic/Random/blob/master/DisableQuickInfo.cs" target="_blank">DisableQuickInfo</a>.</p>
<p>I made one modification to his code by adding a second ContentType attribute to include XAML.</p>
<p>You can download the vsix file below and install or simply use this code to build the project yourself.&nbsp; If you have Visual Studio 2012 you’ll need to build it yourself.</p>
<p>After installing you view the extensions information in Visual Studio’s Extension Manager.</p>
<p><a href="http://karlshifflett.files.wordpress.com/2013/03/notooltips.png"><img style="background-image:none;margin:0 5px;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="NoTooltips" border="0" alt="NoTooltips" src="http://karlshifflett.files.wordpress.com/2013/03/notooltips_thumb.png?w=709&#038;h=526" width="709" height="526"></a></p>
<h4>Source</h4>
<pre class="code"><span style="color:blue;">namespace </span>QuickInfoAssassin {
    <span style="color:blue;">using </span>System;
    <span style="color:blue;">using </span>System.Collections.Generic;
    <span style="color:blue;">using </span>System.ComponentModel.Composition;
    <span style="color:blue;">using </span>Microsoft.VisualStudio.Language.Intellisense;
    <span style="color:blue;">using </span>Microsoft.VisualStudio.Text;
    <span style="color:blue;">using </span>Microsoft.VisualStudio.Utilities;

    <span style="color:green;">//Many thanks to Noah Richards and his DisableQuickInfo extension
    // https://github.com/NoahRic/Random/blob/master/DisableQuickInfo.cs

    </span>[<span style="color:#2b91af;">Export</span>(<span style="color:blue;">typeof</span>(<span style="color:#2b91af;">IQuickInfoSourceProvider</span>))]
    [<span style="color:#2b91af;">Name</span>(<span style="color:#a31515;">"Quick Info Assassin"</span>)]
    [<span style="color:#2b91af;">Order</span>(Before = <span style="color:#a31515;">"Default Quick Info Presenter"</span>)]
    [<span style="color:#2b91af;">ContentType</span>(<span style="color:#a31515;">"csharp"</span>)]
    [<span style="color:#2b91af;">ContentType</span>(<span style="color:#a31515;">"XAML"</span>)]
    <span style="color:blue;">internal class </span><span style="color:#2b91af;">QuickInfoAssassinProvider </span>: <span style="color:#2b91af;">IQuickInfoSourceProvider </span>{
        <span style="color:blue;">public </span><span style="color:#2b91af;">IQuickInfoSource </span>TryCreateQuickInfoSource(<span style="color:#2b91af;">ITextBuffer </span>textBuffer) {
            <span style="color:blue;">return new </span><span style="color:#2b91af;">CancelingQuickInfoSource</span>();
        }
    }

    <span style="color:blue;">internal class </span><span style="color:#2b91af;">CancelingQuickInfoSource </span>: <span style="color:#2b91af;">IQuickInfoSource </span>{
        <span style="color:#2b91af;">Boolean </span>_isDisposed;

        <span style="color:blue;">public void </span>AugmentQuickInfoSession(
            <span style="color:#2b91af;">IQuickInfoSession </span>session, <span style="color:#2b91af;">IList</span>&lt;<span style="color:#2b91af;">Object</span>&gt; quickInfoContent,
            <span style="color:blue;">out </span><span style="color:#2b91af;">ITrackingSpan </span>applicableToSpan) {
            
            <span style="color:green;">// Dismiss the session immediately.
            </span>session.Dismiss();
            applicableToSpan = <span style="color:blue;">null</span>;
        }

        <span style="color:blue;">public void </span>Dispose() {
            <span style="color:blue;">if </span>(!_isDisposed) {
                <span style="color:#2b91af;">GC</span>.SuppressFinalize(<span style="color:blue;">this</span>);
                _isDisposed = <span style="color:blue;">true</span>;
            }
        }
    }
}
</pre>
<p>If you are not familiar with creating Visual Studio Editor Extensions MSDN provides a number of walkthroughs to get you going.&nbsp; I used this one: <a href="http://msdn.microsoft.com/en-us/library/ee197646(v=vs.100).aspx" target="_blank">Walkthrough: Displaying QuickInfo Tooltips</a>.</p>
<p>You’ll need the Visual Studio SP1 SDK to create the project that can be found <a href="http://visualstudiogallery.msdn.microsoft.com/25622469-19d8-4959-8e5c-4025d1c9183d" target="_blank">here</a>.</p>
<h4>Download</h4>
<p><strong><font size="2">After downloading change the extension from .vsix.DOC to .vsix.</font></strong><span style="text-align:left;text-transform:none;background-color:rgb(255,255,255);text-indent:0;letter-spacing:normal;display:inline!important;font:12px/16px verdana;white-space:normal;float:none;color:rgb(51,51,51);word-spacing:0;-webkit-text-size-adjust:auto;"><span class="Apple-converted-space">&nbsp;</span>This is a requirement of WordPress. You will also need to Unblock the file using the file properties dialog in Windows Explorer.</span></p>
<p>Download (<a href="http://karlshifflett.files.wordpress.com/2013/03/quickinfoassassin-vsix.doc" target="_blank">QuickInfoAssassin.vsix (40 KB)</a>)</p>
<p style="text-align:left;text-transform:none;background-color:rgb(255,255,255);text-indent:0;letter-spacing:normal;font:12px/16px verdana;white-space:normal;color:rgb(51,51,51);word-spacing:0;-webkit-text-size-adjust:auto;">Have a great tooltip free day,</p>
<p style="text-align:left;text-transform:none;background-color:rgb(255,255,255);text-indent:0;letter-spacing:normal;font:12px/16px verdana;white-space:normal;color:rgb(51,51,51);word-spacing:0;-webkit-text-size-adjust:auto;"><span style="color:rgb(192,148,63);">Just a grain of sand on the worlds beaches.</span></p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/c/'>C#</a>, <a href='http://karlshifflett.wordpress.com/category/extension/'>Extension</a>, <a href='http://karlshifflett.wordpress.com/category/visual-studio-2010/'>Visual Studio 2010</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1822/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1822/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1822&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2013/03/29/visual-studio-2010-tooltip-assassin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>

		<media:content url="http://karlshifflett.files.wordpress.com/2013/03/notooltips_thumb.png" medium="image">
			<media:title type="html">NoTooltips</media:title>
		</media:content>
	</item>
		<item>
		<title>Code for Boise Code Camp 3-16-2013</title>
		<link>http://karlshifflett.wordpress.com/2013/03/15/code-for-boise-code-camp-3-16-2013/</link>
		<comments>http://karlshifflett.wordpress.com/2013/03/15/code-for-boise-code-camp-3-16-2013/#comments</comments>
		<pubDate>Sat, 16 Mar 2013 00:21:40 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[Code Camp]]></category>
		<category><![CDATA[Ocean]]></category>
		<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">https://karlshifflett.wordpress.com/?p=1813</guid>
		<description><![CDATA[Data Caching Session This example application is for the session, “An Approach to Real World Application Data Caching” can be downloaded below. Included in the download is the demo application, the Ocean 3 framework binaries, and the&#160; PowerPoint deck. This application demonstrates one solution to real world data caching.&#160; I use the techniques presented here [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1813&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<h4></h4>
<h4>Data Caching Session</h4>
<p>This example application is for the session, “An Approach to Real World Application Data Caching” can be downloaded below. Included in the download is the demo application, the Ocean 3 framework binaries, and the&nbsp; PowerPoint deck.</p>
<p>This application demonstrates one solution to real world data caching.&nbsp; I use the techniques presented here in production applications with many users.</p>
<p>In the future, I’ll write a full blog post on this and possibly post a video walkthrough. I’ll also post the Ocean 3 code, just have not had time to document and write a full example application.</p>
<h4>Mole Session</h4>
<p>A pdf of the Mole slides can be downloaded below.</p>
<p>Mole can be purchased or a demo of Mole can be downloaded at <a href="http://www.molosoft.com/" target="_blank">Molosoft.com</a>.</p>
<h4>Download</h4>
<p><span style="text-align:left;text-transform:none;background-color:rgb(255,255,255);text-indent:0;letter-spacing:normal;display:inline!important;font:12px/16px verdana;white-space:normal;float:none;color:rgb(51,51,51);word-spacing:0;-webkit-text-size-adjust:auto;"><strong>After downloading change the extension from .zip.DOC to .zip.</strong> This is a requirement of WordPress. You will also need to Unblock the file using the file properties dialog in Windows Explorer.</span></p>
<p><span style="text-align:left;text-transform:none;background-color:rgb(255,255,255);text-indent:0;letter-spacing:normal;display:inline!important;font:12px/16px verdana;white-space:normal;float:none;color:rgb(51,51,51);word-spacing:0;-webkit-text-size-adjust:auto;">Download (<a href="http://karlshifflett.files.wordpress.com/2013/03/datacachingdemowithdatabase-zip.doc" target="_blank">Data Caching Demo w/Database (1.4 MB)</a>)</span></p>
<p><span style="text-align:left;text-transform:none;background-color:rgb(255,255,255);text-indent:0;letter-spacing:normal;display:inline!important;font:12px/16px verdana;white-space:normal;float:none;color:rgb(51,51,51);word-spacing:0;-webkit-text-size-adjust:auto;">There is a database backup in the \DataCachingDemo\Database Backup folder.&nbsp; You’ll need to restore this to a SQL Server 2008 R2 or SQL Server 2008 R2 Express. If you restore to SQL Server, you’ll need to change the connection string to point to your server.&nbsp; Currently, the demo application points to SQL Server Express.</p>
<p style="text-align:left;text-transform:none;background-color:rgb(255,255,255);text-indent:0;letter-spacing:normal;font:12px/16px verdana;white-space:normal;color:rgb(51,51,51);word-spacing:0;-webkit-text-size-adjust:auto;">Download (<a href="http://karlshifflett.files.wordpress.com/2013/03/mole.pdf" target="_blank">Mole Session Slides in PDF (613 KB)</a>)</p>
<p style="text-align:left;text-transform:none;background-color:rgb(255,255,255);text-indent:0;letter-spacing:normal;font:12px/16px verdana;white-space:normal;color:rgb(51,51,51);word-spacing:0;-webkit-text-size-adjust:auto;">Have a great day,</p>
<p style="text-align:left;text-transform:none;background-color:rgb(255,255,255);text-indent:0;letter-spacing:normal;font:12px/16px verdana;white-space:normal;color:rgb(51,51,51);word-spacing:0;-webkit-text-size-adjust:auto;"><span style="color:rgb(192,148,63);">Just a grain of sand on the worlds beaches.</span></p>
<p></span></p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/code-camp/'>Code Camp</a>, <a href='http://karlshifflett.wordpress.com/category/ocean/'>Ocean</a>, <a href='http://karlshifflett.wordpress.com/category/presentations/'>Presentations</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1813/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1813/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1813&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2013/03/15/code-for-boise-code-camp-3-16-2013/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>
	</item>
		<item>
		<title>Mole 2010 and Mole 2012 Released</title>
		<link>http://karlshifflett.wordpress.com/2013/03/09/mole-2010-and-mole-2012-released/</link>
		<comments>http://karlshifflett.wordpress.com/2013/03/09/mole-2010-and-mole-2012-released/#comments</comments>
		<pubDate>Sat, 09 Mar 2013 16:31:39 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[Mole]]></category>
		<category><![CDATA[Mole 2010]]></category>
		<category><![CDATA[Mole 2012]]></category>

		<guid isPermaLink="false">https://karlshifflett.wordpress.com/?p=1809</guid>
		<description><![CDATA[Today, we released new versions of Mole 2010 and for the first time, Mole 2012. Please visit the Molosoft website for full details of these product launches, especially the FAQ page. Highlights Mole 2010 and Mole 2012 are both included in the purchase.&#160; No separate costs to purchase Mole 2010 and Mole 2012. Removed the [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1809&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://karlshifflett.files.wordpress.com/2013/03/molelogonoversion.png"><img style="background-image:none;margin:0 5px;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="molelogoNoVersion" border="0" alt="molelogoNoVersion" src="http://karlshifflett.files.wordpress.com/2013/03/molelogonoversion_thumb.png?w=328&#038;h=126" width="328" height="126"></a></p>
<p>Today, we released new versions of Mole 2010 and for the first time, Mole 2012.</p>
<p>Please visit the <a title="Molosoft home page" href="http://www.molosoft.com/" target="_blank">Molosoft</a> website for full details of these product launches, especially the <a href="http://www.molosoft.com/faqs/" target="_blank">FAQ page</a>.</p>
<h4>Highlights</h4>
<ul>
<li>Mole 2010 and Mole 2012 are both included in the purchase.&nbsp; No separate costs to purchase Mole 2010 and Mole 2012.
<li>Removed the 3 activation limitation.&nbsp; Mole can be installed on you home, laptop, and work computers.&nbsp; When you reinstall Windows, you can simply reinstall and activate Mole without having to contact support.
<li>All current Mole customers received an email today explaining how to get the new versions of both products at no additional cost to them.</li>
</ul>
<p>If you’re not using Mole in your WPF, and .NET development you should be.&nbsp; It will really help you when debugging applications and viewing data at debug time.&nbsp; </p>
<p>You can get a trial version of Mole here:&nbsp; <a href="http://www.molosoft.com/latestversionsofmole/" target="_blank">http://www.molosoft.com/latestversionsofmole/</a></p>
<p style="text-align:left;text-transform:none;background-color:rgb(255,255,255);text-indent:0;letter-spacing:normal;font:12px/16px verdana;white-space:normal;color:rgb(51,51,51);word-spacing:0;-webkit-text-size-adjust:auto;">Have a great day,</p>
<p style="text-align:left;text-transform:none;background-color:rgb(255,255,255);text-indent:0;letter-spacing:normal;font:12px/16px verdana;white-space:normal;color:rgb(51,51,51);word-spacing:0;-webkit-text-size-adjust:auto;"><span style="color:rgb(192,148,63);">Just a grain of sand on the worlds beaches.</span></p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/mole/'>Mole</a>, <a href='http://karlshifflett.wordpress.com/category/mole-2010/'>Mole 2010</a>, <a href='http://karlshifflett.wordpress.com/category/mole-2012/'>Mole 2012</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1809/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1809/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1809&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2013/03/09/mole-2010-and-mole-2012-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>

		<media:content url="http://karlshifflett.files.wordpress.com/2013/03/molelogonoversion_thumb.png" medium="image">
			<media:title type="html">molelogoNoVersion</media:title>
		</media:content>
	</item>
		<item>
		<title>Speaking at Boise Code Camp March 16, 2013</title>
		<link>http://karlshifflett.wordpress.com/2013/02/25/speaking-at-boise-code-camp-march-16-2013/</link>
		<comments>http://karlshifflett.wordpress.com/2013/02/25/speaking-at-boise-code-camp-march-16-2013/#comments</comments>
		<pubDate>Mon, 25 Feb 2013 14:03:12 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Infragistics]]></category>
		<category><![CDATA[Mole]]></category>
		<category><![CDATA[Mole 2010]]></category>
		<category><![CDATA[Mole 2012]]></category>
		<category><![CDATA[Ocean]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[User Group]]></category>

		<guid isPermaLink="false">https://karlshifflett.wordpress.com/?p=1806</guid>
		<description><![CDATA[I’m very much looking forward to the 16 March, 2013 Boise Code Camp. Speakers have signed up for some very cool and informative talks. I’ve signed up for two sessions myself. The abstracts can be viewed here. An Approach to Real World Application Data Caching Using Mole for Debugging Visual Studio 2010 and 2012 Applications [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1806&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I’m very much looking forward to the 16 March, 2013 <a href="http://boisecodecamp.org/" target="_blank">Boise Code Camp</a>. Speakers have signed up for some very cool and informative talks.</p>
<p>I’ve signed up for two sessions myself. The abstracts can be <a href="http://boisecodecamp.org/sessions" target="_blank">viewed here</a>.</p>
<ul>
<li>An Approach to Real World Application Data Caching
<li>Using Mole for Debugging Visual Studio 2010 and 2012 Applications </li>
</ul>
<p>In addition, I’ll release Ocean 3 as part of the associated session source code.</p>
<p>Have a great day,</p>
<p><span style="color:rgb(192,148,63);">Just a grain of sand on the worlds beaches.</span></p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/c/'>C#</a>, <a href='http://karlshifflett.wordpress.com/category/infragistics/'>Infragistics</a>, <a href='http://karlshifflett.wordpress.com/category/mole/'>Mole</a>, <a href='http://karlshifflett.wordpress.com/category/mole-2010/'>Mole 2010</a>, <a href='http://karlshifflett.wordpress.com/category/mole-2012/'>Mole 2012</a>, <a href='http://karlshifflett.wordpress.com/category/ocean/'>Ocean</a>, <a href='http://karlshifflett.wordpress.com/category/presentations/'>Presentations</a>, <a href='http://karlshifflett.wordpress.com/category/user-group/'>User Group</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1806/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1806/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1806&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2013/02/25/speaking-at-boise-code-camp-march-16-2013/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>
	</item>
		<item>
		<title>Boise Code Camp and Ocean 3</title>
		<link>http://karlshifflett.wordpress.com/2013/02/23/boise-code-camp-and-ocean-3/</link>
		<comments>http://karlshifflett.wordpress.com/2013/02/23/boise-code-camp-and-ocean-3/#comments</comments>
		<pubDate>Sat, 23 Feb 2013 19:47:10 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://karlshifflett.wordpress.com/?p=1804</guid>
		<description><![CDATA[I&#8217;ve submitted three sessions for the Boise Code Camp on March 16, 2013.  Once they are approved, I&#8217;ll provide a link to them. In one of the sessions, I&#8217;ll be using Ocean 3.  I had received many requests, well its about time I release it. Best to you, Karl Filed under: Uncategorized<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1804&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve submitted three sessions for the Boise Code Camp on March 16, 2013.  Once they are approved, I&#8217;ll provide a link to them.</p>
<p>In one of the sessions, I&#8217;ll be using Ocean 3.  I had received many requests, well its about time I release it.</p>
<p>Best to you,</p>
<p>Karl</p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/uncategorized/'>Uncategorized</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1804/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1804/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1804&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2013/02/23/boise-code-camp-and-ocean-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>
	</item>
		<item>
		<title>Change and Deleted Item Tracking within the Infragistics DataGrid</title>
		<link>http://karlshifflett.wordpress.com/2012/07/02/change-and-deleted-item-tracking-within-the-infragistics-datagrid/</link>
		<comments>http://karlshifflett.wordpress.com/2012/07/02/change-and-deleted-item-tracking-within-the-infragistics-datagrid/#comments</comments>
		<pubDate>Tue, 03 Jul 2012 02:27:23 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[CodeProject]]></category>
		<category><![CDATA[Infragistics]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>
		<category><![CDATA[WPF Controls]]></category>
		<category><![CDATA[WPF General]]></category>

		<guid isPermaLink="false">https://karlshifflett.wordpress.com/?p=1800</guid>
		<description><![CDATA[Now that I’m back developing production Line of Business (LOB) applications again, I wanted to share some techniques and challenges that I’ve overcome in our WPF UI. Our company uses the Infragistics NetAdvantage for WPF product for our WPF UI. We have been very happy with the product, support response and updates. Currently we use [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1800&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Now that I’m back developing production Line of Business (LOB) applications again, I wanted to share some techniques and challenges that I’ve overcome in our WPF UI.</p>
<p>Our company uses the <a href="http://www.infragistics.com/dotnet/netadvantage/wpf.aspx#Overview" target="_blank">Infragistics NetAdvantage for WPF</a> product for our WPF UI. We have been very happy with the product, support response and updates. Currently we use the XamRibbon, and XamOutlookBar in our <a href="http://compositewpf.codeplex.com/" target="_blank">Prism</a> shell; the XamDataChart in our Dashboard; and XamDataGrid in our data entry forms. Our application is in its infancy and as new requirements, features and capabilities are added we will be using more of the controls in the NetAdvantage for WPF full featured suite.</p>
<h4>Introduction</h4>
<p>For my first post, I thought I would cover an aspect of using the XamDataGrid (all data grids really) that is foundational to LOB applications.</p>
<p>What I’m referring to is tracking the users edits (inserts, updates and deletes) while working in a data grid and then providing the capability to utilize the same database connection to perform the updates, and optionally perform the updates as an atomic transaction.</p>
<p>There are use cases when a user changes data in a data grid, that those changes are immediately reflected back to the database.</p>
<p>Our scenario is one where the design requires that the user be able to make their edits and then commit all the changes all at once. An example of this would be a master-detail use case, when child rows are associated with a master record, e.g. customers, orders, order detail.</p>
<p>In this example, all other development concerns such as data validation, concurrency, actually reading from or writing to a database are not part of the example code; this enables the reader to focus on one technique for tracking inserts, updates, and deletes.</p>
<h4>XamDataGrid Requirement</h4>
<p>The Infragistics XamDataGrid requires that the data source implement IBindingList in order for the data grid to support adding rows. </p>
<blockquote><p>Yes, there are techniques for dynamically adding data to your data source without having to do this, but I wanted to allow the data grid to perform its work in a natural way so our data source is derives from BindingList&lt;T&gt;.</p>
</blockquote>
<h4>Tracking Inserts, Updates and Deletes</h4>
<p>When the user deletes a row in the XamDataGrid, the row is removed from the collection and is not longer visible in the UI.</p>
<p>This is where the below ChangeTrackingBindingList&lt;T&gt; comes into play. This class keeps track of the deleted rows by adding a deleted row to an internal collection and then exposing a method (GetDeletedItems) to return those deleted rows when required. If you look below, you’ll see I’ve overridden the RemoveItem method; the implementation adds the deleted row to the internal collection of deleted rows.</p>
<p>It also exposes a method (GetChangedItems) to return only those non-deleted rows that have been inserted or updated.</p>
<pre class="code"><span style="color:blue;">namespace </span>GridEditing.Infrastructure {
    <span style="color:blue;">using </span>System;
    <span style="color:blue;">using </span>System.Collections.Generic;
    <span style="color:blue;">using </span>System.ComponentModel;
    <span style="color:blue;">using </span>System.Linq;

    <span style="color:gray;">/// &lt;summary&gt;
    /// </span><span style="color:green;">Represents the ChangeTrackingBindingList that tracks changes and deleted items.
    </span><span style="color:gray;">/// &lt;/summary&gt;
    /// &lt;typeparam name="T"&gt;
    /// </span><span style="color:green;">T: The type of object to provide change tracking binding list services for.
    </span><span style="color:gray;">/// &lt;/typeparam&gt;
    </span><span style="color:blue;">public class </span><span style="color:#2b91af;">ChangeTrackingBindingList</span>&lt;T&gt; : <span style="color:#2b91af;">BindingList</span>&lt;T&gt; <span style="color:blue;">where </span>T : <span style="color:#2b91af;">ITrackDirtyEntity </span>{

        <span style="color:#2b91af;">IList</span>&lt;T&gt; _deletedItems = <span style="color:blue;">new </span><span style="color:#2b91af;">List</span>&lt;T&gt;();

        <span style="color:gray;">/// &lt;summary&gt;
        /// </span><span style="color:green;">Initializes a new instance of the </span><span style="color:gray;">&lt;see cref="ChangeTrackingBindingList{T}"/&gt; </span><span style="color:green;">class.
        </span><span style="color:gray;">/// &lt;/summary&gt;
        </span><span style="color:blue;">public </span>ChangeTrackingBindingList() {
        }

        <span style="color:gray;">/// &lt;summary&gt;
        /// </span><span style="color:green;">Initializes a new instance of the </span><span style="color:gray;">&lt;see cref="ChangeTrackingBindingList{T}"/&gt; </span><span style="color:green;">class.
        </span><span style="color:gray;">/// &lt;/summary&gt;
        /// &lt;param name="list"&gt;</span><span style="color:green;">The list.</span><span style="color:gray;">&lt;/param&gt;
        </span><span style="color:blue;">public </span>ChangeTrackingBindingList(<span style="color:#2b91af;">IList</span>&lt;T&gt; list)
            : <span style="color:blue;">base</span>(list) {
        }

        <span style="color:gray;">/// &lt;summary&gt;
        /// </span><span style="color:green;">Gets all items in the collection.
        </span><span style="color:gray;">/// &lt;/summary&gt;
        /// &lt;returns&gt;
        ///   &lt;see cref="IEnumerable{T}"/&gt; </span><span style="color:green;">that contains all items from this collection; 
        </span><span style="color:gray;">///   </span><span style="color:green;">includes deleted and non-deleted items.
        </span><span style="color:gray;">/// &lt;/returns&gt;
        </span><span style="color:blue;">public </span><span style="color:#2b91af;">IEnumerable</span>&lt;T&gt; GetAllItems() {
            <span style="color:blue;">return this</span>.Union(_deletedItems).ToList();
        }

        <span style="color:gray;">/// &lt;summary&gt;
        /// </span><span style="color:green;">Gets items that have been changed in the collection.
        </span><span style="color:gray;">/// &lt;/summary&gt;
        /// &lt;returns&gt;
        ///   &lt;see cref="IEnumerable{T}"/&gt; </span><span style="color:green;">that contains items that have been changed; 
        </span><span style="color:gray;">///   </span><span style="color:green;">does not include deleted items.
        </span><span style="color:gray;">/// &lt;/returns&gt;
        </span><span style="color:blue;">public </span><span style="color:#2b91af;">IEnumerable</span>&lt;T&gt; GetChangedItems() {
            <span style="color:blue;">return this</span>.Where(i =&gt; i.IsDirty).ToList();
        }

        <span style="color:gray;">/// &lt;summary&gt;
        /// </span><span style="color:green;">Gets the deleted items.
        </span><span style="color:gray;">/// &lt;/summary&gt;
        /// &lt;returns&gt;
        ///   &lt;see cref="IEnumerable{T}"/&gt; </span><span style="color:green;">that contains all items deleted from this collection.
        </span><span style="color:gray;">/// &lt;/returns&gt;
        </span><span style="color:blue;">public </span><span style="color:#2b91af;">IEnumerable</span>&lt;T&gt; GetDeletedItems() {
            <span style="color:blue;">return </span>_deletedItems;
        }

        <span style="color:gray;">/// &lt;summary&gt;
        /// </span><span style="color:green;">Clears the items.
        </span><span style="color:gray;">/// &lt;/summary&gt;
        </span><span style="color:blue;">protected override void </span>ClearItems() {
            <span style="color:blue;">base</span>.ClearItems();
            _deletedItems = <span style="color:blue;">new </span><span style="color:#2b91af;">List</span>&lt;T&gt;();
        }

        <span style="color:gray;">/// &lt;summary&gt;
        /// </span><span style="color:green;">Sets the item's MarkedAsDeleted property to </span><span style="color:gray;">&lt;c&gt;</span><span style="color:green;">true</span><span style="color:gray;">&lt;/c&gt;</span><span style="color:green;">. 
        </span><span style="color:gray;">/// </span><span style="color:green;">Adds the item to the DeletedItems collection. Removes item from list.
        </span><span style="color:gray;">/// &lt;/summary&gt;
        /// &lt;param name="index"&gt;</span><span style="color:green;">The index.</span><span style="color:gray;">&lt;/param&gt;
        </span><span style="color:blue;">protected override void </span>RemoveItem(<span style="color:#2b91af;">Int32 </span>index) {
            <span style="color:blue;">var </span>item = <span style="color:blue;">this</span>[index];
            _deletedItems.Add(item);
            <span style="color:blue;">base</span>.RemoveItem(index);
        }
    }
}
</pre>
<h4>Consuming the ChangeTrackingBindingList&lt;T&gt;</h4>
<p>The below MainWindowViewModel exposes the Customers collection. The collection is initialized and customers inserted in the constructor. (please do not populate your collections in your constructors, this is demo-only code)</p>
<p>You’ll notice that after loading the customers, I loop through the collection and set the IsDirty property to false. Your base class for your entity objects should handle this for you, so that when an object is populated from a database, the object is returned from the service layer in a non-dirty state to provide accurate tracking in the UI layer. The below example is over simplified on purpose to show how the view model will process the data once the user saves their changes.</p>
<p>The most important method below is the SaveExecute method that is invoked when the user clicks the Save button. The CanSaveExecute method determines if the collection has been changed or not. Any change to the collection will cause the Save button to be enabled.</p>
<blockquote>
<p><strong>Please Note</strong>: the code in the SaveExecute method would 99.9999% of the time actually be executing in a service layer. The service layer method would receive the ChangeTrackBindingList&lt;T&gt; as an argument and would use a data layer to process the changes.</p>
</blockquote>
<p>Within the SaveExecute method we can see the workflow:</p>
<ul>
<li>Deleted items are removed from the database.
<li>Then the inserted or updated items are committed to the database.
<li>The view model would then reload the inserted and changed data into the data grid. This reloading refreshing the timestamps that play the role in concurrency and identity columns are populated after an item is inserted and reloaded from the database.</li>
</ul>
<pre class="code"><span style="color:blue;">namespace </span>GridEditing {
  <span style="color:blue;">using </span>System;
  <span style="color:blue;">using </span>System.Diagnostics;
  <span style="color:blue;">using </span>System.Linq;
  <span style="color:blue;">using </span>System.Windows.Input;
  <span style="color:blue;">using </span>GridEditing.Infrastructure;
  <span style="color:blue;">using </span>GridEditing.Model;

  <span style="color:blue;">public class </span><span style="color:#2b91af;">MainWindowViewModel </span>: <span style="color:#2b91af;">ObservableObject </span>{
    <span style="color:#2b91af;">ChangeTrackingBindingList</span>&lt;<span style="color:#2b91af;">Customer</span>&gt; _customers;
    <span style="color:#2b91af;">ICommand </span>_saveCommand;
    <span style="color:#2b91af;">Boolean </span>_customersDirty;

    <span style="color:blue;">public </span><span style="color:#2b91af;">ChangeTrackingBindingList</span>&lt;<span style="color:#2b91af;">Customer</span>&gt; Customers {
      <span style="color:blue;">get </span>{ <span style="color:blue;">return </span>_customers; }
      <span style="color:blue;">set </span>{
        _customers = <span style="color:blue;">value</span>;
        RaisePropertyChanged(<span style="color:#a31515;">"Customers"</span>);
      }
    }

    <span style="color:blue;">public </span><span style="color:#2b91af;">ICommand </span>SaveCommand {
      <span style="color:blue;">get </span>{ <span style="color:blue;">return </span>_saveCommand ?? (_saveCommand = <span style="color:blue;">new </span><span style="color:#2b91af;">RelayCommand</span>(SaveExecute, CanSaveExecute)); }
    }

    <span style="color:blue;">public </span>MainWindowViewModel() {
      <span style="color:green;">// load from the service layer
      </span><span style="color:blue;">var </span>list = <span style="color:blue;">new </span><span style="color:#2b91af;">ChangeTrackingBindingList</span>&lt;<span style="color:#2b91af;">Customer</span>&gt;();
      list.Add(<span style="color:blue;">new </span><span style="color:#2b91af;">Customer </span>{ FirstName = <span style="color:#a31515;">"Josh"</span>, LastName = <span style="color:#a31515;">"Smith"</span>, Id = 1 });
      list.Add(<span style="color:blue;">new </span><span style="color:#2b91af;">Customer </span>{ FirstName = <span style="color:#a31515;">"Sacha"</span>, LastName = <span style="color:#a31515;">"Barber"</span>, Id = 2 });
      list.Add(<span style="color:blue;">new </span><span style="color:#2b91af;">Customer </span>{ FirstName = <span style="color:#a31515;">"Brian"</span>, LastName = <span style="color:#a31515;">"Lagunas"</span>, Id = 3 });
      list.Add(<span style="color:blue;">new </span><span style="color:#2b91af;">Customer </span>{ FirstName = <span style="color:#a31515;">"Karl"</span>, LastName = <span style="color:#a31515;">"Shifflett"</span>, Id = 4 });
      <span style="color:blue;">foreach </span>(<span style="color:blue;">var </span>customer <span style="color:blue;">in </span>list) {
        customer.IsDirty = <span style="color:blue;">false</span>;
      }
      <span style="color:blue;">this</span>.Customers = list;
      <span style="color:blue;">this</span>.Customers.ListChanged += (s, e) =&gt; _customersDirty = <span style="color:blue;">true</span>;
    }

    <span style="color:#2b91af;">Boolean </span>CanSaveExecute() {
      <span style="color:blue;">return </span>_customersDirty;
    }

    <span style="color:blue;">void </span>SaveExecute() {
      <span style="color:green;">// call the service layer, passing the DeleteMarkingBindingList&lt;Customer&gt;
      // the service layer will loop through each item, and either insert it, update it, delete it, 
      // or discard.
      // this is demo code only, but demonstrates the workflow

      </span><span style="color:blue;">foreach </span>(<span style="color:blue;">var </span>customer <span style="color:blue;">in this</span>.Customers.GetDeletedItems()) {
        <span style="color:green;">// if the Id property is zero then the service layer does not have to do anything
        // if the Id property is greater than zero, the service layer will delete the item.
        // simulate removing from the data base
        </span><span style="color:#2b91af;">Debug</span>.WriteLine(
          <span style="color:#2b91af;">String</span>.Format(<span style="color:#a31515;">"Customer deleted: </span><span style="color:#3cb371;">{0} {1}</span><span style="color:#a31515;">"</span>, customer.FirstName, customer.LastName));
      }

      <span style="color:blue;">foreach </span>(<span style="color:blue;">var </span>customer <span style="color:blue;">in this</span>.Customers.GetChangedItems()) {
        <span style="color:blue;">if </span>(customer.Id == 0) {
          <span style="color:green;">// perform insert in service layer
          </span>customer.Id = <span style="color:blue;">this</span>.Customers.Max(c =&gt; c.Id) + 1;
          <span style="color:green;">// simulate inserting into the data base
          </span><span style="color:#2b91af;">Debug</span>.WriteLine(
            <span style="color:#2b91af;">String</span>.Format(<span style="color:#a31515;">"Customer inserted: </span><span style="color:#3cb371;">{0} {1}</span><span style="color:#a31515;">"</span>, customer.FirstName, customer.LastName));
        } <span style="color:blue;">else </span>{
          <span style="color:green;">// perform update in service layer
          // simulate updating the data base
          </span><span style="color:#2b91af;">Debug</span>.WriteLine(
            <span style="color:#2b91af;">String</span>.Format(<span style="color:#a31515;">"Customer updated: </span><span style="color:#3cb371;">{0} {1}</span><span style="color:#a31515;">"</span>, customer.FirstName, customer.LastName));
        }
      }

      <span style="color:green;">// reload the updated records from the database
      // simulate getting all records from the database

      </span>_customersDirty = <span style="color:blue;">false</span>;
    }
  }
}
</pre>
<h4>Running the Application</h4>
<p>When the application is initially spun up, the Save button will be disabled since no inserts, updates or deletes have taken place.</p>
<p><a href="http://karlshifflett.files.wordpress.com/2012/07/disabledbutton.png"><img style="background-image:none;margin:0 5px;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="DisabledButton" border="0" alt="DisabledButton" src="http://karlshifflett.files.wordpress.com/2012/07/disabledbutton_thumb.png?w=618&#038;h=351" width="618" height="351"></a></p>
<p>After a row has been inserted, the Save button is enabled.</p>
<p><a href="http://karlshifflett.files.wordpress.com/2012/07/enabledbutton.png"><img style="background-image:none;margin:0 5px;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="EnabledButton" border="0" alt="EnabledButton" src="http://karlshifflett.files.wordpress.com/2012/07/enabledbutton_thumb.png?w=618&#038;h=351" width="618" height="351"></a></p>
<p>To the initial data, the following changes have been made.</p>
<p><a href="http://karlshifflett.files.wordpress.com/2012/07/changesmade.png"><img style="background-image:none;margin:0 5px;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="ChangesMade" border="0" alt="ChangesMade" src="http://karlshifflett.files.wordpress.com/2012/07/changesmade_thumb.png?w=618&#038;h=351" width="618" height="351"></a></p>
<p>When the Save button is clicked, notice the Debug output window. Each of the requested operations are performed; these operations are easily driven by the ChangeTrackingBindingList&lt;T&gt;.</p>
<p><a href="http://karlshifflett.files.wordpress.com/2012/07/debugoutputwindow.png"><img style="background-image:none;margin:0 5px;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="DebugOutputWindow" border="0" alt="DebugOutputWindow" src="http://karlshifflett.files.wordpress.com/2012/07/debugoutputwindow_thumb.png?w=620&#038;h=122" width="620" height="122"></a></p>
<p>After the Save is completed, the UI will be updated as below, the Id field has been populated and the Save button is disabled again.</p>
<p><a href="http://karlshifflett.files.wordpress.com/2012/07/updatedrecords.png"><img style="background-image:none;margin:0 5px;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="UpdatedRecords" border="0" alt="UpdatedRecords" src="http://karlshifflett.files.wordpress.com/2012/07/updatedrecords_thumb.png?w=618&#038;h=351" width="618" height="351"></a></p>
<h4>UI XAML – XamDataGrid Tips</h4>
<p>The Infragistics XamDataGrid really makes it easy for developers to deliver a full-featured data grid editing experience. This example does not even scratch the surface of the many capabilities of the data grid. In future posts I’ll demonstrate some real-world scenarios with respect to the XamDataGrid’s UI capabilities, for now, let’s stick with tracking the users edits and updating the database.</p>
<h5>Tips</h5>
<p>1.&nbsp; By default the XamDataGrid will set string properties to null if the user enters a blank or empty string in the data grid. This is not the behavior I want, instead I need an empty string. This is accomplished using a no-op converter.</p>
<p>Infragistics has made applying the no-op converter a snap by setting ValueToTextConverter property on the XamTextEditor using a style as I’ve done below. In the XamDataGridNullStringPreventionConverter’s Convert and ConvertBack methods I simply return value. The causes the XamDataGrid to set string properties to an empty string instead of the null value.</p>
<p>2.&nbsp; Take a look down at the XamDataGrid.FieldSettings, you’ll notice CellClickAction has been set to EnterEditModeIfAllowed. The user no longer has to double click a cell to get into edit mode, simply clicking the cell, will put the cell in edit mode.</p>
<p>3.&nbsp; Making an Id field read-only is straightforward. Have a look at the Id field in the XamDataGrid’s FieldLayout. By setting Id columns FieldSettings.AllowEdit to false, the cells are read-only.</p>
<pre class="code"><span style="color:blue;">&lt;</span><span style="color:#a31515;">Window 
    </span><span style="color:red;">xmlns</span><span style="color:blue;">:</span><span style="color:red;">local</span><span style="color:blue;">="clr-namespace:GridEditing"
    </span><span style="color:red;">xmlns</span><span style="color:blue;">:</span><span style="color:red;">infrastructure</span><span style="color:blue;">="clr-namespace:GridEditing.Infrastructure"
    </span><span style="color:red;">x</span><span style="color:blue;">:</span><span style="color:red;">Class</span><span style="color:blue;">="GridEditing.MainWindow"
    </span><span style="color:red;">xmlns</span><span style="color:blue;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    </span><span style="color:red;">xmlns</span><span style="color:blue;">:</span><span style="color:red;">x</span><span style="color:blue;">="http://schemas.microsoft.com/winfx/2006/xaml"
    </span><span style="color:red;">Title</span><span style="color:blue;">="Data Grid Editing and Deleting" 
    </span><span style="color:red;">Height</span><span style="color:blue;">="341" 
    </span><span style="color:red;">Width</span><span style="color:blue;">="608" 
    </span><span style="color:red;">ResizeMode</span><span style="color:blue;">="NoResize"
    </span><span style="color:red;">xmlns</span><span style="color:blue;">:</span><span style="color:red;">igDP</span><span style="color:blue;">="http://infragistics.com/DataPresenter" 
    </span><span style="color:red;">xmlns</span><span style="color:blue;">:</span><span style="color:red;">igEditors</span><span style="color:blue;">="http://infragistics.com/Editors"&gt;
  &lt;</span><span style="color:#a31515;">Window.DataContext</span><span style="color:blue;">&gt;
    &lt;</span><span style="color:#a31515;">local</span><span style="color:blue;">:</span><span style="color:#a31515;">MainWindowViewModel </span><span style="color:blue;">/&gt;
  &lt;/</span><span style="color:#a31515;">Window.DataContext</span><span style="color:blue;">&gt;
  &lt;</span><span style="color:#a31515;">Window.Resources</span><span style="color:blue;">&gt;
    &lt;</span><span style="color:#a31515;">infrastructure</span><span style="color:blue;">:</span><span style="color:#a31515;">XamDataGridNullStringPreventionConverter 
      </span><span style="color:red;">x</span><span style="color:blue;">:</span><span style="color:red;">Key</span><span style="color:blue;">="XamDataGridNullStringPreventionConverter" /&gt;
  &lt;/</span><span style="color:#a31515;">Window.Resources</span><span style="color:blue;">&gt;
  &lt;</span><span style="color:#a31515;">Grid</span><span style="color:blue;">&gt;
    &lt;</span><span style="color:#a31515;">Grid.RowDefinitions</span><span style="color:blue;">&gt;
      &lt;</span><span style="color:#a31515;">RowDefinition </span><span style="color:red;">Height</span><span style="color:blue;">="Auto" /&gt;
      &lt;</span><span style="color:#a31515;">RowDefinition </span><span style="color:red;">Height</span><span style="color:blue;">="*" /&gt;
      &lt;</span><span style="color:#a31515;">RowDefinition </span><span style="color:red;">Height</span><span style="color:blue;">="Auto" /&gt;
    &lt;/</span><span style="color:#a31515;">Grid.RowDefinitions</span><span style="color:blue;">&gt;
    &lt;</span><span style="color:#a31515;">TextBlock </span><span style="color:red;">Text</span><span style="color:blue;">="Infragistics Data Grid Editing and Deleting" </span><span style="color:red;">Margin</span><span style="color:blue;">="11" </span><span style="color:red;">FontSize</span><span style="color:blue;">="18" /&gt;
    &lt;</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">XamDataGrid 
      </span><span style="color:red;">Grid.Row</span><span style="color:blue;">="1" </span><span style="color:red;">Margin</span><span style="color:blue;">="11" 
      </span><span style="color:red;">DataSource</span><span style="color:blue;">="{</span><span style="color:#a31515;">Binding </span><span style="color:red;">Path</span><span style="color:blue;">=Customers}" </span><span style="color:red;">IsNestedDataDisplayEnabled</span><span style="color:blue;">="False"&gt;
      &lt;</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">XamDataGrid.Resources</span><span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">Style </span><span style="color:red;">TargetType</span><span style="color:blue;">="{</span><span style="color:#a31515;">x</span><span style="color:blue;">:</span><span style="color:#a31515;">Type </span><span style="color:red;">TextBox</span><span style="color:blue;">}" </span><span style="color:red;">BasedOn</span><span style="color:blue;">="{</span><span style="color:#a31515;">StaticResource </span><span style="color:blue;">{</span><span style="color:#a31515;">x</span><span style="color:blue;">:</span><span style="color:#a31515;">Type </span><span style="color:red;">TextBox</span><span style="color:blue;">}}" &gt;
          &lt;</span><span style="color:#a31515;">Setter </span><span style="color:red;">Property</span><span style="color:blue;">="Margin" </span><span style="color:red;">Value</span><span style="color:blue;">="0" /&gt;
        &lt;/</span><span style="color:#a31515;">Style</span><span style="color:blue;">&gt;
        </span><span style="color:green;">&lt;!--this style is required to prevent null strings from being sent to the model--&gt;
        </span><span style="color:blue;">&lt;</span><span style="color:#a31515;">Style </span><span style="color:red;">TargetType</span><span style="color:blue;">="{</span><span style="color:#a31515;">x</span><span style="color:blue;">:</span><span style="color:#a31515;">Type </span><span style="color:red;">igEditors</span><span style="color:blue;">:</span><span style="color:red;">XamTextEditor</span><span style="color:blue;">}" &gt;
          &lt;</span><span style="color:#a31515;">Setter 
            </span><span style="color:red;">Property</span><span style="color:blue;">="ValueToTextConverter" 
            </span><span style="color:red;">Value</span><span style="color:blue;">="{</span><span style="color:#a31515;">StaticResource </span><span style="color:red;">XamDataGridNullStringPreventionConverter</span><span style="color:blue;">}" /&gt;
        &lt;/</span><span style="color:#a31515;">Style</span><span style="color:blue;">&gt;
      &lt;/</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">XamDataGrid.Resources</span><span style="color:blue;">&gt;
      &lt;</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">XamDataGrid.FieldSettings</span><span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">FieldSettings </span><span style="color:red;">CellClickAction</span><span style="color:blue;">="EnterEditModeIfAllowed" /&gt;
      &lt;/</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">XamDataGrid.FieldSettings</span><span style="color:blue;">&gt;
      &lt;</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">XamDataGrid.FieldLayoutSettings</span><span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">FieldLayoutSettings 
                    </span><span style="color:red;">SupportDataErrorInfo</span><span style="color:blue;">="None"
                    </span><span style="color:red;">DataErrorDisplayMode</span><span style="color:blue;">="None" 
                    </span><span style="color:red;">AutoGenerateFields</span><span style="color:blue;">="False"
                    </span><span style="color:red;">AddNewRecordLocation</span><span style="color:blue;">="OnBottom" 
                    </span><span style="color:red;">AllowAddNew</span><span style="color:blue;">="True" 
                    </span><span style="color:red;">AllowClipboardOperations</span><span style="color:blue;">="All" 
                    </span><span style="color:red;">AllowDelete</span><span style="color:blue;">="True" 
                    </span><span style="color:red;">ExpansionIndicatorDisplayMode</span><span style="color:blue;">="Never" /&gt;
      &lt;/</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">XamDataGrid.FieldLayoutSettings</span><span style="color:blue;">&gt;
      &lt;</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">XamDataGrid.FieldLayouts</span><span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">FieldLayout</span><span style="color:blue;">&gt;
          &lt;</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">FieldLayout.SortedFields</span><span style="color:blue;">&gt;
            &lt;</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">FieldSortDescription </span><span style="color:red;">FieldName</span><span style="color:blue;">="Id" </span><span style="color:red;">Direction</span><span style="color:blue;">="Ascending" /&gt;
          &lt;/</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">FieldLayout.SortedFields</span><span style="color:blue;">&gt;
          &lt;</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">Field </span><span style="color:red;">Name</span><span style="color:blue;">="Id"&gt;
            &lt;</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">Field.Settings</span><span style="color:blue;">&gt;
              &lt;</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">FieldSettings </span><span style="color:red;">AllowEdit</span><span style="color:blue;">="False" /&gt;
            &lt;/</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">Field.Settings</span><span style="color:blue;">&gt;
          &lt;/</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">Field</span><span style="color:blue;">&gt;
          &lt;</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">Field </span><span style="color:red;">Name</span><span style="color:blue;">="FirstName" </span><span style="color:red;">Width</span><span style="color:blue;">="200" /&gt;
          &lt;</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">Field </span><span style="color:red;">Name</span><span style="color:blue;">="LastName" </span><span style="color:red;">Width</span><span style="color:blue;">="200" /&gt;
        &lt;/</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">FieldLayout</span><span style="color:blue;">&gt;
      &lt;/</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">XamDataGrid.FieldLayouts</span><span style="color:blue;">&gt;
    &lt;/</span><span style="color:#a31515;">igDP</span><span style="color:blue;">:</span><span style="color:#a31515;">XamDataGrid</span><span style="color:blue;">&gt;

    &lt;</span><span style="color:#a31515;">Button 
      </span><span style="color:red;">Width</span><span style="color:blue;">="65" </span><span style="color:red;">Margin</span><span style="color:blue;">="7" </span><span style="color:red;">Grid.Row</span><span style="color:blue;">="2" </span><span style="color:red;">Content</span><span style="color:blue;">="Save" 
      </span><span style="color:red;">Command</span><span style="color:blue;">="{</span><span style="color:#a31515;">Binding </span><span style="color:red;">Path</span><span style="color:blue;">=SaveCommand}" </span><span style="color:red;">HorizontalAlignment</span><span style="color:blue;">="Right"/&gt;

  &lt;/</span><span style="color:#a31515;">Grid</span><span style="color:blue;">&gt;
&lt;/</span><span style="color:#a31515;">Window</span><span style="color:blue;">&gt;

</span></pre>
<h4>Download</h4>
<p>After downloading change the extension from .zip.DOC to .zip. This is a requirement of WordPress.</p>
<p>Download <a href="http://karlshifflett.files.wordpress.com/2012/07/gridediting-zip.doc" target="_blank">Demo Application (25K)</a></p>
<h4>Requirements</h4>
<p>To run the demo application, you’ll need to get the Infragistics NetAdvantage for WPF. A demo version is available <a href="http://www.infragistics.com/dotnet/netadvantage/wpf.aspx#Downloads" target="_blank">here</a>.</p>
<h4>Close</h4>
<p>There are business frameworks like <a href="http://lhotka.net/cslanet/" target="_blank">CSLA</a> that have trackable objects and handle the above scenarios I’ve shown. Currently, I prefer to the simplest solution possible and use the above for tracking user changes within the XamDataGrid.</p>
<p>You can see the amount of very simple code to enable this scenario is small, easy to understand and implement.</p>
<p>Have a great day,</p>
<p><span style="color:rgb(192,148,63);">Just a grain of sand on the worlds beaches.</span></p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/c/'>C#</a>, <a href='http://karlshifflett.wordpress.com/category/codeproject/'>CodeProject</a>, <a href='http://karlshifflett.wordpress.com/category/infragistics/'>Infragistics</a>, <a href='http://karlshifflett.wordpress.com/category/tips/'>Tips</a>, <a href='http://karlshifflett.wordpress.com/category/visual-studio-2010/'>Visual Studio 2010</a>, <a href='http://karlshifflett.wordpress.com/category/wpf-controls/'>WPF Controls</a>, <a href='http://karlshifflett.wordpress.com/category/wpf-general/'>WPF General</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1800/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1800/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1800&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2012/07/02/change-and-deleted-item-tracking-within-the-infragistics-datagrid/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>

		<media:content url="http://karlshifflett.files.wordpress.com/2012/07/disabledbutton_thumb.png" medium="image">
			<media:title type="html">DisabledButton</media:title>
		</media:content>

		<media:content url="http://karlshifflett.files.wordpress.com/2012/07/enabledbutton_thumb.png" medium="image">
			<media:title type="html">EnabledButton</media:title>
		</media:content>

		<media:content url="http://karlshifflett.files.wordpress.com/2012/07/changesmade_thumb.png" medium="image">
			<media:title type="html">ChangesMade</media:title>
		</media:content>

		<media:content url="http://karlshifflett.files.wordpress.com/2012/07/debugoutputwindow_thumb.png" medium="image">
			<media:title type="html">DebugOutputWindow</media:title>
		</media:content>

		<media:content url="http://karlshifflett.files.wordpress.com/2012/07/updatedrecords_thumb.png" medium="image">
			<media:title type="html">UpdatedRecords</media:title>
		</media:content>
	</item>
		<item>
		<title>Insidious ByRef Legacy Code Issue</title>
		<link>http://karlshifflett.wordpress.com/2012/04/24/insidious-byref-legacy-code-issue/</link>
		<comments>http://karlshifflett.wordpress.com/2012/04/24/insidious-byref-legacy-code-issue/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 13:22:30 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[Exceptions]]></category>
		<category><![CDATA[Troubleshooting]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[Visual Studio 2008]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>

		<guid isPermaLink="false">https://karlshifflett.wordpress.com/?p=1786</guid>
		<description><![CDATA[The ByRef in the title should give you a hint that this is about legacy VB.NET code. One of my duties at my new job is to maintain our legacy VB.NET codebase until we deploy our WPF software. When I use the term legacy it should not be taken in a negative manner. Our legacy [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1786&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>The ByRef in the title should give you a hint that this is about legacy VB.NET code.</p>
<p>One of my duties at my new job is to maintain our legacy VB.NET codebase until we deploy our WPF software. When I use the term legacy it should not be taken in a negative manner. Our legacy code runs our company everyday and does it very well.</p>
<p>If you don’t know, VB.NET has a powerful but insidious property on Microsoft.VisualBasic.DateAndTime module called <a href="http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&amp;l=EN-US&amp;k=k(MICROSOFT.VISUALBASIC.DATEANDTIME.TODAY);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV2.0%22);k(DevLang-VB)&amp;rd=true" target="_blank">Today</a>. Well, this little beast is a read-<strong>write</strong> property to the <strong>system date</strong>. </p>
<p>Yesterday I got a report of an exception that we have never seen before, System.Security.SecurityException; user does not have permission to change the system date.</p>
<p>Over the last few weeks we have been moving from Windows XP to Windows 7 with UAC set at the Default level (as it should be.) We are running in a different, more secure computing environment. The user that reported the issue was upgraded yesterday morning.</p>
<p>After researching the problem it turns out that we had several method calls within our legacy application that were passing <strong>Today</strong> ByRef. Yes, you guessed it; this caused a call to update the system date each time these methods were executed and returned. In reality no real damage was done; however under Windows 7 with UAC turned on, it caused the above security exception.</p>
<h4></h4>
<h4>Solution</h4>
<p>I found every instance of <strong>Today</strong> in the code and changed it to, <strong>Date.Today</strong> which is the read-only syntax.&nbsp; You can also use Today.Date.</p>
<p>If you are maintaining legacy code that you didn’t write and have an unexplained issue, looking at method calls that are passed ByRef might help.&nbsp; </p>
<p>If you have <strong>Today</strong> in your VB.NET code, take a look and make sure it’s not being passed ByRef and make sure you code is not mutating it.</p>
<p><span style="widows:2;text-transform:none;text-indent:0;letter-spacing:normal;border-collapse:separate;font:medium 'Times New Roman';white-space:normal;orphans:2;color:rgb(0,0,0);word-spacing:0;" class="Apple-style-span"><span style="text-align:left;line-height:16px;font-family:verdana;color:rgb(51,51,51);font-size:12px;" class="Apple-style-span">
<p>Have a great day,</p>
<p><span style="color:rgb(192,148,63);">Just a grain of sand on the worlds beaches.</span></p>
<p></span></span></p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/exceptions/'>Exceptions</a>, <a href='http://karlshifflett.wordpress.com/category/troubleshooting/'>Troubleshooting</a>, <a href='http://karlshifflett.wordpress.com/category/vbnet/'>VB.NET</a>, <a href='http://karlshifflett.wordpress.com/category/visual-studio-2008/'>Visual Studio 2008</a>, <a href='http://karlshifflett.wordpress.com/category/visual-studio-2010/'>Visual Studio 2010</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1786/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1786/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1786&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2012/04/24/insidious-byref-legacy-code-issue/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>
	</item>
		<item>
		<title>Coding Signing Internal Applications and a Gotcha</title>
		<link>http://karlshifflett.wordpress.com/2012/04/16/coding-signing-internal-applications-and-a-gotcha/</link>
		<comments>http://karlshifflett.wordpress.com/2012/04/16/coding-signing-internal-applications-and-a-gotcha/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 19:25:42 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">https://karlshifflett.wordpress.com/?p=1783</guid>
		<description><![CDATA[This blog post explains one way to code sign your internal applications along with their installers. Code signing your applications and installers provide a UAC friendly user experience during installation, uninstall, and when your legacy applications may need to run with administrative privileges (more about admin privileges below). UAC Friendly Installation Experience The below image [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1783&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>This blog post explains one way to code sign your internal applications along with their installers. Code signing your applications and installers provide a UAC friendly user experience during installation, uninstall, and when your legacy applications may need to run with administrative privileges (more about admin privileges below).</p>
<h4>UAC Friendly Installation Experience</h4>
<p>The below image pictures a user friendly UAC dialog, complete with Program name, Verified publisher. If you internal applications are not code signed, the user will get a warning dialog, with a bizarre program name, and Verified publisher set to unknown.</p>
<p>I don’t know about you, but I would rather condition my users to see UAC friendly dialogs, rather than the warning dialog. Next thing you know, they have “accidently” approved a UAC warning that could cause you a big problem.</p>
<p><a href="http://karlshifflett.files.wordpress.com/2012/04/installationuac.png"><img style="background-image:none;margin:0 5px;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="InstallationUAC" border="0" alt="InstallationUAC" src="http://karlshifflett.files.wordpress.com/2012/04/installationuac_thumb.png?w=548&#038;h=313" width="548" height="313"></a></p>
<blockquote><p><font color="#333333">If you are signing applications that are not internal to your organization, the content surrounding certificates and the guidance surrounding signtool.exe may violate your organizations code signing rules or procedures.</font></p>
<p><font color="#333333">This blog post is about code signing <strong>internal applications</strong> that will be used within your organization.</font></p>
</blockquote>
<h4></h4>
<h4>Code Signing Certificate</h4>
<p>The first order of business is to get a code signing certificate installed on machines that will build your internal applications. You can see from the below image, that my certificate server gmcx-Security-CA has issued a code signing certificate and that I have imported that certificate into the “Personal” Store under the “Certificates” folder.</p>
<p>To be honest, creating a code signing certificate that did not have my name on it, instead had our organization’s name is was bit of a PIA and required creating a certificate template on the certificate server that allowed me to do this. I found this TechNet article very helpful: </p>
<p><a href="http://technet.microsoft.com/en-us/library/cc731705(v=ws.10).aspx"><u>http://technet.microsoft.com/en-us/library/cc731705(v=ws.10).aspx</u></a></p>
<p><a href="http://karlshifflett.files.wordpress.com/2012/04/certificate-manager.png"><img style="background-image:none;margin:0 5px;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Certificate Manager" border="0" alt="Certificate Manager" src="http://karlshifflett.files.wordpress.com/2012/04/certificate-manager_thumb.png?w=700&#038;h=387" width="700" height="387"></a></p>
<p>After you create the certificate, export it and import it on all machines under the users “Personal” store as above.</p>
<p>For example, I have this certificate installed on our two developer machines and on the build server.</p>
<h4>Configuring the Solution (executable projects)</h4>
<p>There are several ways to configure actions that take place during MSBuilds. I have chosen the “batch file” method because it is very easy to implement and debug. You could leverage one of two out-of-the-box build Tasks or create your own build task, but I chose “batch files” for the above reasons.</p>
<p>Notice that I have checked these batch files into source control. This ensures that all machines can build the solution correctly. </p>
<p><a href="http://karlshifflett.files.wordpress.com/2012/04/projectbatchfiles.png"><img style="background-image:none;margin:0 5px;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="ProjectBatchFiles" border="0" alt="ProjectBatchFiles" src="http://karlshifflett.files.wordpress.com/2012/04/projectbatchfiles_thumb.png?w=234&#038;h=407" width="234" height="407"></a></p>
<h5>AfterBuildTasksDebug.bat</h5>
<p>If your scenario requires code signing the debug build, the below batch file uses the signtool.exe program to code sign the .exe program. You “could” also pass in command line parameters to the batch file that would include the folder name of the target along with the target name.&nbsp; I’ve kept this simple to make it easier to understand all the pieces. </p>
<p>Notice that I didn’t have to specify a certificate, password, etc.&nbsp; This is because I only have one code signing certificate installed on my machine.&nbsp; The “/a” switch instructs signtool to automatically pick the code signing certificate from my “Personal” store.</p>
<div class="code">
<p>@echo on</p>
<p>call &#8220;C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat&#8221;</p>
<p>call signtool sign /a &#8220;C:\Projects\GMC\Src\GMC\bin\Debug\GMC.exe&#8221;</p>
<p></div>
<h5>AfterBuildTasksRelease.bat and the Gotcha</h5>
<blockquote><p>Now time for a nasty gotcha. This little beast cost me about 2 hours trying to figure out why, every time I did a Release build using the Setup project to build and create the install package that the .exe the installer installed was not longer signed.</p>
<p>Read this thread on the Windows Dev Center for full details:</p>
<p><u><a href="http://social.msdn.microsoft.com/Forums/en/winformssetup/thread/e9dce89d-78ed-463b-bcb2-8f7a57e2a20e" target="_blank">Setup project strips digital signature from exe target</a></u></p>
</blockquote>
<p>Now that you have read the above thread, you’ll fully understand why when creating a release build, you must code sign the .exe under the \obj and \bin folders.</p>
<p>The signtool… commands sign my .exe. Let me call out one additional signtool switch you need to mind when signing your .exe.</p>
<p>You should also specify the “/t” switch. This will time stamp your .exe so the user knows when the .exe was built.</p>
<div class="code">
<p>@echo on</p>
<p>call &#8220;C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat&#8221;</p>
<p>call signtool sign /a /t <a href="http://timestamp.comodoca.com/authenticode" rel="nofollow">http://timestamp.comodoca.com/authenticode</a><br />&nbsp;&nbsp; &#8220;C:\Projects\GMC\Src\GMC\obj\Release\GMC.exe&#8221;</p>
<p>call signtool sign /a /t <a href="http://timestamp.comodoca.com/authenticode" rel="nofollow">http://timestamp.comodoca.com/authenticode</a><br />&nbsp;&nbsp; &#8220;C:\Projects\GMC\Src\GMC\bin\Release\GMC.exe&#8221;</p>
<p></div>
<p> <br />
<h4>Configuring Visual Studio 2010 to Use the above Batch Files During a Build</h4>
<p><a href="http://karlshifflett.files.wordpress.com/2012/04/buildevents.png"><img style="background-image:none;margin:0 5px;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="BuildEvents" border="0" alt="BuildEvents" src="http://karlshifflett.files.wordpress.com/2012/04/buildevents_thumb.png?w=424&#038;h=412" width="424" height="412"></a></p>
<ul>
<li>Open the Build Events dialog from the .exe project’s properties tab.
<li>Change the “Run the post-build event” option to “When the build updates the project output.”
<li>Enter the above text in the “Post-build event command line” text box.</li>
</ul>
<p>This will run one of the two batch files based on the configuration, Debug or Release.</p>
<h4>Building the Solution</h4>
<p>Like many of you, I don’t build my Release builds within Visual Studio.&nbsp; Some use a build server, others build them from the command line to allow other tasks to be accomplished.</p>
<p>Below is a fragment of a batch file that I use when building a release build.&nbsp; The devenv… command rebuilds my solution. Notice the “/rebuild” switch instead of the “/build” switch.</p>
<p>The signtool… command signs my .msi installer that the Setup project built. Let me call out two additional signtool switches you need to mind.</p>
<p>It is important that you specify the “/d” switch for your .msi installers. If you scroll back up to the top of this blog post and view the UAC image, you’ll notice the Program name matches the text in the below “/d” switch. If you don’t specify this, your user will see some bizarre text.</p>
<p>You should also specify the “/t” switch. This will time stamp your installer so the user knows when the installer was built.</p>
<div class="code">
<p>@echo on</p>
<p>call &#8220;C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat&#8221;</p>
<p>devenv /rebuild Release /project GMC_Setup C:\Projects\GMC\Gmc.sln</p>
<p>echo .<br />echo .<br />pause</p>
<p>signtool sign /a /d &#8220;GMC for Office 2010 Setup&#8221; /t <a href="http://timestamp.comodoca.com/authenticode" rel="nofollow">http://timestamp.comodoca.com/authenticode</a><br />&nbsp;&nbsp; C:\Projects\GMC\Src\GMC_Setup\Release\GMCForOffice2010_Setup.msi</p>
<p>… additional tasks</p></div>
<h4>Legacy Applications Running on Windows 7 and Above</h4>
<p>My company has a legacy Windows Forms application that was written during the days of Windows XP.&nbsp; My company like many other enterprises never installed Windows Vista.&nbsp; Recently we installed Windows 7 on our enterprise desktops.</p>
<p>Well the legacy enterprise applications I’ve inherited do things are are not UAC friendly.&nbsp; For example, writing to the \Program Files folder and other tasks that are now under Windows 7 considered taboo.</p>
<p>Being a good Enterprise Administrator and Developer, I want all my clients running Windows 7 with UAC set to the Default setting and for my users to learn about the UAC feature and its benefits; this will provide them a safer computing environment here at work and at home.</p>
<p>Microsoft has documented UAC here: <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa511445.aspx" target="_blank">http://msdn.microsoft.com/en-us/library/windows/desktop/aa511445.aspx</a><u></u>&nbsp;&nbsp; </p>
<p>Microsoft and bloggers have documented a number of strategies for dealing with UAC and legacy applications.&nbsp; Turning UAC off or limiting its capabilities should not be considered a good option.</p>
<p>I was not willing to take on the risk of modifying our legacy applications, so I run my few enterprise applications with an embedded application manifest that tells the operating system this application requires administrator privileges to execute. All of our users are administrators on their local computer.</p>
<h5>Example Application Manifest</h5>
<p>Notice the the below application manifest that the “requestExecutionLevel” is “requireAdministrator.”</p>
<div class="code">
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243; standalone=&#8221;yes&#8221;?&gt;<br />&lt;assembly xmlns=&#8221;urn:schemas-microsoft-com:asm.v1&#8243; manifestVersion=&#8221;1.0&#8243;&gt;<br />&nbsp; &lt;assemblyIdentity version=&#8221;1.0.0.0&#8243; processorArchitecture=&#8221;X86&#8243; name=&#8221;GMC&#8221; type=&#8221;win32&#8243;/&gt;<br />&nbsp; &lt;trustInfo xmlns=&#8221;urn:schemas-microsoft-com:asm.v3&#8243;&gt;<br />&nbsp;&nbsp;&nbsp; &lt;security&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;requestedPrivileges&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;requestedExecutionLevel level=&#8221;requireAdministrator&#8221;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/requestedPrivileges&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/security&gt;<br />&nbsp; &lt;/trustInfo&gt;<br />&lt;/assembly&gt;</p>
<p></div>
<p>To embed the above application manifest you need to use the mt.exe program. I placed the below command at the top of my two batch files, AfterBuildTasksDebug.bat and AfterBuildTasksRelease.bat.</p>
<p>You’ll need to edit the paths and .exe name as well as the manifest name.</p>
<div class="code">
<p>call &#8220;C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe&#8221; -manifest<br />&nbsp;&nbsp; &#8220;C:\Projects\GMC\Src\GMC\GMC.exe.manifest&#8221;<br />&nbsp;&nbsp; -outputresource:&#8221;C:\Projects\GMC\Src\GMC\bin\Debug\GMC.exe;#1&#8243;</p>
<p></div>
<h4>Close</h4>
<p>For those of you that have the need or desire to code sign your internal enterprise applications, I hope this blog post will help you avoid the long learning curve.</p>
<p><span style="widows:2;text-transform:none;text-indent:0;letter-spacing:normal;border-collapse:separate;font:medium 'Times New Roman';white-space:normal;orphans:2;color:rgb(0,0,0);word-spacing:0;" class="Apple-style-span"><span style="text-align:left;line-height:16px;font-family:verdana;color:rgb(51,51,51);font-size:12px;" class="Apple-style-span">
<p>Have a great day,</p>
<p><span style="color:rgb(192,148,63);">Just a grain of sand on the worlds beaches.</span></p>
<p></span></span></p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/tips/'>Tips</a>, <a href='http://karlshifflett.wordpress.com/category/visual-studio-2010/'>Visual Studio 2010</a>, <a href='http://karlshifflett.wordpress.com/category/windows-7/'>Windows 7</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1783/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1783/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1783&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2012/04/16/coding-signing-internal-applications-and-a-gotcha/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>

		<media:content url="http://karlshifflett.files.wordpress.com/2012/04/installationuac_thumb.png" medium="image">
			<media:title type="html">InstallationUAC</media:title>
		</media:content>

		<media:content url="http://karlshifflett.files.wordpress.com/2012/04/certificate-manager_thumb.png" medium="image">
			<media:title type="html">Certificate Manager</media:title>
		</media:content>

		<media:content url="http://karlshifflett.files.wordpress.com/2012/04/projectbatchfiles_thumb.png" medium="image">
			<media:title type="html">ProjectBatchFiles</media:title>
		</media:content>

		<media:content url="http://karlshifflett.files.wordpress.com/2012/04/buildevents_thumb.png" medium="image">
			<media:title type="html">BuildEvents</media:title>
		</media:content>
	</item>
		<item>
		<title>Boise Code Camp Prism, Ocean 3 Session</title>
		<link>http://karlshifflett.wordpress.com/2012/03/24/boise-code-camp-prism-ocean-3-session/</link>
		<comments>http://karlshifflett.wordpress.com/2012/03/24/boise-code-camp-prism-ocean-3-session/#comments</comments>
		<pubDate>Sat, 24 Mar 2012 16:31:53 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[Ocean]]></category>
		<category><![CDATA[Prism]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>
		<category><![CDATA[WPF Business Application Series]]></category>
		<category><![CDATA[WPF Controls]]></category>
		<category><![CDATA[WPF General]]></category>

		<guid isPermaLink="false">https://karlshifflett.wordpress.com/?p=1770</guid>
		<description><![CDATA[The links to the code presented at the Boise Code Camp is in the below Downloads section. This links include Ocean 3 and a modified Prism 4 library that has two new features. The Ocean 3 solution includes a Prism Ocean Demo application that shows off Ocean working with Prism. In a later release, I’ll [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1770&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>The links to the code presented at the Boise Code Camp is in the below Downloads section.</p>
<p>This links include Ocean 3 and a modified Prism 4 library that has two new features.</p>
<p>The Ocean 3 solution includes a Prism Ocean Demo application that shows off Ocean working with Prism. In a later release, I’ll add database demonstration code as well that uses the new and improved Service&lt;T&gt; and Repository&lt;T&gt;.</p>
<p>The demo application shows off:</p>
<ul>
<li>WPF Ribbon being populated by a Prism Region; when forms are navigated to, their respective ribbon tabs are automatically rendered.
<li>Automatic view/view model wiring up by the Unity container. No view or view model navigation registrations required.
<li>Automatic setting of the correct IRegionManager on all view models; this region adapter does not draw the IRegionManager out of the IoC container, instead it uses the one assigned to the view. This technique prevents the incorrect IRegionManager being assigned in cases of child windows or scoped regions.
<li>Demonstration of a child window hosting a form; that same form can be shown within the shell or child window requiring no form or view model modifications to function correctly; i.e. no “if in popup then do this code.”
<li>When views are navigated away from, the currently focused control is cached; when that same instance of that form is navigated back to, focus will automatically be set to the correct control.
<li>Queued dialog service for forms.
<li>The view modal dialogs are asynchronous, by not blocking the UI thread, a form that has a dialog displayed, can be navigated away from and navigated back to.
<li>When a view has a view modal dialog displayed, the views ribbon tabs are automatically disabled.
<li>Ocean FormControl that provides many services for LOB forms.
<li>Ocean FormNotificationControl that shows the form status from a validation perspective.
<li>Ocean provides a comprehensive validation stack.
<li>In addition, many small features are also shown.</li>
</ul>
<p>I’ll release a new version of BBQShack soon, PrismBBQShack. This is a complete end-to-end store application that will show off all features of Ocean 3 (like the data stack) and will have a Win8, WinRT XAML touch-enabled point of sale application.</p>
<h4>Downloads</h4>
<p>After downloading, you MUST read the READ ME NOW.txt file in the Acme.Example solution.</p>
<p>After downloading, you must rename the to downloads from .zip.doc to .zip.&nbsp; This is a requirement of Word Press.</p>
<p><a href="http://karlshifflett.files.wordpress.com/2012/03/ocean3-zip.doc" target="_blank">Ocean 3</a></p>
<p><a href="http://karlshifflett.files.wordpress.com/2012/03/prism-zip.doc" target="_blank">Modified Prism 4</a></p>
<p>To use the modified Prism 4 download, after unzipping, go to the \Prism\Prism4\ folder and run these two batch files:</p>
<ul>
<li>Run Update Prism Binaries.bat</li>
<li>RegisterPrismBinaries.bat</li>
</ul>
<p>They will rebuild the supplied modified Prism 4 and will register this version of Prism in the registry so that you can use the Add References dialog. This modified version of Prism will work with any current Prism application as no API’s were removed or changed, only added.</p>
<p><span style="widows:2;text-transform:none;text-indent:0;letter-spacing:normal;border-collapse:separate;font:medium 'Times New Roman';white-space:normal;orphans:2;color:rgb(0,0,0);word-spacing:0;" class="Apple-style-span"><span style="text-align:left;line-height:16px;font-family:verdana;color:rgb(51,51,51);font-size:12px;" class="Apple-style-span">
<p>Have a great day,</p>
<p><span style="color:rgb(192,148,63);">Just a grain of sand on the worlds beaches.</span></p>
<p></span></span></p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/ocean/'>Ocean</a>, <a href='http://karlshifflett.wordpress.com/category/prism/'>Prism</a>, <a href='http://karlshifflett.wordpress.com/category/visual-studio-2010/'>Visual Studio 2010</a>, <a href='http://karlshifflett.wordpress.com/category/wpf-business-application-series/'>WPF Business Application Series</a>, <a href='http://karlshifflett.wordpress.com/category/wpf-controls/'>WPF Controls</a>, <a href='http://karlshifflett.wordpress.com/category/wpf-general/'>WPF General</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1770/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1770/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1770&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2012/03/24/boise-code-camp-prism-ocean-3-session/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>
	</item>
		<item>
		<title>Four months later&#8230;</title>
		<link>http://karlshifflett.wordpress.com/2012/03/16/four-months-later/</link>
		<comments>http://karlshifflett.wordpress.com/2012/03/16/four-months-later/#comments</comments>
		<pubDate>Fri, 16 Mar 2012 17:24:08 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Why]]></category>

		<guid isPermaLink="false">http://karlshifflett.wordpress.com/?p=1761</guid>
		<description><![CDATA[So Karl, 4 ½ months have passed, do you still think you made the right decision moving from Redmond, WA to Boise, ID? Background In Oct 2011, I moved from Redmond to Boise. Unfortunately I also had to leave Microsoft. I left Redmond because of the housing prices. (See full explanation here: http://karlshifflett.wordpress.com/2011/10/21/to-every-thing-there-is-a-season/.) To answer [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1761&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>So Karl, 4 ½ months have passed, do you still think you made the right decision moving from Redmond, WA to Boise, ID?</p>
<h4>Background</h4>
<p>In Oct 2011, I moved from Redmond to Boise. Unfortunately I also had to leave Microsoft. I left Redmond because of the housing prices. (See full explanation here: <a href="http://karlshifflett.wordpress.com/2011/10/21/to-every-thing-there-is-a-season/">http://karlshifflett.wordpress.com/2011/10/21/to-every-thing-there-is-a-season/</a>.)</p>
<p>To answer the above question, I need to provide context. These were my goals as I left Redmond:</p>
<ul>
<li>Work for a company that appreciates its employees</li>
<li>Maximum 15 minute commute</li>
<li>Light traffic during the week and on weekends</li>
<li>Purchase a new home that I could afford (got three kids in college, 401K, etc.) and pay off in 12 years</li>
<li>WPF architect-developer position</li>
</ul>
<h4>The Boise Area</h4>
<p>I spent 3 ½ months looking at new home developments and empty lots. This task takes determination and patience. I suggest you educate yourself on determining value and features along with finding a builder or real estate person you can trust and work with.</p>
<p>Last week I signed a contract to build a new custom designed home (I designed it, they build it) with Boise Hunter Homes. My home is approx. 13 minutes commute from work in a nice new development. The modern/contemporary home is 2835 sqft, a massive master suite and bath, open living area with double sided fireplace, pool room, home theater room, two offices, and 600 sqft patio. The backyard will have an outdoor kitchen, Jacuzzi, and fire pit; these items were not part of the home price.</p>
<p>Unfortunately, I learned that the Boise area has very good health care. I had a neck and spinal cord problem that required surgery, it&#8217;s been 5 weeks and I&#8217;m doing much better now.</p>
<p>Most people in Boise are truly friendly and make this an enjoyable place to live and work. I have not been stuck in traffic once since moving here. The stress level in Boise is low, you just feel relaxed; it&#8217;s hard to explain, but I feel better here. I joined a gym a few minutes from work. They have a pool, racquetball courts, and other typical gym equipment and services; cost, $360 per year.</p>
<p>This winter season, we had snow stick twice but it was gone by the next day or two. However, in 45 minutes you can be in very nice winter recreation areas for skiing, snowmobiling, etc. The winters are dry here, not like the nasty north east that has wet winters, or the ice that comes to Charlotte.</p>
<p>I&#8217;m looking forward to jet skiing this summer on one of our lakes and hiking in the surrounding area.</p>
<h4>My Company: Gayle Manufacturing Company</h4>
<p>Where you work, the people you work with, and the working environment and culture can really affect your quality of life. I&#8217;ve been very fortunate in my life, always looking forward to work each day; yes even in the Marines when we were stuck on some freezing cold mountain, hiding out in a tropical jungle, doing search and rescue missions over the Atlantic, or flying low nap of the earth over some desert, I loved it.</p>
<p>Working at GMC is no different; every morning I look forward to my work day and the tasks I will accomplish. Our company motto is, &#8220;performance through innovation.&#8221; I&#8217;m with a company were people get along, value and respect one another, whose core culture is to think outside the box; to look for ways to improve our manufacturing processes, our business processes, and our safety procedures. I&#8217;m blessed to have the opportunity to be a part of the GMC family.</p>
<p>Before my neck surgery my surgeon told me the procedure would knock me out of the game for 2-3 weeks. Well, he was not kidding. The first two weeks were brutal and I needed assistance; for example I couldn&#8217;t raise my arms to put a shirt on; even with assistance putting a shirt on was painful to say the least.</p>
<p>The owner of my company visited me 2-3 times every day, cooking, cleaning, changing my dressing, shopping, and doing laundry. One of co-workers helped out on weekends too. I&#8217;m very appreciative of the support, understanding, and care my company has provided me.</p>
<p>I value the job responsibilities and opportunities I have at GMC; my WPF and business application development experience is a good fit for the company and me.</p>
<h4>Close</h4>
<p>For me, the move to Boise has been a very good one. Short commute, affordable housing, light traffic, outdoor activities, health care I trust, friendly folks, and a wonderful company to work for.</p>
<p>I hope that you have found a nice place to live and work also.</p>
<p>We do have one opening for a Senior WPF/C# Developer. You can read the details here: <a href="http://www.gmcx.com/Employment.aspx?Area=NampaJobs">http://www.gmcx.com/Employment.aspx?Area=NampaJobs</a>.</p>
<p>Have a great day,</p>
<p><span style="color:#c0943f;">Just a grain of sand on the worlds beaches.</span></p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/uncategorized/'>Uncategorized</a>, <a href='http://karlshifflett.wordpress.com/category/why/'>Why</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1761/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1761/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1761&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2012/03/16/four-months-later/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>
	</item>
		<item>
		<title>Looking for Senior WPF/C# Developer</title>
		<link>http://karlshifflett.wordpress.com/2012/03/02/looking-for-senior-wpfc-developer/</link>
		<comments>http://karlshifflett.wordpress.com/2012/03/02/looking-for-senior-wpfc-developer/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 20:24:55 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://karlshifflett.wordpress.com/?p=1756</guid>
		<description><![CDATA[Gayle Manufacturing Company (GMC) is seeking a senior WPF/C# developer with 4+ years of WPF and 5+ years&#8217; C# of development experience to join the GMC IT Team that is currently designing and developing an upgrade to our internal material requirements planning (MRP) system. The MRP system manages all aspects of GMC&#8217;s daily operations including [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1756&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Gayle Manufacturing Company (GMC) is seeking a senior WPF/C# developer with 4+ years of WPF and 5+ years&#8217; C# of development experience to join the GMC IT Team that is currently designing and developing an upgrade to our internal material requirements planning (MRP) system. The MRP system manages all aspects of GMC&#8217;s daily operations including but not limited to Project Management, Drawing Management, Material Procurement, Product Manufacturing, and Shipping &amp; Receiving.</p>
<p>The GMC IT Team is located at the Nampa, Idaho plant. This position has office regular hours without telecommuting.</p>
<h4>The Ideal Candidate</h4>
<p>The ideal candidate will be technically proficient developer with a solid background in WPF, OO programming concepts, an understanding of common design patterns, and who delivers quality, maintainable code. The candidate will have strong leadership skills and a proven track record of developing and delivering complex software.</p>
<p>The candidate will have the ability to thrive in a small team environment and who embraces new programming challenges; whose experience, creativity, and passion for WPF are demonstrated by their work product. Additionally, the candidate will have the ability to effectively interact and communicate with non-programmer company employees.</p>
<p>This long term, high profile position plays a critical role regarding the future operations and ongoing prosperity of GMC. GMC is prepared to offer an excellent compensation and benefits package to an outstanding individual.</p>
<p>The candidate must have the following experience:</p>
<ul>
<li>5+ years of C# development</li>
<li>4+ years of WPF development</li>
<li>WPF in-depth knowledge and experience that includes: authoring custom controls, data binding, control templates, styles, triggers, behaviors, data entry forms, nested forms and grids, data validation, and MVVM.</li>
<li>Proficient with C# object oriented programming</li>
<li>Understanding of cross-cutting concerns and solutions</li>
<li>3+ years of SQL Server development using ADO.NET API&#8217;s.</li>
<li>
<div>Experience with the following would be helpful:</div>
<ul>
<li>Prism</li>
<li>Infragistics WPF controls</li>
<li>SSRS or Telerik reporting controls</li>
<li>TFS source control</li>
<li>TDD, unit and integration testing</li>
<li>Expression Blend</li>
<li>Commercial MRP systems</li>
</ul>
</li>
</ul>
<p>Qualified applicants will be vetted for technical proficiency in the above requirements.</p>
<h4>About Us</h4>
<p>Gayle Manufacturing Company has a 43 year history of growth and prosperity, whose motto is, &#8220;performance through innovation.&#8221; During those years, GMC has become an established leader and innovator in the Structural Steel Industry. GMC has a 25 year history of successful development and implementation of proprietary MRP software systems. These systems are comprehensive and sophisticated. They are very focused and tuned to the GMC business model and support the specific management and manufacturing methods developed at GMC.</p>
<h4>How to Apply</h4>
<p>Please download our job application at <a href="http://www.gaylemfg.com/Documents/Application.pdf">http://www.gaylemfg.com/Documents/Application.pdf</a>, email the completed application along with your resume to <a href="mailto:wpfposition@gmcx.com">wpfposition@gmcx.com</a> or fax to (208) 468-0500.</p>
<p>If applicable, also include a link to your blog, links to speaking engagements, and links to other on-line WPF articles you have authored.</p>
<p>In the subject field of the email, please enter the following text: WPF Developer: &lt;your first and last name&gt;.</p>
<p>Have a great day,</p>
<p><span style="color:#c0943f;">Just a grain of sand on the worlds beaches.</span></p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/uncategorized/'>Uncategorized</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1756/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1756/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1756&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2012/03/02/looking-for-senior-wpfc-developer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>
	</item>
		<item>
		<title>To Every Thing There Is a Season</title>
		<link>http://karlshifflett.wordpress.com/2011/10/21/to-every-thing-there-is-a-season/</link>
		<comments>http://karlshifflett.wordpress.com/2011/10/21/to-every-thing-there-is-a-season/#comments</comments>
		<pubDate>Fri, 21 Oct 2011 13:42:24 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://karlshifflett.wordpress.com/?p=1750</guid>
		<description><![CDATA[When someone leads with a quote from Ecclesiastes 3.1, you know some sort of change is about to be announced. Friday, 28 Oct 2011 will be my last day in Redmond, and unfortunately Microsoft and the patterns &#38; practices team. My decision to leave Redmond was driven solely by the poor real estate market in [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1750&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>When someone leads with a quote from Ecclesiastes 3.1, you know some sort of change is about to be announced.</p>
<p>Friday, 28 Oct 2011 will be my last day in Redmond, and unfortunately Microsoft and the patterns &amp; practices team.</p>
<p>My decision to leave Redmond was driven solely by the poor real estate market in this area. I really want to build a new home, but know too many people here who are upside down (big $$$$) in their mortgages or who short sold their home. This was not a risk I wanted to take. Some say the market is near the bottom and now is a good time to buy here; maybe, but the cost to build a new home is higher than I want to take on and a long or hard commute is not an option for me. I prefer a 10-15 minute traffic-free drive (doesn&#8217;t everyone?)</p>
<p>This was a very difficult decision choosing between a life goal of building a new home, a short commute, and trying to stay with Microsoft in Redmond.</p>
<p>On 29 Oct 2011, I&#8217;ll be moving to Boise, Idaho and after a short break will begin a new career with <a href="http://www.gaylemfg.com/">Gayle Manufacturing Company</a>. I&#8217;m looking forward to becoming part of the GMC family and transitioning back to an architect-developer role. Over the winter I&#8217;ll work with a home builder in Boise and hope to break ground in March or April of 2012. The other night I was studying home automation; it felt good to look forward to building a home, something I have not felt in long time.</p>
<h4>Leaving Microsoft</h4>
<p>Leaving Redmond is easy (for the above reason), leaving Microsoft is difficult. I&#8217;m grateful for the opportunities I&#8217;ve been given over the last 3 years. Except for the Marine Corps, Microsoft is the best company I&#8217;ve ever worked for. I would not hesitate to recommend the opportunities at Microsoft to anyone, this super place to work.</p>
<p>I will very much miss the dedicated and very smart people at Microsoft. </p>
<p>Leaving Redmond also means moving away from friends in the area; I will miss you as well.</p>
<h4>Staying Connected</h4>
<p>My blog will continue with WPF, Prism, and enterprise development topics, and will venture into WinRT land as well. I’m looking forward to joining the user groups in Boise.</p>
<p>I will also continue to stay close with Microsoft teams and groups by participating on advisory boards and other customer channels.</p>
<h4>Close</h4>
<p>Microsoft and the people of Microsoft, thank you very much for the last three years.</p>
<p>Have a great day,</p>
<p><span style="color:rgb(192,148,63);">Just a grain of sand on the worlds beaches.</span></p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/microsoft/'>Microsoft</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1750/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1750/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1750&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2011/10/21/to-every-thing-there-is-a-season/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>
	</item>
		<item>
		<title>Windows Phone 7 Market Place Test Kit</title>
		<link>http://karlshifflett.wordpress.com/2011/10/10/windows-phone-7-market-place-test-kit/</link>
		<comments>http://karlshifflett.wordpress.com/2011/10/10/windows-phone-7-market-place-test-kit/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 18:22:43 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[Testing]]></category>
		<category><![CDATA[Windows Phone 7]]></category>

		<guid isPermaLink="false">https://karlshifflett.wordpress.com/2011/10/10/windows-phone-7-market-place-test-kit/</guid>
		<description><![CDATA[I’m starting a new project at work today to deliver MVVM guidance for the Windows Phone 7. This is going to be similar to the In the Box MVVM Training I did in Dec 2010. One tool I’ll be using is the new Windows Phone Marketplace Test Kit. From the above MSDN page: The Windows [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1749&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I’m starting a new project at work today to deliver MVVM guidance for the Windows Phone 7. This is going to be similar to the <a href="http://visualstudiogallery.msdn.microsoft.com/3ab5f02f-0c54-453c-b437-8e8d57eb9942" target="_blank">In the Box MVVM Training</a> I did in Dec 2010.</p>
<p>One tool I’ll be using is the new <a href="http://msdn.microsoft.com/en-us/library/hh394032(VS.92).aspx" target="_blank">Windows Phone Marketplace Test Kit</a>.</p>
<p>From the above MSDN page: </p>
<blockquote><p>The Windows Phone Marketplace Test Kit provides a suite of automated, monitored, and manual tests to help prepare your applications to be accepted in the Marketplace the first time you submit them. The test kit enables you to identify and fix issues prior to Marketplace submission, which saves time in the submission process. You can use the test kit to evaluate applications that target Windows Phone OS 7.1 or later. </p>
</blockquote>
<p>To open the Marketplace Test Kit, select your Windows Phone 7.1 project in the Solution Explorer. Then from the Project menu select, Open Marketplace Test Kit.</p>
<p><a href="http://karlshifflett.files.wordpress.com/2011/10/markplacetestkit.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;margin:0 5px;" title="MarkplaceTestKit" border="0" alt="MarkplaceTestKit" src="http://karlshifflett.files.wordpress.com/2011/10/markplacetestkit_thumb.png?w=700&#038;h=427" width="700" height="427"></a></p>
<p>The below tool will open allowing you to run a set of prepackaged tests and provides a UI to import the required images for your application.</p>
<p><a href="http://karlshifflett.files.wordpress.com/2011/10/markplacetestkittwo.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;margin:0 5px;" title="MarkplaceTestKittwo" border="0" alt="MarkplaceTestKittwo" src="http://karlshifflett.files.wordpress.com/2011/10/markplacetestkittwo_thumb.png?w=700&#038;h=427" width="700" height="427"></a></p>
<p>Thanks go out to the Windows Phone team for shipping this.</p>
<p>Have a great day,</p>
<p><span style="color:rgb(192,148,63);">Just a grain of sand on the worlds beaches.</span></p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/testing/'>Testing</a>, <a href='http://karlshifflett.wordpress.com/category/windows-phone-7/'>Windows Phone 7</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1749/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1749/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1749&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2011/10/10/windows-phone-7-market-place-test-kit/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>

		<media:content url="http://karlshifflett.files.wordpress.com/2011/10/markplacetestkit_thumb.png" medium="image">
			<media:title type="html">MarkplaceTestKit</media:title>
		</media:content>

		<media:content url="http://karlshifflett.files.wordpress.com/2011/10/markplacetestkittwo_thumb.png" medium="image">
			<media:title type="html">MarkplaceTestKittwo</media:title>
		</media:content>
	</item>
		<item>
		<title>Released: Project Silk Client-Side Web Development for Modern Browsers</title>
		<link>http://karlshifflett.wordpress.com/2011/09/18/released-project-silk-client-side-web-development-for-modern-browsers/</link>
		<comments>http://karlshifflett.wordpress.com/2011/09/18/released-project-silk-client-side-web-development-for-modern-browsers/#comments</comments>
		<pubDate>Sun, 18 Sep 2011 22:19:07 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Silk]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://karlshifflett.wordpress.com/?p=1738</guid>
		<description><![CDATA[The Microsoft patterns &#38; practices team is excited to announce the release of Project Silk. Project Silk Client-Side Web Development for Modern Browsers Project Silk provides guidance for building maintainable cross-browser web applications that are characterized by an intentional design, rich interactivity, and a responsive user interface (UI). The result is an immersive and engaging [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1738&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>The Microsoft patterns &amp; practices team is excited to announce the release of Project Silk.</p>
<h4>Project Silk</h4>
<h5><em>Client-Side Web Development for Modern Browsers<br /></em></h5>
<p>Project Silk provides guidance for building maintainable cross-browser web applications that are characterized by an intentional design, rich interactivity, and a responsive user interface (UI). The result is an immersive and engaging user experience (UX). Such applications take advantage of the latest web standards, including HTML5, CSS3, and ECMAScript version 5, and modern web technologies such as jQuery and ASP.NET MVC 3.</p>
<p>The concepts explained in this book are demonstrated via a real-world customer-facing web application called the Mileage Stats Reference Implementation (Mileage Stats). Mileage Stats allows users to track and compare their vehicles&#8217; fuel efficiency, usage, and operating costs, and to schedule vehicle maintenance reminders. The image below shows the Mileage Stats client-side objects and their implementation mapped to libraries or frameworks.</p>
<p><a href="http://karlshifflett.files.wordpress.com/2011/09/silkarch.jpg"><img style="display:inline;margin:0 5px;" title="SilkArch" alt="SilkArch" src="http://karlshifflett.files.wordpress.com/2011/09/silkarch_thumb.jpg?w=480&#038;h=271" width="480" height="271"></a></p>
<p>Building a rich web application that reduces the number of full-page loads, includes animations, and is responsible for updating the UI dynamically requires a thoughtful approach to managing structure, modularity, communication, navigation, and data. The book details how the Project Silk team designed Mileage Stats and solved a number of challenges.</p>
<h5>Links</h5>
<ul>
<li><a href="http://www.microsoft.com/download/en/details.aspx?id=27290">Project Silk download</a></span>
<li><a href="http://msdn.microsoft.com/en-us/library/hh396380.aspx">Project Silk Home Page on MSDN</a></span>
<li><a href="http://silk.codeplex.com/">Project Silk Community on CodePlex</a></span>
<li><a href="http://msdn.microsoft.com/en-us/library/hh404078.aspx">Project Silk Road Map</a></span>
<li><a href="http://channel9.msdn.com/posts/Project-Silk-Mileage-Stats-Application">Mileage Stats Video</a></li>
</ul>
<h5>Audience</h5>
<ul>
<li>This guidance is intended for web developers and assumes you have some hands-on experience with ASP.NET MVC, CSS, HTML, JavaScript, and jQuery. </li>
</ul>
<h5>In this Release</h5>
<ul>
<li>Project Silk Mileage Stats Reference Implementation full source code
<li>Widget QuickStart documentation and source code
<li>Unit Test Hands on Labs (3)
<li>Project Silk: Client-Side Web Development for Modern Browsers online documentation
<li>Mileage Stats Video</li>
</ul>
<h5>About patterns &amp; practices</h5>
<p>The Microsoft patterns &amp; practices team provides a wide range of guidance to help customers save time and reduce risk on their software development projects by incorporating proven patterns and practices.&nbsp; This applied engineering guidance includes both production quality source code and in-depth documentation.</p>
<p>The guidance is designed to help software development teams:</p>
<ul>
<li>Make critical design and technology selection decisions by highlighting the appropriate solution architectures, technologies, and Microsoft products for common scenarios
<li>Understand the most important concepts needed for success by explaining the relevant patterns and prescribing the important practices
<li>Get started with a proven code base by providing thoroughly tested software and source code that embodies the recommendations</li>
</ul>
<p>For more information: <a href="http://msdn.microsoft.com/practices">http://msdn.microsoft.com/practices</a></p>
<p>Have a great day,</p>
<p><span style="color:rgb(192,148,63);">Just a grain of sand on the worlds beaches.</span></p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/asp-net-mvc/'>asp.net mvc</a>, <a href='http://karlshifflett.wordpress.com/category/jquery/'>jQuery</a>, <a href='http://karlshifflett.wordpress.com/category/silk/'>Silk</a>, <a href='http://karlshifflett.wordpress.com/category/uncategorized/'>Uncategorized</a>, <a href='http://karlshifflett.wordpress.com/category/web/'>web</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1738/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1738/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1738&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2011/09/18/released-project-silk-client-side-web-development-for-modern-browsers/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>

		<media:content url="http://karlshifflett.files.wordpress.com/2011/09/silkarch_thumb.jpg" medium="image">
			<media:title type="html">SilkArch</media:title>
		</media:content>
	</item>
		<item>
		<title>Windows 8 Gives New Life to Older Hardware</title>
		<link>http://karlshifflett.wordpress.com/2011/09/18/windows-8-gives-new-life-to-older-hardware/</link>
		<comments>http://karlshifflett.wordpress.com/2011/09/18/windows-8-gives-new-life-to-older-hardware/#comments</comments>
		<pubDate>Sun, 18 Sep 2011 18:07:50 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Windows 8]]></category>

		<guid isPermaLink="false">https://karlshifflett.wordpress.com/2011/09/18/windows-8-gives-new-life-to-older-hardware/</guid>
		<description><![CDATA[Like most of you, I’ve been wonderfully surprised by the Microsoft BUILD conference this last week. The delivered software and presentations to help us get started with Windows 8 far exceeded any expectations I had. To try and add anything to what has been clearly communicated would be foolish on my part.&#160; Instead let me [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1737&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Like most of you, I’ve been wonderfully surprised by the <a href="http://www.buildwindows.com/" target="_blank">Microsoft BUILD</a> conference this last week. The delivered software and presentations to help us get started with Windows 8 far exceeded any expectations I had. </p>
<p>To try and add anything to what has been clearly communicated would be foolish on my part.&nbsp; Instead let me tell you about my “Lazarus” experience this week. </p>
<p>I’ve been eyeing the Asus EP121 for several weeks now. I got to play with one at the Bellevue Microsoft Store. This is one sweet unit.</p>
<p>Well, I have a dusty, HP tm2 TouchSmart Laptop/Tablet. It has a Core i3 1.2ghz, 4GB memory, integrated graphics card, slow 5400rpm drive. My thinking was, if I can pull a Lazarus on this computer for 6-12 months, I’ll save myself the $1,000 now and wait for the next generation hardware and with fast CPU, SSD, HD screen, etc.</p>
<p>I did use the HP tm2 for Window Phone 7 development and OneNote note taking.&nbsp; It was kind of slow, especially compared to other modern hardware. </p>
<blockquote><p>The slowness was not attributed to Windows 7, but rather to lame hardware.&nbsp; </p>
<p>PC hardware manufacturers please start making decent hardware that competes with Apple’s hardware and PLEASE stop putting crapware on my new PC. All crapware should be a line item, opt-in.</p>
<p>I need to move off this topic before I go into a tirade.</p>
<p>On the good side, one of the keynotes at BUILD showed new hardware coming soon that looks like the MacBook Air, metal, thin, etc.&nbsp; At last. Please offer good components in your units, I’ll pay for them.</p>
</blockquote>
<p>So I replaced the first generation 5,400rpm hard drive with a 7,200 second generation SATA. Was getting just a little excited, breathing new life into my laptop.</p>
<h4>Lazarus!</h4>
<p>Following simple directions on <a href="http://www.hanselman.com/blog/GuideToInstallingAndBootingWindows8DeveloperPreviewOffAVHDVirtualHardDisk.aspx" target="_blank">Scott Hanselman&#8217;s</a> blog, I loaded the Win8 Preview on a USB.</p>
<p>When I booted the laptop I change the default boot to the USB so I could install Windows.&nbsp; When Windows restarts, don’t forget to change the default boot back to your hard drive.</p>
<p>Installation took 12 minutes; Windows, Visual Studio, demo applications, etc.&nbsp; Core i3 and a decent disk, still respectable.</p>
<p>The laptop boots very quickly, applications are responsive and fun to use.&nbsp; I have not installed Office yet, but will soon. For now, just learning to get around Windows 8 and how to write Metro XAML apps.</p>
<h4>Scud Missile</h4>
<p>After I logged in, I ran Windows Update and one of the items installed was the, “Microsoft IntelliPoint 8.2 Mouse Software for Windows &#8211; 64 bit” This update on my laptop caused the touch to quick working.&nbsp; So I used Add Remove programs to uninstall it, rebooted and got touch working again.</p>
<h4>Visual Studio XAML Designer Patch</h4>
<p>You need to install a patch published by the Expression Team to correct a mouse issue with the designer.</p>
<p><a href="https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=38599">https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=38599</a></p>
<p>After downloading, don’t forget to “Unblock” the .zip file.&nbsp; The instructions left this out.</p>
<p>You MUST follow the installation instructions, most important you must install the patch as an administrator.</p>
<p>The fun part will be trying to figure out how to open an Administrator Command Prompt. I could not figure out how to do this using the Metro interface.&nbsp; So… I opened Windows Explorer in the Desktop, navigated to the \Windows\system32 folder, right-clicked on the cmd.exe file and selected, “Run as Administrator.” While you at it, go ahead and pin that Administrator Command Window to the TaskBar, problem solved.</p>
<h4>Getting Around Windows 8</h4>
<p>Since you probably won’t be writing code using your TouchScreen keyboard, you’ll want to get up to speed on Windows Shortcuts. The following blog post is being recommended by several on Twitter so I’ve included it here as well.</p>
<p><a href="http://www.winrumors.com/windows-8-tips-and-tricks-for-mousekeyboard-users/">http://www.winrumors.com/windows-8-tips-and-tricks-for-mousekeyboard-users/</a></p>
<h4>Before Your Frist Project</h4>
<p>Before you dive into your first Metro project, take time and watch some of the BUILD videos. If you only watch one video, watch this one: <a href="http://channel9.msdn.com/events/BUILD/BUILD2011/BPS-1004">http://channel9.msdn.com/events/BUILD/BUILD2011/BPS-1004</a>. Jensen Harris clearly explains Metro and the thinking behind it. He is also one of the best presenters at BUILD and connects with the audience and viewers alike.</p>
<h4></h4>
<h4>Video</h4>
<p>The below video shows my HP tm2 after the Lazarus operation.&nbsp; Short, 3 minutes gives you a good feel for how a Core i3 runs Windows 8.</p>
<p><a href="http://www.vimeo.com/29222402">http://www.vimeo.com/29222402</a></p>
<h4>Close</h4>
<p>These are good times for Windows developers.</p>
<p>For me, I’m finishing up my WPF/Prism BBQ Shack program and will move the cash register and online purchasing modules to Metro.&nbsp; Metro is perfect for a touch screen cash register.&nbsp; This will be so much fun to write.</p>
<p>Have a great day,</p>
<p><span style="color:rgb(192,148,63);">Just a grain of sand on the worlds beaches.</span></p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/hardware/'>Hardware</a>, <a href='http://karlshifflett.wordpress.com/category/windows-8/'>Windows 8</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1737/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1737/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1737&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2011/09/18/windows-8-gives-new-life-to-older-hardware/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>
	</item>
		<item>
		<title>Seattle GiveCamp Oct 21-23 2011 in Redmond</title>
		<link>http://karlshifflett.wordpress.com/2011/09/08/seattle-givecamp-oct-21-23-2011-in-redmond/</link>
		<comments>http://karlshifflett.wordpress.com/2011/09/08/seattle-givecamp-oct-21-23-2011-in-redmond/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 14:11:47 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[GiveCamp]]></category>

		<guid isPermaLink="false">https://karlshifflett.wordpress.com/2011/09/08/seattle-givecamp-oct-21-23-2011-in-redmond/</guid>
		<description><![CDATA[Give camps are a great way for developers, designers, and database administrators to give back to non-profit organizations, and to have a very fun weekend too! All the details and sign up for the Redmond GiveCamp can be read here:&#160; http://seattlegivecamp.com/ What I like about weekend events like this is the challenge: Working with a [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1736&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Give camps are a great way for developers, designers, and database administrators to give back to non-profit organizations, and to have a very fun weekend too!</p>
<p>All the details and sign up for the Redmond GiveCamp can be read here:&nbsp; <a href="http://seattlegivecamp.com/" target="_blank">http://seattlegivecamp.com/</a></p>
<p>What I like about weekend events like this is the challenge:</p>
<ul>
<li>Working with a team you may have never met</li>
<li>Writing an application you have zero up front context on</li>
<li>Delivering over the weekend an application that will be deployed and used the next week</li>
</ul>
<p>For this event, I’ll be joining a group of of Microsoft LightSwitch team members to take up the challenge of delivering an application using LightSwitch over the weekend.</p>
<p>This is a great opportunity for you to meet others, exercise your skills on a team, learn from other team members and have fun at the same time.</p>
<p>If you find yourself in Redmond in October, we hope to see you there.</p>
<p>Don’t forget you need to sign up here: <a href="http://seattlegivecamp.com/" target="_blank">http://seattlegivecamp.com/</a></p>
<p>Have a great day,</p>
<p><span style="color:rgb(192,148,63);">Just a grain of sand on the worlds beaches.</span></p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/givecamp/'>GiveCamp</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1736/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1736/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1736&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2011/09/08/seattle-givecamp-oct-21-23-2011-in-redmond/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>
	</item>
		<item>
		<title>Simplifying Prism WPF Navigation &#8211; Synchronous Navigation Confirmation</title>
		<link>http://karlshifflett.wordpress.com/2011/09/05/simplifying-prism-wpf-navigation-synchronous-navigation-confirmation/</link>
		<comments>http://karlshifflett.wordpress.com/2011/09/05/simplifying-prism-wpf-navigation-synchronous-navigation-confirmation/#comments</comments>
		<pubDate>Mon, 05 Sep 2011 21:12:27 +0000</pubDate>
		<dc:creator>Karl</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[CodeProject]]></category>
		<category><![CDATA[Navigation]]></category>
		<category><![CDATA[Prism]]></category>
		<category><![CDATA[WPF General]]></category>

		<guid isPermaLink="false">https://karlshifflett.wordpress.com/2011/09/05/simplifying-prism-wpf-navigation-synchronous-navigation-confirmation/</guid>
		<description><![CDATA[Microsoft patterns &#38; practices Prism 4 library and guidance gives WPF and Silverlight developers a very solid foundation for creating business applications. Adopting Prism patterns and library features guides the developer towards creating applications that: can evolve over time, are not tightly coupled, can be independently developed across a large team, are Blendable, and testable. [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1733&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Microsoft patterns &amp; practices <a href="http://msdn.microsoft.com/en-us/library/gg406140.aspx" target="_blank">Prism 4</a> library and guidance gives WPF and Silverlight developers a very solid foundation for creating business applications. Adopting Prism patterns and library features guides the developer towards creating applications that: can evolve over time, are not tightly coupled, can be independently developed across a large team, are Blendable, and testable.</p>
<p>New to Prism 4 was the <a href="http://msdn.microsoft.com/en-us/library/gg430861(v=PandP.40).aspx" target="_blank">Navigation API’s</a>. The use of the Navigation API’s greatly simplifies application development because the Navigation API takes over the responsibility of object creation and siting objects in the target region.</p>
<p>The Prism library is designed to support applications that can target WPF and Silverlight with good code reuse. While not all developers need this capability, a lot of thought and design decisions were made to fully support this scenario.</p>
<p>One API that took this capability into account while being designed is the Navigation API; specifically the confirmation of a navigation request. Objects that implement <a href="http://msdn.microsoft.com/en-us/library/microsoft.practices.prism.regions.iconfirmnavigationrequest(v=pandp.40).aspx" target="_blank">IConfirmNavigationRequest</a> have the option to veto a navigation request. In order to support the limitation that Silverlight does not allow blocking dialog boxes, the IConfirmNavigationRequest.ConfirmNavigationRequest method had to be written so that Silverlight objects could participate in vetoing a navigation request without a blocking dialog.</p>
<p>Without going into all the details (you can read them <a href="http://blogs.msdn.com/b/kashiffl/archive/2010/10/04/prism-v4-region-navigation-pipeline.aspx" target="_blank">here</a>), objects that implement IConfirmNavigationRequest are required to invoke the callback in the ConfirmNavigationRequest method arguments. Objects are free to implement any vetoing code they want as long as the callback is invoked.&nbsp; In practice the navigation request is halted until the callback is invoked. This design enables Silverlight developers to implement a variety UI solutions for prompting the user, for example the Prism Interaction Request.</p>
<p>I’ve found that I’m my WPF development that I had to jump through the above hoops just to have navigation confirmation, when in fact WPF has out of the box support for modal, UI blocking dialogs. In an effort to simplify my WPF applications I’ve created a replacement for the Prism RegionNavigationService that allows for synchronous navigation confirmation.</p>
<p>The implementation is very straightforward and only requires that you add one class and one interface to the Prism library and recompile it. </p>
<p>The RegionNavigationSynchronousService is the replacement for the stock RegionNavigationService. This class uses the new synchronous (blocking) navigation confirmation interface IConfirmNavigationRequestSynchronous, listed below.</p>
<pre class="code"><span style="color:blue;">public interface </span><span style="color:#2b91af;">IConfirmNavigationRequestSynchronous </span>: <span style="color:#2b91af;">INavigationAware
</span>{
    <span style="color:gray;">/// &lt;summary&gt;
    /// </span><span style="color:green;">Determines whether this instance approves being navigated away from.
    </span><span style="color:gray;">/// &lt;/summary&gt;
    /// &lt;param name="navigationContext"&gt;</span><span style="color:green;">The navigation context.</span><span style="color:gray;">&lt;/param&gt;
    </span><span style="color:#2b91af;">Boolean </span>ConfirmNavigationRequestSynchronous(<span style="color:#2b91af;">NavigationContext </span>navigationContext);
}

</pre>
<p>By default, Prism automatically registers the RegionNavigationService in the container as part of the bootstrapping pipeline. However, we want to use the WPF friendly synchronous confirmation service, RegionNavigationSynchronousService.</p>
<p>All that is required is to override the ConfigureContainer method in your bootstrapper and register RegionNavigationSynchronousService as I’ve done below.</p>
<pre class="code"><span style="color:blue;">namespace </span>TestBench {
    <span style="color:blue;">using </span>System.Windows;
    <span style="color:blue;">using </span>Microsoft.Practices.Prism.Modularity;
    <span style="color:blue;">using </span>Microsoft.Practices.Prism.Regions;
    <span style="color:blue;">using </span>Microsoft.Practices.Prism.UnityExtensions;
    <span style="color:blue;">using </span>Microsoft.Practices.Unity;
    <span style="color:blue;">using </span>TestBench.Customers;

    <span style="color:blue;">class </span><span style="color:#2b91af;">Bootstrapper </span>: <span style="color:#2b91af;">UnityBootstrapper </span>{
        <span style="color:blue;">protected override </span><span style="color:#2b91af;">IModuleCatalog </span>CreateModuleCatalog() {
            <span style="color:blue;">var </span>catalog = <span style="color:blue;">new </span><span style="color:#2b91af;">ModuleCatalog</span>();
            catalog.AddModule(<span style="color:blue;">typeof </span>(<span style="color:#2b91af;">CustomersModule</span>));
            <span style="color:blue;">return </span>catalog;
        }

        <span style="color:blue;">protected override </span><span style="color:#2b91af;">DependencyObject </span>CreateShell() {
            <span style="color:blue;">var </span>shell = <span style="color:blue;">this</span>.Container.Resolve&lt;<span style="color:#2b91af;">ShellView</span>&gt;();
            <span style="color:#2b91af;">Application</span>.Current.MainWindow = shell;
            <span style="color:#2b91af;">Application</span>.Current.MainWindow.Show();
            <span style="color:blue;">return </span>shell;
        }

        <span style="color:blue;">protected override void </span>ConfigureContainer() {
            <span style="color:blue;">base</span>.ConfigureContainer();

            <span style="color:green;">// register the new navigation service that uses synchronous navigation 
            // confirmation instead of the async confirmation.
            </span><span style="color:blue;">this</span>.Container.RegisterType(<span style="color:blue;">typeof</span>(<span style="color:#2b91af;">IRegionNavigationService</span>), 
                <span style="color:blue;">typeof</span>(<span style="color:#2b91af;">RegionNavigationSynchronousService</span>));
        }
    }
}
</pre>
<p>Below is a very simple implementation.</p>
<blockquote>
<p><font color="#333333">PLEASE do not put MessageBox code in your view models!&nbsp; This is for demo purposes only and to keep the code simple.&nbsp; Please use a dialog service that abstracts the UI dialog away from the view model.</font></p>
</blockquote>
<p>The below code is from the included download and is in the CustomerMaintenanceViewModel. The below ConfirmNavigation property allows the demo to confirm or not but is not part of the Navigation API. This method returns true or false to continue the navigation request or not.</p>
<pre class="code"><span style="color:blue;">public </span><span style="color:#2b91af;">Boolean </span>ConfirmNavigationRequestSynchronous(<span style="color:#2b91af;">NavigationContext </span>navigationContext) {
    <span style="color:blue;">if </span>(<span style="color:blue;">this</span>.ConfirmNavigation) {
        <span style="color:blue;">if </span>(<span style="color:#2b91af;">MessageBox</span>.Show(<span style="color:#a31515;">"Close form and navigate?"</span>, <span style="color:#a31515;">"Confirm Navigation"</span>, 
            <span style="color:#2b91af;">MessageBoxButton</span>.OKCancel, <span style="color:#2b91af;">MessageBoxImage</span>.Question) == <span style="color:#2b91af;">MessageBoxResult</span>.OK) {
            <span style="color:blue;">return true</span>;
        }
        <span style="color:blue;">return false</span>;
    }
    <span style="color:blue;">return true</span>;
}
</pre>
<h4>Demo Application</h4>
<p><a href="http://karlshifflett.files.wordpress.com/2011/09/syncdemo.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;margin:0 5px;" title="SyncDemo" border="0" alt="SyncDemo" src="http://karlshifflett.files.wordpress.com/2011/09/syncdemo_thumb.png?w=700&#038;h=400" width="700" height="400"></a></p>
<p>Very simple Prism application that demonstrates confirming navigation requests and region lifetime. The status bar indicates the views in the ContentRegion on the right.&nbsp; As you open or close views their name will be displayed; for the Customers, the customer number will be displayed.</p>
<p>Crack the code open, you’ll have this down in a few minutes.</p>
<h4>Download</h4>
<p><u><em>As always, don’t forget to “Unblock” the zip file after downloading from the Internet before you unzip it.</em></u></p>
<p><a href="https://skydrive.live.com/?cid=51de981e071f222b&amp;sc=documents&amp;uc=1&amp;id=51DE981E071F222B%21333#" target="_blank">Synchronous Prism Navigation (177KB)</a></p>
<p>The download includes a sample Prism solution that your can run without modifying your Prism library code.&nbsp; I’ve included a \Lib folder in the solution with pre-built, modified Prism library code.</p>
<p>I’ve also included two files in the \PrismSource folder that you can add to your Prism library. Simply copy these two files into the below folder and recompile Prism. You now have the option to use a simpler navigation confirmation API in your WPF projects.&nbsp; </p>
<blockquote>
<p><font color="#333333">This only works in WPF and NOT Silverlight.&nbsp; If you have the requirement to share code between WPF and Silverlight this will not work because Silverlight requires the navigation confirmation to be async.</font></p>
</blockquote>
<p><a href="http://karlshifflett.files.wordpress.com/2011/09/syncnav.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;margin:0 5px;" title="SyncNav" border="0" alt="SyncNav" src="http://karlshifflett.files.wordpress.com/2011/09/syncnav_thumb.png?w=437&#038;h=469" width="437" height="469"></a></p>
<p>Have a great day,</p>
<p><span style="color:rgb(192,148,63);">Just a grain of sand on the worlds beaches.</span></p>
<br />Filed under: <a href='http://karlshifflett.wordpress.com/category/c/'>C#</a>, <a href='http://karlshifflett.wordpress.com/category/codeproject/'>CodeProject</a>, <a href='http://karlshifflett.wordpress.com/category/navigation/'>Navigation</a>, <a href='http://karlshifflett.wordpress.com/category/prism/'>Prism</a>, <a href='http://karlshifflett.wordpress.com/category/wpf-general/'>WPF General</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/karlshifflett.wordpress.com/1733/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/karlshifflett.wordpress.com/1733/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=karlshifflett.wordpress.com&#038;blog=1204518&#038;post=1733&#038;subd=karlshifflett&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://karlshifflett.wordpress.com/2011/09/05/simplifying-prism-wpf-navigation-synchronous-navigation-confirmation/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/e62fc1a875bfaac4f1241bdded4b0f7f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Karl Shifflett</media:title>
		</media:content>

		<media:content url="http://karlshifflett.files.wordpress.com/2011/09/syncdemo_thumb.png" medium="image">
			<media:title type="html">SyncDemo</media:title>
		</media:content>

		<media:content url="http://karlshifflett.files.wordpress.com/2011/09/syncnav_thumb.png" medium="image">
			<media:title type="html">SyncNav</media:title>
		</media:content>
	</item>
	</channel>
</rss>
