<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Unknown Recipes</title><link>https://weblogs.asp.net:443/marianor/</link><description></description><item><title>Recursively Traversing IEnumerable&lt;T&gt;</title><link>https://weblogs.asp.net:443/marianor/recursively-traversing-ienumerable-lt-t-gt</link><description>&lt;p&gt;Most of the samples I saw about traversing an &lt;a href="http://msdn.microsoft.com/en-us/library/9eekhta0.aspx"&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/a&gt; use recursion, this can cause some overload in the stack depending on the hierarchy depth. The version I propose use a &lt;a href="http://msdn.microsoft.com/en-us/library/7977ey2c.aspx"&gt;Queue&amp;lt;T&amp;gt;&lt;/a&gt; to achieve the same; note that this is I a common algorithm named &lt;a href="http://en.wikipedia.org/wiki/Depth-first_search"&gt;Breadth-first search&lt;/a&gt;, and note that you can use a &lt;a href="http://msdn.microsoft.com/en-us/library/3278tedw.aspx"&gt;Stack&amp;lt;T&amp;gt;&lt;/a&gt; instead to turn to &lt;a href="http://en.wikipedia.org/wiki/Depth-first_search"&gt;Depth-first search&lt;/a&gt; algorithm. Here you have the extension method:&lt;/p&gt;  &lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;IEnumerable&lt;/font&gt;&lt;/span&gt;&amp;lt;T&amp;gt; Traverse&amp;lt;T&amp;gt;(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;IEnumerable&lt;/font&gt;&lt;/span&gt;&amp;lt;T&amp;gt; items,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Func&lt;/font&gt;&lt;/span&gt;&amp;lt;T, &lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;IEnumerable&lt;/font&gt;&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt; itemsEnumerator)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; queue = &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Queue&lt;/font&gt;&lt;/span&gt;&amp;lt;T&amp;gt;(items);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;while&lt;/font&gt;&lt;/span&gt; (queue.Count &amp;gt; 0)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; item = queue.Dequeue();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;yield&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; item;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt;&lt;/span&gt; (&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; child &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;/span&gt; itemsEnumerator(item))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; queue.Enqueue(child);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;The use of this extension method is really simple, for example, if we have the following class:&lt;/p&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Node&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; Node()&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;.Nodes = &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;List&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Node&lt;/font&gt;&lt;/span&gt;&amp;gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; Name { &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt;; &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;set&lt;/font&gt;&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;List&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Node&lt;/font&gt;&lt;/span&gt;&amp;gt; Nodes { &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt;; &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;set&lt;/font&gt;&lt;/span&gt;; }&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;We can use the extension method above to traverse the hierarchy in the following way:&lt;/p&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;node.Nodes.Traverse(n =&amp;gt; n.Nodes);
&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;</description><pubDate>Mon, 21 Mar 2011 12:13:55 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/recursively-traversing-ienumerable-lt-t-gt</guid><category>General</category></item><item><title>Getting the default value for a Type</title><link>https://weblogs.asp.net:443/marianor/getting-the-default-value-for-a-type</link><description>&lt;p&gt;Sometimes we need to get a default value for an specific type but we only know the type in runtime, then we can not use default(T). One way to do this is to use a simple extension method:&lt;/p&gt;  &lt;pre style="font-family: consolas"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;static&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;object&lt;/span&gt; DefaultValue(&lt;span style="color: blue"&gt;this&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Type&lt;/span&gt; type)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Expression&lt;/span&gt;.Lambda(&lt;span style="color: #2b91af"&gt;Expression&lt;/span&gt;.Default(type)).Compile().DynamicInvoke();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;As you can see it is a simple Expression tree that returns the default value for the type.&lt;/p&gt;</description><pubDate>Thu, 10 Feb 2011 02:30:35 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/getting-the-default-value-for-a-type</guid><category>General</category><category>Linq</category></item><item><title>How to implement Property Changed notification in WPF with a base ViewModel</title><link>https://weblogs.asp.net:443/marianor/how-to-implement-property-changed-notification-in-wpf-with-a-base-viewmodel</link><description>&lt;p&gt;Implement property changed notifications is tedious, there are some posts about how to implement it in a strongly-typed way. I decided combine that technique with a way to simplify the implementation of the setter.&lt;/p&gt;  &lt;p&gt;The first what you need is a base class to inherit all your view models from, this class will have the necessary methods to raise the PropertyChanged event and to set the value of the property. Here is the base class that I use:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="font-family: ; background: white"&gt;   &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 10pt"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 10pt"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;abstract&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;ObservableObject&lt;/font&gt;&lt;/span&gt; : &lt;/font&gt;&lt;span&gt;&lt;font style="font-size: 10pt" color="#2b91af"&gt;INotifyPropertyChanged&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;{&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;/span&gt; ObservableObject()&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;event&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;PropertyChangedEventHandler&lt;/font&gt;&lt;/span&gt; PropertyChanged;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; OnPropertyChanged&amp;lt;T&amp;gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;Expression&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;Func&lt;/font&gt;&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt; propertyExpresion)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; property = (&lt;span&gt;&lt;font color="#2b91af"&gt;MemberExpression&lt;/font&gt;&lt;/span&gt;)propertyExpresion.Body;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; VerifyPropertyExpression&amp;lt;T&amp;gt;(propertyExpresion, property);&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;.OnPropertyChanged(property.Member.Name);&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; OnPropertyChanged(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; propertyName)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;.PropertyChanged != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;.PropertyChanged(&lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;PropertyChangedEventArgs&lt;/font&gt;&lt;/span&gt;(propertyName));&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; SetValue&amp;lt;T&amp;gt;(&lt;span&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;/span&gt; T refValue, T newValue, &lt;span&gt;&lt;font color="#2b91af"&gt;Expression&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;Func&lt;/font&gt;&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt; propertyExpresion)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;.Equals(refValue, newValue))&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; refValue = newValue;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;.OnPropertyChanged(propertyExpresion);&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; SetValue&amp;lt;T&amp;gt;(&lt;span&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;/span&gt; T refValue, T newValue, &lt;span&gt;&lt;font color="#2b91af"&gt;Action&lt;/font&gt;&lt;/span&gt; valueChanged)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;.Equals(refValue, newValue))&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; refValue = newValue;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; valueChanged();&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span&gt;&lt;font color="#2b91af"&gt;Conditional&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;DEBUG&amp;quot;&lt;/font&gt;&lt;/span&gt;)]&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; VerifyPropertyExpression&amp;lt;T&amp;gt;(&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;Expression&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;Func&lt;/font&gt;&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt; propertyExpresion,&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;MemberExpression&lt;/font&gt;&lt;/span&gt; property)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (property.Member.GetType().IsAssignableFrom(&lt;span&gt;&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;PropertyInfo&lt;/font&gt;&lt;/span&gt;)))&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;throw&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;ArgumentException&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.Format(&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;CultureInfo&lt;/font&gt;&lt;/span&gt;.CurrentCulture,&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Invalid Property Expression {0}&amp;quot;&lt;/font&gt;&lt;/span&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; propertyExpresion));&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; instance = property.Expression &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;ConstantExpression&lt;/font&gt;&lt;/span&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (instance.Value != &lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;throw&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;ArgumentException&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.Format(&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;CultureInfo&lt;/font&gt;&lt;/span&gt;.CurrentCulture,&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Invalid Property Expression {0}&amp;quot;&lt;/font&gt;&lt;/span&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; propertyExpresion));&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Basically when you implement a property that need property changed notification, all you need to do is the following:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="font-family: ; background: white"&gt;   &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 10pt"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 10pt"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; notificable;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 10pt"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 10pt"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; Notificable&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;{&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt; { &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;.notificable; }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;set&lt;/font&gt;&lt;/span&gt; { &lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;.SetValue(&lt;span&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;.notificable, &lt;span&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;/span&gt;, () =&amp;gt; &lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;.Notificable); }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;As you can see the implementation of the setter is very simple. There are some other cases when you need execute some logic if the value of the property is changed, but you do not really need property changed notification, for that reason there is a second overload of the SetValue method:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="font-family: ; background: white"&gt;   &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 10pt"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 10pt"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; notificable;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 10pt"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 10pt"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; Notificable&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;{&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt; { &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;.notificable; }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;set&lt;/font&gt;&lt;/span&gt; { &lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;.SetValue(&lt;span&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;.notificable, &lt;span&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;.OnNotificableChanged); }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 10pt"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 10pt"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; OnNotificableChanged()&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;{&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font style="font-size: 10pt" color="#008000"&gt;// TODO seome logic here&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 10pt"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;As you can see is really easy to manage the notifications in this way.&lt;/p&gt;</description><pubDate>Thu, 28 Oct 2010 15:08:46 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/how-to-implement-property-changed-notification-in-wpf-with-a-base-viewmodel</guid><category>General</category><category>WPF</category></item><item><title>Add Service Reference from SO-Aware</title><link>https://weblogs.asp.net:443/marianor/so-aware-sdk-launched</link><description>&lt;p&gt;We have recently included a very cool feature to automatically create WCF service references (or service proxies) within Visual Studio 2010 from the SO-Aware repository. After running the installer, you will be able to find a &lt;strong&gt;"TellagoStudios.VisualStudio.Editors.SOAware.vsix"&lt;/strong&gt; extension within "C:\Program Files (x86)\Tellago Studios\SO-Aware\SDK\Visual Studio\" to register this plugin in your Visual Studio instance.&lt;/p&gt;
&lt;p&gt;In order to create a new service reference you can do right click on the project and hit &amp;ldquo;Add Service Reference from SO-Aware&amp;rdquo;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img width="640" height="457" alt="" src="https://aspblogs.blob.core.windows.net:443/media/marianor/Media/Images/Browser_011D4DFE.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Once you click on that menu option, a new screen for searching services will appear. In this screen you can select the SO-Aware repository to browse, and select the service and version for which you want to generate the proxy&lt;/p&gt;
&lt;p&gt;&lt;img width="458" height="477" alt="" src="https://aspblogs.blob.core.windows.net:443/media/marianor/Media/Images/AddSRFromSOAware_7A99F43A.png" /&gt;&lt;/p&gt;
&lt;p&gt;Finally, you will get a proxy generated just like any other &amp;ldquo;Service Reference&amp;rdquo; that you generate with Visual Studio. The magic here is that this proxy file does not require any configuration as everything is automatically resolved from the SO-Aware Repository. In fact, if you take a look at the generated code, you will notice that the base proxy class for this new proxy is "ConfigurableClientBase", which is a SO-Aware specific proxy class that knows how to retrieve endpoint and binding configurations from the repository.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt;"&gt;
&lt;p style="margin: 0px;"&gt;[System.Diagnostics.&lt;span style="color: #2b91af;"&gt;DebuggerStepThroughAttribute&lt;/span&gt;()]&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;[System.CodeDom.Compiler.&lt;span style="color: #2b91af;"&gt;GeneratedCodeAttribute&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"System.ServiceModel"&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;"4.0.0.0"&lt;/span&gt;)]&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;partial&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ProxyGeneratorServiceClient&lt;/span&gt; :&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tellago.ServiceModel.Governance.ServiceConfiguration.&lt;span style="color: #2b91af;"&gt;ConfigurableClientBase&lt;/span&gt;&amp;lt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ServiceProxySample.Sample.&lt;span style="color: #2b91af;"&gt;IProxyGeneratorService&lt;/span&gt;&amp;gt;,&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ServiceProxySample.Sample.&lt;span style="color: #2b91af;"&gt;IProxyGeneratorService&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; ProxyGeneratorServiceClient() :&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;(&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; System.&lt;span style="color: #2b91af;"&gt;Uri&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"http://localhost/SoAware/ServiceRepository.svc"&lt;/span&gt;),&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;"ProxyGeneratorService(1.0)"&lt;/span&gt;,&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;"Sample"&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; ProxyGeneratorServiceClient(System.&lt;span style="color: #2b91af;"&gt;Uri&lt;/span&gt; serviceRepositoryUri) :&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;(serviceRepositoryUri, &lt;span style="color: #a31515;"&gt;"ProxyGeneratorService(1.0)"&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;"Sample"&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; ProxyGeneratorServiceClient(&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.&lt;span style="color: #2b91af;"&gt;Uri&lt;/span&gt; serviceRepositoryUri,&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; category,&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; endpointName) :&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;(serviceRepositoryUri, &lt;span style="color: #a31515;"&gt;"ProxyGeneratorService(1.0)"&lt;/span&gt;, category, endpointName)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This class also contains a SetClientBehavior in case you want to resolve and inject "Endpoint" behavior from the repository into the proxy. For instance, this becomes handy for cases where you have credentials like certificates already configured in a behavior.&lt;/p&gt;
&lt;p&gt;You can download the SDK &lt;a href="http://www.tellagostudios.com/resources/so-aware-sdk-samples-and-utilities"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 07 Sep 2010 15:46:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/so-aware-sdk-launched</guid><category>General</category><category>WCF</category></item><item><title>SO-Aware released – WCF Repository</title><link>https://weblogs.asp.net:443/marianor/so-aware-released-wcf-repository</link><description>&lt;p&gt;&lt;a href="http://www.tellagostudios.com/"&gt;Tellago Studios&lt;/a&gt;, the company where I am working on, released a great new product called &lt;a href="http://www.tellagostudios.com/products/so-aware%E2%84%A2"&gt;SO-Aware&lt;/a&gt;. This is basically a WCF Service Repository that keeps all the configuration centralized.&lt;/p&gt;  &lt;p&gt;The repository can be accessed through OData feeds, which makes the product easily manipulated using standard http.&lt;/p&gt;  &lt;p&gt;You can get a description of this product &lt;a href="http://www.tellagostudios.com/centralizing-and-simplifying-wcf-configuration-so-aware"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 29 Jul 2010 12:35:21 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/so-aware-released-wcf-repository</guid><category>General</category><category>WCF</category></item><item><title>MOQ 4.0 Beta 3 Released</title><link>https://weblogs.asp.net:443/marianor/moq-4-0-beta-3-released</link><description>&lt;p&gt;We released MOQ 4.0 Beta 3. It was compiled for .NET Framework 3.5 &amp;amp; 4.0 and Silverlight 3 &amp;amp; 4.&lt;/p&gt;  &lt;p&gt;You can get the binaries &lt;a href="http://moq.googlecode.com/files/Moq.4.0.10531.7-bin.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 31 May 2010 19:25:07 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/moq-4-0-beta-3-released</guid><category>General</category></item><item><title>Sorting a ListView in WPF – Part II</title><link>https://weblogs.asp.net:443/marianor/sorting-a-listview-in-wpf-part-ii</link><description>&lt;p&gt;Some time ago I wrote a post about how to sort a &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.listview.aspx"&gt;ListView&lt;/a&gt; by clicking on the header of the column. The problem with that solution was that you needed to implement it each time and you have to define an explicit header for each column.&lt;/p&gt;
&lt;p&gt;As a more general solution I use attached properties to extend the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.listview.aspx"&gt;ListView&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.gridviewcolumn.aspx"&gt;GridViewColumn&lt;/a&gt;. The first attached property is tied to the ListView itself, and it indicates that the control supports sorting. This property attach or detach to the Click event of the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.gridviewcolumnheader.aspx"&gt;GridViewColumnHeader&lt;/a&gt; depending on its value. In order to enable sorting, this property should be true:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ListView&lt;/span&gt;&lt;span style="color: red;"&gt; ItemsSource&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Notes&lt;/span&gt;&lt;span style="color: blue;"&gt;}"&lt;/span&gt;&lt;span style="color: red;"&gt; l&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;SortBehavior.CanUserSortColumns&lt;/span&gt;&lt;span style="color: blue;"&gt;="true"&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; ...&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ListView&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you simply need to allow sorting for every column in your ListView and you are not applying data templates to the columns it is all that you need.&lt;/p&gt;
&lt;p&gt;The rest of the attached properties are applicable to GridViewColum and are intended to be used in some special cases. For example, if you do not want to allow sorting in a specific column, you can disable this behavior using the CanUseSort property:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;GridViewColumn&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;="50"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt; Header&lt;/span&gt;&lt;span style="color: blue;"&gt;="Id"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt; DisplayMemberBinding&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Id&lt;/span&gt;&lt;span style="color: blue;"&gt;}"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt; l&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;SortBehavior.CanUseSort&lt;/span&gt;&lt;span style="color: blue;"&gt;="false" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The value of this property indicates that you can not sort the column containing the Id.&lt;/p&gt;
&lt;p&gt;The second property (SortExpression) is useful in cases where you are using a &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.datatemplate.aspx"&gt;DataTemplate&lt;/a&gt;. The sorting property is extracted from the binding that you are using automatically, in the case of the DataTemplate this automatic behavior is simply not possible. In that case you will need to indicate the sorting property explicitly:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;GridViewColumn&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;="210"&lt;/span&gt;&lt;span style="color: red;"&gt; Header&lt;/span&gt;&lt;span style="color: blue;"&gt;="Title"&lt;/span&gt;&lt;span style="color: red;"&gt; l&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;SortBehavior.SortExpression&lt;/span&gt;&lt;span style="color: blue;"&gt;="Title"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;GridViewColumn.CellTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Run&lt;/span&gt;&lt;span style="color: red;"&gt; Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Title&lt;/span&gt;&lt;span style="color: blue;"&gt;}"&lt;/span&gt;&lt;span style="color: red;"&gt; FontWeight&lt;/span&gt;&lt;span style="color: blue;"&gt;="Bold" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;LineBreak&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Run&lt;/span&gt;&lt;span style="color: red;"&gt; Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Text&lt;/span&gt;&lt;span style="color: blue;"&gt;}" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;GridViewColumn.CellTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;GridViewColumn&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The last property (SortDirection) is used internally to track the current sort direction of each column, its values are based on &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.listsortdirection.aspx"&gt;ListSortDirection&lt;/a&gt; enum, also it can be null in case this column is not sorted. You can set this property in any column in order to define the initial sorting of the items:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;GridViewColumn&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;="130"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt; DisplayMemberBinding&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Written&lt;/span&gt;&lt;span style="color: blue;"&gt;}"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Header&lt;/span&gt;&lt;span style="color: blue;"&gt;="Date"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt; l&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;SortBehavior.SortDirection&lt;/span&gt;&lt;span style="color: blue;"&gt;="Ascending" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Finally, you can define a &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.datatemplate.aspx"&gt;DataTemplate&lt;/a&gt; that applies to every column to display some visual indicator that shows the user that this column is sorted.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Key&lt;/span&gt;&lt;span style="color: blue;"&gt;="SortHeader"&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;="3,0"&lt;/span&gt;&lt;span style="color: red;"&gt; Grid.IsSharedSizeScope&lt;/span&gt;&lt;span style="color: blue;"&gt;="True"&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;="15"&lt;/span&gt;&lt;span style="color: red;"&gt; SharedSizeGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;="ArrowHolder" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;="*" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;="15"&lt;/span&gt;&lt;span style="color: red;"&gt; SharedSizeGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;="ArrowHolder" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color: red;"&gt; Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: blue;"&gt;}"&lt;/span&gt;&lt;span style="color: red;"&gt; Grid.Column&lt;/span&gt;&lt;span style="color: blue;"&gt;="1"&lt;/span&gt;&lt;span style="color: red;"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue;"&gt;="Center" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Path&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;="arrow"&lt;/span&gt;&lt;span style="color: red;"&gt; StrokeThickness&lt;/span&gt;&lt;span style="color: blue;"&gt;="1"&lt;/span&gt;&lt;span style="color: red;"&gt; Fill&lt;/span&gt;&lt;span style="color: blue;"&gt;="DarkGray"&lt;/span&gt;&lt;span style="color: red;"&gt; Visibility&lt;/span&gt;&lt;span style="color: blue;"&gt;="Hidden"&lt;/span&gt;&lt;span style="color: red;"&gt; Grid.Column&lt;/span&gt;&lt;span style="color: blue;"&gt;="2" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataTemplate.Triggers&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MultiDataTrigger&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MultiDataTrigger.Conditions&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Condition&lt;/span&gt;&lt;span style="color: red;"&gt; Binding&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Path&lt;/span&gt;&lt;span style="color: blue;"&gt;=Column.(l:SortBehavior.CanUseSort),&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RelativeSource&lt;/span&gt;&lt;span style="color: blue;"&gt;={&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RelativeSource&lt;/span&gt;&lt;span style="color: red;"&gt; FindAncestor&lt;/span&gt;&lt;span style="color: blue;"&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AncestorType&lt;/span&gt;&lt;span style="color: blue;"&gt;={&lt;/span&gt;&lt;span style="color: #a31515;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Type&lt;/span&gt;&lt;span style="color: red;"&gt; GridViewColumnHeader&lt;/span&gt;&lt;span style="color: blue;"&gt;}}}"&lt;/span&gt;&lt;span style="color: red;"&gt; Value&lt;/span&gt;&lt;span style="color: blue;"&gt;="true" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Condition&lt;/span&gt;&lt;span style="color: red;"&gt; Binding&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Path&lt;/span&gt;&lt;span style="color: blue;"&gt;=Column.(l:SortBehavior.SortDirection),&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RelativeSource&lt;/span&gt;&lt;span style="color: blue;"&gt;={&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RelativeSource&lt;/span&gt;&lt;span style="color: red;"&gt; FindAncestor&lt;/span&gt;&lt;span style="color: blue;"&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AncestorType&lt;/span&gt;&lt;span style="color: blue;"&gt;={&lt;/span&gt;&lt;span style="color: #a31515;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Type&lt;/span&gt;&lt;span style="color: red;"&gt; GridViewColumnHeader&lt;/span&gt;&lt;span style="color: blue;"&gt;}}}"&lt;/span&gt;&lt;span style="color: red;"&gt; Value&lt;/span&gt;&lt;span style="color: blue;"&gt;="Ascending" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MultiDataTrigger.Conditions&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MultiDataTrigger.Setters&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Setter&lt;/span&gt;&lt;span style="color: red;"&gt; TargetName&lt;/span&gt;&lt;span style="color: blue;"&gt;="arrow"&lt;/span&gt;&lt;span style="color: red;"&gt; Property&lt;/span&gt;&lt;span style="color: blue;"&gt;="Data"&lt;/span&gt;&lt;span style="color: red;"&gt; Value&lt;/span&gt;&lt;span style="color: blue;"&gt;="M 5,10 L 15,10 L 10,5" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Setter&lt;/span&gt;&lt;span style="color: red;"&gt; TargetName&lt;/span&gt;&lt;span style="color: blue;"&gt;="arrow"&lt;/span&gt;&lt;span style="color: red;"&gt; Property&lt;/span&gt;&lt;span style="color: blue;"&gt;="Visibility"&lt;/span&gt;&lt;span style="color: red;"&gt; Value&lt;/span&gt;&lt;span style="color: blue;"&gt;="Visible" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MultiDataTrigger.Setters&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MultiDataTrigger&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MultiDataTrigger&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MultiDataTrigger.Conditions&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Condition&lt;/span&gt;&lt;span style="color: red;"&gt; Binding&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Path&lt;/span&gt;&lt;span style="color: blue;"&gt;=Column.(l:SortBehavior.CanUseSort),&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RelativeSource&lt;/span&gt;&lt;span style="color: blue;"&gt;={&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RelativeSource&lt;/span&gt;&lt;span style="color: red;"&gt; FindAncestor&lt;/span&gt;&lt;span style="color: blue;"&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AncestorType&lt;/span&gt;&lt;span style="color: blue;"&gt;={&lt;/span&gt;&lt;span style="color: #a31515;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Type&lt;/span&gt;&lt;span style="color: red;"&gt; GridViewColumnHeader&lt;/span&gt;&lt;span style="color: blue;"&gt;}}}"&lt;/span&gt;&lt;span style="color: red;"&gt; Value&lt;/span&gt;&lt;span style="color: blue;"&gt;="true" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Condition&lt;/span&gt;&lt;span style="color: red;"&gt; Binding&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Path&lt;/span&gt;&lt;span style="color: blue;"&gt;=Column.(l:SortBehavior.SortDirection),&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RelativeSource&lt;/span&gt;&lt;span style="color: blue;"&gt;={&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RelativeSource&lt;/span&gt;&lt;span style="color: red;"&gt; FindAncestor&lt;/span&gt;&lt;span style="color: blue;"&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AncestorType&lt;/span&gt;&lt;span style="color: blue;"&gt;={&lt;/span&gt;&lt;span style="color: #a31515;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Type&lt;/span&gt;&lt;span style="color: red;"&gt; GridViewColumnHeader&lt;/span&gt;&lt;span style="color: blue;"&gt;}}}"&lt;/span&gt;&lt;span style="color: red;"&gt; Value&lt;/span&gt;&lt;span style="color: blue;"&gt;="Descending" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MultiDataTrigger.Conditions&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MultiDataTrigger.Setters&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Setter&lt;/span&gt;&lt;span style="color: red;"&gt; TargetName&lt;/span&gt;&lt;span style="color: blue;"&gt;="arrow"&lt;/span&gt;&lt;span style="color: red;"&gt; Property&lt;/span&gt;&lt;span style="color: blue;"&gt;="Data"&lt;/span&gt;&lt;span style="color: red;"&gt; Value&lt;/span&gt;&lt;span style="color: blue;"&gt;="M 5,5 L 10,10 L 15,5" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Setter&lt;/span&gt;&lt;span style="color: red;"&gt; TargetName&lt;/span&gt;&lt;span style="color: blue;"&gt;="arrow"&lt;/span&gt;&lt;span style="color: red;"&gt; Property&lt;/span&gt;&lt;span style="color: blue;"&gt;="Visibility"&lt;/span&gt;&lt;span style="color: red;"&gt; Value&lt;/span&gt;&lt;span style="color: blue;"&gt;="Visible" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MultiDataTrigger.Setters&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MultiDataTrigger&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataTemplate.Triggers&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You can download the sample &lt;a href="https://aspblogs.blob.core.windows.net/media/marianor/Media/Samples/Samples.ListViewSort.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 10 May 2010 16:12:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/sorting-a-listview-in-wpf-part-ii</guid><category>WPF</category></item><item><title>MOQ 4.0 Beta 2 released</title><link>https://weblogs.asp.net:443/marianor/moq-4-0-beta-2-released</link><description>&lt;p&gt;We released MOQ 4.0 Beta 2, it includes some fixes over the previous version and the update to DynamicProxy 2.2. It was compiled for .NET Framework 3.5 &amp;amp; 4.0 and Silverlight 3 &amp;amp; 4.&lt;/p&gt;  &lt;p&gt;You can get the binaries &lt;a href="http://moq.googlecode.com/files/Moq.4.0.10501.6-bin.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Sun, 02 May 2010 01:59:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/moq-4-0-beta-2-released</guid><category>General</category></item><item><title>Disabling Minimize and Maximize buttons in a WPF Window</title><link>https://weblogs.asp.net:443/marianor/disabling-minimize-and-maximize-buttons-in-a-wpf-window</link><description>&lt;p&gt;In WPF there is no possibility to control when the &lt;strong&gt;Minimize&lt;/strong&gt; and &lt;strong&gt;Maximize&lt;/strong&gt; buttons are disabled when the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.window.windowstyle(v=VS.90).aspx"&gt;WindowStyle&lt;/a&gt; is &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.windowstyle.singleborderwindow(v=VS.90).aspx"&gt;SingleBorderWindow&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.windowstyle(v=VS.90).aspx"&gt;ThreeDBorderWindow&lt;/a&gt;. In Windows Forms there are some properties like &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.form.controlbox.aspx"&gt;ControlBox&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.form.minimizebox(v=VS.90).aspx"&gt;MinimizeBox&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.form.maximizebox(v=VS.90).aspx"&gt;MaximizeBox&lt;/a&gt; that allow to do that.&lt;/p&gt;
&lt;p&gt;Because the WPF window internally has a hWnd we can do this using Windows API (&lt;a href="http://msdn.microsoft.com/en-us/library/ms633584(VS.85).aspx"&gt;GetWindowLong&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/ms633591(VS.85).aspx"&gt;SetWindowLong&lt;/a&gt; will do the trick). I did three attached properties applicable to &lt;a href="http://msdn.microsoft.com/en-us/library/ms590112(v=VS.90).aspx"&gt;Window&lt;/a&gt; that use the internal API, in order to disable/hide the minimize and maximize buttons. You can use the two following attached properties:&lt;/p&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Window&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;l&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;ControlBox.HasMinimizeButton&lt;/span&gt;&lt;span style="color: blue;"&gt;="false"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;l&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;ControlBox.HasMaximizeButton&lt;/span&gt;&lt;span style="color: blue;"&gt;="false"&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The third attached property is to enable the context help button. This button is added only if the minimize and maximize buttons are not present, then the right configuration to use the context help button is:&lt;/p&gt;
&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Window&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;l&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;ControlBox.HasMinimizeButton&lt;/span&gt;&lt;span style="color: blue;"&gt;="false"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;l&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;ControlBox.HasMaximizeButton&lt;/span&gt;&lt;span style="color: blue;"&gt;="false"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;l&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;ControlBox.HasHelpButton&lt;/span&gt;&lt;span style="color: blue;"&gt;="true"&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can download the code &lt;a href="https://aspblogs.blob.core.windows.net/media/marianor/Media/Samples/Samples.Buttons.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 22 Mar 2010 20:06:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/disabling-minimize-and-maximize-buttons-in-a-wpf-window</guid><category>WPF</category></item><item><title>C# Code Snippets for properties raising PropertyChanged event</title><link>https://weblogs.asp.net:443/marianor/c-code-snippets-for-properties-raising-propertychanged-event</link><description>&lt;p&gt;I decided to publish the snippets I use to implement properties that raise the &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.propertychanged.aspx"&gt;PropertyChanged&lt;/a&gt; event. There are two code snippets, one generates a property raising the event, it is called by typing &lt;strong&gt;propnpc&lt;/strong&gt; in the code editor, and generates the following code:&lt;/p&gt;
&lt;div style="font-family: courier new; background: white; color: black; font-size: 10pt;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; myField;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; MyProperty&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.myField;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;this&lt;/span&gt;.myField != &lt;span style="color: blue;"&gt;value&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.myField = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.OnPropertyChanged(&lt;span style="color: #a31515;"&gt;"MyProperty"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The other generates the call to the event by typing &lt;strong&gt;onpc&lt;/strong&gt;:&lt;/p&gt;
&lt;div style="font-family: courier new; background: white; color: black; font-size: 10pt;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnPropertyChanged(&lt;span style="color: blue;"&gt;string&lt;/span&gt; propertyName)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;this&lt;/span&gt;.PropertyChanged != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.PropertyChanged(&lt;span style="color: blue;"&gt;this&lt;/span&gt;, &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PropertyChangedEventArgs&lt;/span&gt;(propertyName));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Both snippets work in Visual Studio 2008 and 2010 beta. You will need copy the two files to &lt;strong&gt;%USERPROFILE%\Documents\Visual Studio 2008\Code Snippets\Visual C#\My Code Snippets&lt;/strong&gt; or &lt;strong&gt;%USERPROFILE%\Documents\Visual Studio 2010\Code Snippets\Visual C#\My Code Snippets &lt;/strong&gt;folder depending of your version of Visual Studio. You can download &lt;a href="https://aspblogs.blob.core.windows.net/media/marianor/Media/Samples/PropertyChangedSnippets.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 17 Aug 2009 13:07:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/c-code-snippets-for-properties-raising-propertychanged-event</guid><category>General</category></item><item><title>MOQ 3.5 Beta released</title><link>https://weblogs.asp.net:443/marianor/moq-3-5-beta-released</link><description>&lt;p&gt;&lt;a href="http://moq.me"&gt;MOQ&lt;/a&gt; 3.5 Beta was released, it includes a lot of fixes of the previous version. You can get the binaries &lt;a href="http://moq.me/get"&gt;here&lt;/a&gt;. If you are using Visual Studio 2010 you should download the version called: &lt;a href="http://code.google.com/p/moq/downloads/detail?name=Moq.3.5.716.1-bin%20%28with%20Castle%20Assemblies%29.zip&amp;amp;can=2&amp;amp;q=#makechanges"&gt;Moq 3.5 Beta Binaries and Help (with Castle Assemblies)&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 17 Jul 2009 01:08:13 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/moq-3-5-beta-released</guid><category>General</category></item><item><title>How to get notifications in attached properties</title><link>https://weblogs.asp.net:443/marianor/how-to-get-notifications-in-attached-properties</link><description>&lt;p&gt;Sometime we need to know when an attached property change its value for a specific FrameworkElement. For example consider the following:&lt;/p&gt;  &lt;div style="font-family: courier new; background: white; color: black; font-size: 10pt"&gt;   &lt;pre style="margin: 0px"&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#804040"&gt;Canvas&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
  &lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#804040"&gt;Button&lt;/font&gt; &lt;font color="#ff0000"&gt;x&lt;/font&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;font color="#ff0000"&gt;Name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;move&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;Content&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Move&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;Canvas.Left&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;10&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;Canvas.Top&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;10&amp;quot;/&amp;gt;&lt;/font&gt;
&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#804040"&gt;Canvas&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;If in a part of the code we have something like:&lt;/p&gt;

&lt;div style="font-family: courier new; background: white; color: black; font-size: 10pt"&gt;
  &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;Canvas&lt;/span&gt;.SetLeft(&lt;span style="color: blue"&gt;this&lt;/span&gt;.move, 20);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;And we need listen when the Left attached property changed for the button, we can use a &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.dependencypropertydescriptor.aspx"&gt;DependencyPropertyDescriptor&lt;/a&gt; to do it. This class provides the &lt;a href="http://msdn.microsoft.com/en-us/library/ms655936.aspx"&gt;FromProperty&lt;/a&gt; static method, which gives as an instance of itself receiving the DependencyProperty:&lt;/p&gt;

&lt;div style="font-family: courier new; background: white; color: black; font-size: 10pt"&gt;
  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; descriptor = &lt;span style="color: #2b91af"&gt;DependencyPropertyDescriptor&lt;/span&gt;.FromProperty(&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Canvas&lt;/span&gt;.LeftProperty,&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Button&lt;/span&gt;));&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Once we have the instance of the &lt;strong&gt;DependencyPropertyDescriptor&lt;/strong&gt; we can use it to get the notifications using &lt;font size="2"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.dependencypropertydescriptor.addvaluechanged.aspx"&gt;AddValueChanged&lt;/a&gt; method:&lt;/font&gt;&lt;/p&gt;

&lt;div style="font-family: courier new; background: white; color: black; font-size: 10pt"&gt;
  &lt;div style="font-family: courier new; background: white; color: black; font-size: 10pt"&gt;
    &lt;pre style="margin: 0px"&gt;descriptor.AddValueChanged(&lt;span style="color: blue"&gt;this&lt;/span&gt;.move, &lt;span style="color: blue"&gt;this&lt;/span&gt;.OnValueChanged);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Finally we need to implement the event handler:&lt;/p&gt;

&lt;div style="font-family: courier new; background: white; color: black; font-size: 10pt"&gt;
  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; OnValueChanged(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;EventArgs&lt;/span&gt; e)&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;{&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; button = (&lt;span style="color: #2b91af"&gt;Button&lt;/span&gt;)sender;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; ...&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;</description><pubDate>Mon, 13 Jul 2009 17:41:22 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/how-to-get-notifications-in-attached-properties</guid><category>WPF</category></item><item><title>How to force a binding to update</title><link>https://weblogs.asp.net:443/marianor/how-to-force-a-binding-to-update</link><description>&lt;p&gt;It is really very simple, all that we need is the &lt;strong&gt;FrameworkElement&lt;/strong&gt; and the &lt;strong&gt;DependencyProperty&lt;/strong&gt; that we need refresh. I did some extensions method to update the target or the source of the binding:&lt;/p&gt;  &lt;div style="font-family: courier new; background: white; color: black; font-size: 10pt"&gt;   &lt;div style="font-family: courier new; background: white; color: black; font-size: 9pt"&gt;     &lt;div style="font-family: courier new; background: white; color: black; font-size: 9pt"&gt;       &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;BindingExtensions&lt;/span&gt;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;{&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; UpdateTarget(&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af"&gt;FrameworkElement&lt;/span&gt; element,&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;DependencyProperty&lt;/span&gt; property)&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;BindingExpression&lt;/span&gt; expression = element.GetBindingExpression(property);&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (expression != &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; expression.UpdateTarget();&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; UpdateSource(&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af"&gt;FrameworkElement&lt;/span&gt; element,&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;DependencyProperty&lt;/span&gt; property)&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;BindingExpression&lt;/span&gt; expression = element.GetBindingExpression(property);&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (expression != &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; expression.UpdateSource();&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;        &lt;p style="margin: 0px"&gt;}&lt;/p&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;For example if we want to refresh the &lt;strong&gt;Text&lt;/strong&gt; property in a bound &lt;strong&gt;TextBox&lt;/strong&gt; we can do:&lt;/p&gt;  &lt;div style="font-family: courier new; background: white; color: black; font-size: 9pt"&gt;   &lt;p style="margin: 0px"&gt;textBox.UpdateTarget(&lt;span style="color: #2b91af"&gt;TextBox&lt;/span&gt;.TextProperty);&lt;/p&gt; &lt;/div&gt;</description><pubDate>Thu, 04 Jun 2009 14:24:18 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/how-to-force-a-binding-to-update</guid><category>WPF</category></item><item><title>Publish a Clickonce deploy with assemblies not referenced in Visual Studio 2008 SP1</title><link>https://weblogs.asp.net:443/marianor/publish-a-clickonce-deploy-with-assemblies-not-referenced-in-visual-studio-2008-sp1</link><description>&lt;p&gt;Some time ago I wrote a &lt;a href="http://weblogs.asp.net/marianor/archive/2007/10/09/build-a-clickonce-deploy-with-visual-studio-and-assemblies-not-referenced.aspx"&gt;post&lt;/a&gt; about this subject, but that post only apply to Visual Studio 2005. The targets used in that post where changed. Basically this post is an update to Visual Studio 2008 SP1. Note that this post does not apply to Visual Studio 2008 without SP1, there were some changes between the two versions of the used target.&lt;/p&gt;
&lt;p&gt;In this version we need replace only one target which is &lt;em&gt;&lt;strong&gt;_DeploymentComputeClickOnceManifestInfo&lt;/strong&gt;&lt;/em&gt;. This target is executed before the beginning of the publishing. You will need copy this target to a file, for example &lt;em&gt;AssembliesCopy.targets&lt;/em&gt;, and add the logic to get the not referenced assemblies from the &lt;em&gt;Modules&lt;/em&gt; folder. Take a look to the following target:&lt;/p&gt;
&lt;div style="font-family: courier new; background: white; color: black; font-size: 10pt;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Project&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;http://schemas.microsoft.com/developer/msbuild/2003&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Target&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;_DeploymentComputeClickOnceManifestInfo&lt;/span&gt;"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Condition&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;'$(GenerateClickOnceManifests)'=='true'&lt;/span&gt;"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;DependsOnTargets&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;_DeploymentGenerateTrustInfo&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green;"&gt; Grab just the serialization assemblies for a referenced assembly.&amp;nbsp; There may also be a symbols file in ReferenceRelatedPaths &lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ItemGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;_SGenDllsRelatedToCurrentDll&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Include&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@(_ReferenceSerializationAssemblyPaths-&amp;gt;'%(FullPath)')&lt;/span&gt;"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Condition&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;'%(Extension)' == '.dll'&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;_SGenDllsRelatedToCurrentDll&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Include&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@(SerializationAssembly-&amp;gt;'%(FullPath)')&lt;/span&gt;"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Condition&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;'%(Extension)' == '.dll'&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ItemGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green;"&gt; Flag primary dependencies-certain warnings emitted during application manifest generation apply only to them. &lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ItemGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;_DeploymentReferencePaths&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Include&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@(ReferencePath)&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;IsPrimary&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;IsPrimary&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;_DeploymentReferencePaths&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ItemGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green;"&gt; Create list of items for manifest generation &lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ResolveManifestFiles&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;TargetFrameworkVersion&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;$(TargetFrameworkVersion)&lt;/span&gt;"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;SigningManifests&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;$(SignManifests)&lt;/span&gt;"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;EntryPoint&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@(_DeploymentManifestEntryPoint)&lt;/span&gt;"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;ExtraFiles&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@(_DebugSymbolsIntermediatePath);$(IntermediateOutputPath)$(TargetName).xml;@(_ReferenceRelatedPaths)&lt;/span&gt;"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Files&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@(ContentWithTargetPath);@(_DeploymentManifestIconFile);@(AppConfigWithTargetPath)&lt;/span&gt;"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;ManagedAssemblies&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@(_DeploymentReferencePaths);@(ReferenceDependencyPaths);@(_SGenDllsRelatedToCurrentDll);@(SerializationAssembly)&lt;/span&gt;"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;NativeAssemblies&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@(NativeReferenceFile);@(_DeploymentNativePrerequisite)&lt;/span&gt;"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;PublishFiles&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@(PublishFile)&lt;/span&gt;"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;SatelliteAssemblies&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@(IntermediateSatelliteAssembliesWithTargetPath);@(ReferenceSatellitePaths)&lt;/span&gt;"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;TargetCulture&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;$(TargetCulture)&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Output&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;TaskParameter&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;OutputAssemblies&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ItemName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;_DeploymentManifestDependencies&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Output&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;TaskParameter&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;OutputFiles&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ItemName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;_DeploymentManifestFiles&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Output&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;TaskParameter&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;OutputEntryPoint&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ItemName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;_DeploymentResolvedManifestEntryPoint&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ResolveManifestFiles&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green;"&gt; Begin custom fragments - Generate all managed assemblies inside modules &lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;CreateItem&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Include&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;$(OutputPath)Modules\**\*.dll&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Output&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;TaskParameter&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Include&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ItemName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;ManagedAssemblies&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;CreateItem&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;CreateItem&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Include&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@(ManagedAssemblies)&lt;/span&gt;"&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;AdditionalMetadata&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;TargetPath=Modules\%(RecursiveDir)%(Filename)%(Extension);DependencyType=Install;&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Output&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ItemName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;_DeploymentManifestDependencies&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;TaskParameter&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Include&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;CreateItem&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green;"&gt; End custom fragments &lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;_DeploymentManifestType&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;ClickOnce&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;_DeploymentManifestType&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green;"&gt; Obtain manifest version from ApplicationVersion and ApplicationRevision properties &lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;FormatVersion&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;$(ApplicationVersion)&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Revision&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;$(ApplicationRevision)&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Output&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;TaskParameter&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;OutputVersion&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;PropertyName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;_DeploymentManifestVersion&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;FormatVersion&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;FormatUrl&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;InputUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;$(_DeploymentUrl)&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Output&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;TaskParameter&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;OutputUrl&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;PropertyName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;_DeploymentFormattedDeploymentUrl&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;FormatUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;FormatUrl&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;InputUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;$(SupportUrl)&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Output&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;TaskParameter&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;OutputUrl&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;PropertyName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;_DeploymentFormattedSupportUrl&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;FormatUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;FormatUrl&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;InputUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;$(ErrorReportUrl)&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Output&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;TaskParameter&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;OutputUrl&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;PropertyName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;_DeploymentFormattedErrorReportUrl&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;FormatUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Target&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Project&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Note that most of the lines came from the original target delivered from Microsoft; the lines added are in Italic.&lt;/p&gt;
&lt;p&gt;Finally you need include the new target in your project; open your &lt;em&gt;csproj&lt;/em&gt; file with a text editor and include the following line before the &lt;em&gt;&amp;lt;/Project&amp;gt;&lt;/em&gt; end tag.&lt;/p&gt;
&lt;div style="font-family: courier new; background: white; color: black; font-size: 10pt;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Import&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Project&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;AssembliesCopy.targets&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;After that, when you publish the project again the assemblies from the folder &lt;em&gt;Modules&lt;/em&gt; will be copied in your &lt;em&gt;Published&lt;/em&gt; folder.&lt;/p&gt;
&lt;p&gt;You can download a sample project &lt;a href="https://aspblogs.blob.core.windows.net/media/marianor/Media/Samples/ClickOnceSample.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 01 May 2009 13:29:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/publish-a-clickonce-deploy-with-assemblies-not-referenced-in-visual-studio-2008-sp1</guid><category>MSBuild</category></item><item><title>How to disable Copy and Paste for a control in WPF</title><link>https://weblogs.asp.net:443/marianor/how-to-disable-copy-and-paste-for-a-control-in-wpf</link><description>&lt;P&gt;By default all the &lt;STRONG&gt;TextBox&lt;/STRONG&gt;’s (an other controls) in WPF have a default &lt;STRONG&gt;ContextMenu&lt;/STRONG&gt; that allows copy, paste and cut. You can disable this menu by setting this property as “{x:Null}”, but the keys associated with the menu options still work. In order to disable this commands we can use the &lt;A href="http://msdn.microsoft.com/en-us/library/system.windows.dataobject.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.windows.dataobject.aspx"&gt;DataObject&lt;/A&gt; class, which have handlers to attach any &lt;STRONG&gt;DepencencyObject&lt;/STRONG&gt; in case on Copy or Paste:&lt;/P&gt;
&lt;DIV style="FONT-FAMILY: courier new; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DataObject&lt;/SPAN&gt;.AddPastingHandler(control, &lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;.OnCancelCommand);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DataObject&lt;/SPAN&gt;.AddCopyingHandler(control, &lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;.OnCancelCommand);&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Finally in the event handler we need to cancel the current command:&lt;/P&gt;
&lt;DIV style="FONT-FAMILY: courier new; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; OnCancelCommand(&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR: #2b91af"&gt;DataObjectEventArgs&lt;/SPAN&gt; e)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.CancelCommand();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;}&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;The &lt;A href="http://msdn.microsoft.com/en-us/library/system.windows.dataobjecteventargs.cancelcommand.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.windows.dataobjecteventargs.cancelcommand.aspx"&gt;CancelCommand&lt;/A&gt; method will cancel any ApplicationCommand.Copy, ApplicationCommand.Paste and ApplicationCommand.Cut sent over the control.&lt;/P&gt;</description><pubDate>Tue, 28 Apr 2009 19:40:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/how-to-disable-copy-and-paste-for-a-control-in-wpf</guid><category>WPF</category></item><item><title>WPF Validation with Attributes and IDataErrorInfo interface in MVVM</title><link>https://weblogs.asp.net:443/marianor/wpf-validation-with-attributes-and-idataerrorinfo-interface-in-mvvm</link><description>&lt;p&gt;WPF provides validation infrastructure for binding scenarios through &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.idataerrorinfo.aspx"&gt;IDataErrorInfo&lt;/a&gt; interface. Basically you have to implement the &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.idataerrorinfo.item.aspx"&gt;Item[columnName]&lt;/a&gt; property putting the validation logic for each property in your Model (or ModelView) requiring validation. From XAML you need to set &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.binding.validatesondataerrors.aspx"&gt;ValidatesOnDataErrors&lt;/a&gt; to true and decide when you want the binding invoke the validation logic (through &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger.aspx"&gt;UpdateSourceTrigger&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The idea of this post is try to generalize the validation logic in IDataErrorInfo.Item[] using the validation attributes in System.ComponentModel.DataAnnotations assembly.&lt;/p&gt;
&lt;p&gt;First, we decorate each property needing validation with one or more &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.validationattribute.aspx"&gt;validation attributes&lt;/a&gt; (An explanation of each validation attribute is out of the scope of this post) depending on the validation rules. For example if we have a property named Range we can add &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.rangeattribute.aspx"&gt;RangeAttribute&lt;/a&gt; to validate that the property value is between the boundaries:&lt;/p&gt;
&lt;div style="font-family: courier new; background: white; color: black; font-size: 10pt;"&gt;
&lt;p style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;Required&lt;/span&gt;(ErrorMessage = &lt;span style="color: #a31515;"&gt;"Field 'Range' is required."&lt;/span&gt;)]&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;Range&lt;/span&gt;(1, 10, ErrorMessage = &lt;span style="color: #a31515;"&gt;"Field 'Range' is out of range."&lt;/span&gt;)]&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; Range&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.range;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;this&lt;/span&gt;.range != &lt;span style="color: blue;"&gt;value&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.range = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.OnPropertyChanged(&lt;span style="color: #a31515;"&gt;"Range"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Now, we need a few code to get the validation attributes and the value getters for each property requiring validation, just a couple of simple LINQ queries:&lt;/p&gt;
&lt;div style="font-family: courier new; background: white; color: black; font-size: 10pt;"&gt;
&lt;div style="font-family: courier new; background: white; color: black; font-size: 10pt;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;ValidationModelView&lt;/span&gt;, &lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; propertyGetters = &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;ValidationModelView&lt;/span&gt;).GetProperties()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Where(p =&amp;gt; GetValidations(p).Length != 0)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .ToDictionary(p =&amp;gt; p.Name, p =&amp;gt; GetValueGetter(p));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;ValidationAttribute&lt;/span&gt;[]&amp;gt; validators =&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;ValidationModelView&lt;/span&gt;).GetProperties()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Where(p =&amp;gt; GetValidations(p).Length != 0)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .ToDictionary(p =&amp;gt; p.Name, p =&amp;gt; GetValidations(p));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ValidationAttribute&lt;/span&gt;[] GetValidations(&lt;span style="color: #2b91af;"&gt;PropertyInfo&lt;/span&gt; property)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;ValidationAttribute&lt;/span&gt;[])property&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .GetCustomAttributes(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;ValidationAttribute&lt;/span&gt;), &lt;span style="color: blue;"&gt;true&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;ValidationModelView&lt;/span&gt;, &lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;gt; GetValueGetter(&lt;span style="color: #2b91af;"&gt;PropertyInfo&lt;/span&gt; property)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; instance = &lt;span style="color: #2b91af;"&gt;Expression&lt;/span&gt;.Parameter(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;ValidationModelView&lt;/span&gt;), &lt;span style="color: #a31515;"&gt;"i"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; cast = &lt;span style="color: #2b91af;"&gt;Expression&lt;/span&gt;.TypeAs(&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Expression&lt;/span&gt;.Property(instance, property),&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: blue;"&gt;object&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;ValidationModelView&lt;/span&gt;, &lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;gt;)&lt;span style="color: #2b91af;"&gt;Expression&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Lambda(cast, instance).Compile();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin: 0px;"&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;It is important emphasize that in order to improve the performance in the validation we use static dictionaries and Lamda expressions to generate the value getters. The validation attributes are cached in other dictionary in order to improve the performance too.&lt;/p&gt;
&lt;p&gt;Finally we need implement the &lt;strong&gt;Item[columnName]&lt;/strong&gt; property which is the part of code that really do the validation. It is very simple, WPF send the name of the property in the columnName argument, then all you have to do is get the value of the property using the propertyGetters dictionary and test this value against the validation attributes in the validators dictionary.&lt;/p&gt;
&lt;div style="font-family: courier new; background: white; color: black; font-size: 10pt;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;[&lt;span style="color: blue;"&gt;string&lt;/span&gt; columnName]&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (propertyGetters.ContainsKey(columnName))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; value = propertyGetters[columnName](&lt;span style="color: blue;"&gt;this&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; errors = validators[columnName].Where(v =&amp;gt; !v.IsValid(value))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Select(v =&amp;gt; v.ErrorMessage).ToArray();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Join(&lt;span style="color: #2b91af;"&gt;Environment&lt;/span&gt;.NewLine, errors);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Empty;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;All of this returns the list of message errors that will be shown in the UI.&lt;/p&gt;
&lt;p&gt;You can do download a complete sample &lt;a href="https://aspblogs.blob.core.windows.net/media/marianor/Media/Samples/Samples.Validation.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 17 Apr 2009 13:49:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/wpf-validation-with-attributes-and-idataerrorinfo-interface-in-mvvm</guid><category>WPF</category></item><item><title>MOQ 3.1 released</title><link>https://weblogs.asp.net:443/marianor/moq-3-1-released</link><description>&lt;p&gt;Finally &lt;a href="http://moq.me"&gt;MOQ&lt;/a&gt; 3.1 was released, it includes a lot of fixes of the previous version (3.0). You can get the binaries &lt;a href="http://moq.me/get"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 16 Apr 2009 23:11:21 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/moq-3-1-released</guid><category>General</category></item><item><title>Using expression trees to get property getter and setters</title><link>https://weblogs.asp.net:443/marianor/using-expression-trees-to-get-property-getter-and-setters</link><description>&lt;p&gt;There are times when you need get and set property values and you do not know the type of the properties. One option is use reflection through &lt;strong&gt;GetValue&lt;/strong&gt; and &lt;strong&gt;SetValue&lt;/strong&gt; from &lt;strong&gt;PropertyInfo&lt;/strong&gt; class, but this wears to poor performance in our code.&lt;/p&gt;
&lt;p&gt;In order to do that we can use an &lt;strong&gt;Expression Tree&lt;/strong&gt; to generate delegates that allow to get and set the value of the required property, for example building a couple of extensions methods applying to &lt;strong&gt;PropertyInfo&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family: courier new; background: white; color: black; font-size: 9pt;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PropertyInfoExtensions&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T, &lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;gt; GetValueGetter&amp;lt;T&amp;gt;(&lt;span style="color: blue;"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PropertyInfo&lt;/span&gt; propertyInfo)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(T) != propertyInfo.DeclaringType)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;throw&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ArgumentException&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; instance = &lt;span style="color: #2b91af;"&gt;Expression&lt;/span&gt;.Parameter(propertyInfo.DeclaringType, &lt;span style="color: #a31515;"&gt;"i"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; property = &lt;span style="color: #2b91af;"&gt;Expression&lt;/span&gt;.Property(instance, propertyInfo);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; convert = &lt;span style="color: #2b91af;"&gt;Expression&lt;/span&gt;.TypeAs(property, &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: blue;"&gt;object&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T, &lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;gt;)&lt;span style="color: #2b91af;"&gt;Expression&lt;/span&gt;.Lambda(convert, instance).Compile();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Action&lt;/span&gt;&amp;lt;T, &lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;gt; GetValueSetter&amp;lt;T&amp;gt;(&lt;span style="color: blue;"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PropertyInfo&lt;/span&gt; propertyInfo)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(T) != propertyInfo.DeclaringType)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;throw&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ArgumentException&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; instance = &lt;span style="color: #2b91af;"&gt;Expression&lt;/span&gt;.Parameter(propertyInfo.DeclaringType, &lt;span style="color: #a31515;"&gt;"i"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; argument = &lt;span style="color: #2b91af;"&gt;Expression&lt;/span&gt;.Parameter(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: blue;"&gt;object&lt;/span&gt;), &lt;span style="color: #a31515;"&gt;"a"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; setterCall = &lt;span style="color: #2b91af;"&gt;Expression&lt;/span&gt;.Call(&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance,&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; propertyInfo.GetSetMethod(),&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Expression&lt;/span&gt;.Convert(argument, propertyInfo.PropertyType));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;Action&lt;/span&gt;&amp;lt;T, &lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;gt;)&lt;span style="color: #2b91af;"&gt;Expression&lt;/span&gt;.Lambda(setterCall, instance, argument)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Compile();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now, we can use this extensions methods to retrieve the delegates for get or set a value, assuming that we have a class called &lt;strong&gt;ReflectedType&lt;/strong&gt; and we have a valid &lt;strong&gt;PropertyInfo&lt;/strong&gt; for this class:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family: courier new; background: white; color: black; font-size: 9pt;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; getter = property.GetValueGetter&amp;lt;&lt;span style="color: #2b91af;"&gt;ReflectedType&lt;/span&gt;&amp;gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; setter = property.GetValueSetter&amp;lt;&lt;span style="color: #2b91af;"&gt;ReflectedType&lt;/span&gt;&amp;gt;();&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Finally we can get or set the value, assuming that we have a valid instance of the ReflectedType type:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family: courier new; background: white; color: black; font-size: 9pt;"&gt;
&lt;p style="margin: 0px;"&gt;setter(reflectedType, 0);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; value = getter(reflectedType));&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You can get the code &lt;a href="https://aspblogs.blob.core.windows.net/media/marianor/Media/Samples/PropertyInfoSetterAndGetter.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 10 Apr 2009 15:55:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/using-expression-trees-to-get-property-getter-and-setters</guid><category>General</category></item><item><title>Moq 3.0 Final</title><link>https://weblogs.asp.net:443/marianor/moq-3-0-final</link><description>&lt;p&gt;Finally the new version of Moq is released, check the new improvements and fixes &lt;a href="http://code.google.com/p/moq/source/browse/trunk/Changelog.txt"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;You can get the binaries from &lt;a href="http://moq.me/get"&gt;&lt;font color="#800080"&gt;http://moq.me/get&lt;/font&gt;&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Enjoy It !!!&lt;/p&gt;</description><pubDate>Fri, 06 Mar 2009 23:23:39 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/moq-3-0-final</guid><category>General</category></item><item><title>Sticky notes add-in for Visual Studio</title><link>https://weblogs.asp.net:443/marianor/sticky-notes-add-in-for-visual-studio</link><description>&lt;p&gt;My coworker &lt;a href="http://www.clariusconsulting.net/blogs/pga/"&gt;Pablo&lt;/a&gt; has released a nice Visual Studio add-in called &lt;a href="http://stickynotes4code.com/"&gt;Sticky Notes&lt;/a&gt;. Basically this add-in allows to write &lt;a href="http://stickynotes4code.com/Screenshots.aspx"&gt;sticky notes in your code&lt;/a&gt;, that can be private notes or team notes.&lt;/p&gt;</description><pubDate>Wed, 07 Jan 2009 19:53:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/marianor/sticky-notes-add-in-for-visual-studio</guid><category>General</category></item></channel></rss>