<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-2212558652617325901.comments</id><updated>2010-03-12T12:39:57.948-05:00</updated><title type='text'>Eric De C#</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.decarufel.net/feeds/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/comments/default'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/comments/default?start-index=26&amp;max-results=25'/><author><name>Eric De C#</name><uri>http://www.blogger.com/profile/01046447681968794782</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>53</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-9126885830162778686</id><published>2010-03-12T11:41:33.604-05:00</published><updated>2010-03-12T11:41:33.604-05:00</updated><title type='text'>nice post</title><content type='html'>nice post</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/3564805343514241001/comments/default/9126885830162778686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/3564805343514241001/comments/default/9126885830162778686'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2010/02/patch-for-vs-2010-rc-intellisense-crash.html?showComment=1268412093604#c9126885830162778686' title=''/><author><name>essays</name><uri>http://www.bestessays.com</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2010/02/patch-for-vs-2010-rc-intellisense-crash.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-3564805343514241001' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/3564805343514241001' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-4916343328437855339</id><published>2010-02-23T10:35:25.005-05:00</published><updated>2010-02-23T10:35:25.005-05:00</updated><title type='text'>@Rick
Someone posted the solution:
http://blog.dec...</title><content type='html'>@Rick&lt;br /&gt;Someone posted the solution:&lt;br /&gt;http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type_22.html&lt;br /&gt;Quote Stefan Lange:&lt;br /&gt;Very good idea! After I tried it out I have two hints:&lt;br /&gt;&lt;br /&gt;If the property is a value type you need an additional step to unbox the expression body:&lt;br /&gt;&lt;br /&gt;((MemberExpression)((UnaryExpression)propertyExpression.Body).Operand).Member.Name&lt;br /&gt;&lt;br /&gt;The only reason why you must compile and execute the expression is to retrieve the sender. I would avoid this completely by simply adding the sender to the parameters:&lt;br /&gt;&lt;br /&gt;PropertyChanged.Raise(this, () =&amp;gt; Data);&lt;br /&gt;&lt;br /&gt;I think adding the sender is better than creating code to retrieve it.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/3692239658054231243/comments/default/4916343328437855339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/3692239658054231243/comments/default/4916343328437855339'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/07/type-safe-inotifypropertychanged-and.html?showComment=1266939325005#c4916343328437855339' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/07/type-safe-inotifypropertychanged-and.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-3692239658054231243' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/3692239658054231243' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-8770348706464432371</id><published>2010-02-12T14:19:16.311-05:00</published><updated>2010-02-12T14:19:16.311-05:00</updated><title type='text'>Thanks, I was looking for this.

Does anyone know ...</title><content type='html'>Thanks, I was looking for this.&lt;br /&gt;&lt;br /&gt;Does anyone know where to find all attributes that apply to PropertyGrid?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/6478009566716884960/comments/default/8770348706464432371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/6478009566716884960/comments/default/8770348706464432371'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2007/10/editing-password-in-propertygrid.html?showComment=1266002356311#c8770348706464432371' title=''/><author><name>Comité de Vecinos</name><uri>http://www.blogger.com/profile/15683718634185289958</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2007/10/editing-password-in-propertygrid.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-6478009566716884960' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/6478009566716884960' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-4068607414907116958</id><published>2010-01-27T14:26:44.343-05:00</published><updated>2010-01-27T14:26:44.343-05:00</updated><title type='text'>thanks for the great info. it will surely help me ...</title><content type='html'>thanks for the great info. it will surely help me a lot&lt;br /&gt;Cheers</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4607926898832952878/comments/default/4068607414907116958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4607926898832952878/comments/default/4068607414907116958'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/09/using-decorator-or-wrapper-design.html?showComment=1264620404343#c4068607414907116958' title=''/><author><name>custom essay</name><uri>http://www.research-service.com</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/09/using-decorator-or-wrapper-design.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-4607926898832952878' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/4607926898832952878' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-6261109299684627366</id><published>2010-01-26T08:45:22.817-05:00</published><updated>2010-01-26T08:45:22.817-05:00</updated><title type='text'>Yes intellisense will ignore it but you will still...</title><content type='html'>Yes intellisense will ignore it but you will still be able to use it anyway. The goal here is to make your code foul proof.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4389644538987274821/comments/default/6261109299684627366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4389644538987274821/comments/default/6261109299684627366'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/02/xml-serialization-tip-hiding-default.html?showComment=1264513522817#c6261109299684627366' title=''/><author><name>Eric De C#</name><uri>http://www.blogger.com/profile/01046447681968794782</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14860490437971383161'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/02/xml-serialization-tip-hiding-default.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-4389644538987274821' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/4389644538987274821' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-1266412666318382273</id><published>2010-01-26T08:41:28.172-05:00</published><updated>2010-01-26T08:41:28.172-05:00</updated><title type='text'>I would suggest another approach to do this, usual...</title><content type='html'>I would suggest another approach to do this, usually the user if the member is not documented, nor visible to intellisense won&amp;#39;t know about them.&lt;br /&gt;&lt;br /&gt;Conviniently the framework includes the wollowing attribute so intellisense will ignore it:&lt;br /&gt;&lt;br /&gt;        System.ComponentModel.EditorBrowsableAttribute&lt;br /&gt;&lt;br /&gt;Especifing System.ComponentModel.EditorBrowsableState.Never should make the trick!&lt;br /&gt;&lt;br /&gt;[EditorBrowsable(EditorBrowsableState.Never)]      public string[] Types { get; set; }</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4389644538987274821/comments/default/1266412666318382273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4389644538987274821/comments/default/1266412666318382273'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/02/xml-serialization-tip-hiding-default.html?showComment=1264513288172#c1266412666318382273' title=''/><author><name>José Luis Chávez del Cid</name><uri>http://www.blogger.com/profile/01224568942389273039</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/02/xml-serialization-tip-hiding-default.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-4389644538987274821' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/4389644538987274821' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-7685029517956651780</id><published>2010-01-08T10:49:39.702-05:00</published><updated>2010-01-08T10:49:39.702-05:00</updated><title type='text'>Thanks for posting this article. This is exactly w...</title><content type='html'>Thanks for posting this article. This is exactly what I needed.&lt;br /&gt;-swathi</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4545852813659502351/comments/default/7685029517956651780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4545852813659502351/comments/default/7685029517956651780'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2007/10/getting-access-to-settings-in-another.html?showComment=1262965779702#c7685029517956651780' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2007/10/getting-access-to-settings-in-another.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-4545852813659502351' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/4545852813659502351' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-1764394869871307119</id><published>2009-11-25T10:55:17.648-05:00</published><updated>2009-11-25T10:55:17.648-05:00</updated><title type='text'>I'm trying to implement this and one boolean prope...</title><content type='html'>I&amp;#39;m trying to implement this and one boolean property is causing a property expression should be a member expression error.  When I break on if (body -- null), body is null, but if I highlight propertyExpression.body in quick watch it returns the lambda...  Very strage but prevents it from working.  Any ideas?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/3692239658054231243/comments/default/1764394869871307119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/3692239658054231243/comments/default/1764394869871307119'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/07/type-safe-inotifypropertychanged-and.html?showComment=1259164517648#c1764394869871307119' title=''/><author><name>Rick</name><uri>http://www.blogger.com/profile/03117756749296471335</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/07/type-safe-inotifypropertychanged-and.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-3692239658054231243' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/3692239658054231243' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-3888494594672409059</id><published>2009-11-20T11:16:36.143-05:00</published><updated>2009-11-20T11:16:36.143-05:00</updated><title type='text'>Microsoft Visual Studio 2010 and .NET Framework 4 ...</title><content type='html'>Microsoft Visual Studio 2010 and .NET Framework 4 Beta 2 enhance support for parallel programming with a new runtime, new class library types, and diagnostic tools. These features simplify parallel development and enable developers to write efficient, fine-grained, and scalable parallel code in a natural idiom without having to work directly with threads, or the thread pool. The following illustration provides a high-level overview of the parallel programming architecture in .NET Framework 4 Beta 2.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/2180796809912852310/comments/default/3888494594672409059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/2180796809912852310/comments/default/3888494594672409059'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/05/parallel-programming-with-net-samples.html?showComment=1258733796143#c3888494594672409059' title=''/><author><name>weight loss pills</name><uri>http://www.vitabits.co.uk/slimming</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/05/parallel-programming-with-net-samples.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-2180796809912852310' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/2180796809912852310' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-2953436832261144772</id><published>2009-11-12T18:26:24.940-05:00</published><updated>2009-11-12T18:26:24.940-05:00</updated><title type='text'>No you  can't. For default XML serialization to wo...</title><content type='html'>No you  can&amp;#39;t. For default XML serialization to work you must have a public default constructor. You can build your own XmlSerializer but it&amp;#39;s a lot more work.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4389644538987274821/comments/default/2953436832261144772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4389644538987274821/comments/default/2953436832261144772'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/02/xml-serialization-tip-hiding-default.html?showComment=1258068384940#c2953436832261144772' title=''/><author><name>Eric De C#</name><uri>http://www.blogger.com/profile/01046447681968794782</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14860490437971383161'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/02/xml-serialization-tip-hiding-default.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-4389644538987274821' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/4389644538987274821' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-4592261528129824932</id><published>2009-11-12T17:56:20.384-05:00</published><updated>2009-11-12T17:56:20.384-05:00</updated><title type='text'>Another way to do that is to mark the parameterles...</title><content type='html'>Another way to do that is to mark the parameterless constructor as private!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4389644538987274821/comments/default/4592261528129824932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4389644538987274821/comments/default/4592261528129824932'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/02/xml-serialization-tip-hiding-default.html?showComment=1258066580384#c4592261528129824932' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/02/xml-serialization-tip-hiding-default.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-4389644538987274821' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/4389644538987274821' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-4256779714024731568</id><published>2009-11-12T07:23:57.916-05:00</published><updated>2009-11-12T07:23:57.916-05:00</updated><title type='text'>I think Kodu can be categorized as a serious fun D...</title><content type='html'>I think Kodu can be categorized as a serious fun &lt;b&gt;&lt;a href="http://www.sheeparcade.com" rel="nofollow"&gt;Download Games&lt;/a&gt;&lt;/b&gt;. It doesn&amp;#39;t have realistic graphics, huge explosion, or even a way to win. But Kodu makes creating is more challenging than consuming. I think it&amp;#39;s one of the best and creative games ever.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/1130801756070571572/comments/default/4256779714024731568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/1130801756070571572/comments/default/4256779714024731568'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/01/im-presentation-junky.html?showComment=1258028637916#c4256779714024731568' title=''/><author><name>Melvin</name><uri>http://addicting-games-news.blogspot.com</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/01/im-presentation-junky.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-1130801756070571572' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/1130801756070571572' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-7455586458601383849</id><published>2009-10-05T12:13:43.253-04:00</published><updated>2009-10-05T12:13:43.253-04:00</updated><title type='text'>AccountDecorator has a few issues, firstly: all of...</title><content type='html'>AccountDecorator has a few issues, firstly: all of the properties/methods refer to _account as Account which would be incorrect since that would be a static member to the Account class. I assume this was an oversight as you were typing up your blog post.&lt;br /&gt;&lt;br /&gt;The more pressing issue is why does AccountDecorator exist at all? You could have easily have just used the original account since there was no purpose to your decoration of it. Or you could&amp;#39;ve created something like&lt;br /&gt;&lt;br /&gt;IValidatorMember&amp;amp;ltT&amp;amp;gt class&lt;br /&gt;&lt;br /&gt;and instead of AccountValidatorBase : AccountDecorator you would use&lt;br /&gt;&lt;br /&gt;AccountValidatorBase : IValidatorMember&amp;amp;ltIAccount&amp;amp;gt&lt;br /&gt;&lt;br /&gt;I think it&amp;#39;s much more preferable for wrapper classes to be implemented through generics so you don&amp;#39;t end up with double the amount of files per classes you have.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4607926898832952878/comments/default/7455586458601383849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4607926898832952878/comments/default/7455586458601383849'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/09/using-decorator-or-wrapper-design.html?showComment=1254759223253#c7455586458601383849' title=''/><author><name>dotnetchris</name><uri>http://dotnetchris.wordpress.com/</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/09/using-decorator-or-wrapper-design.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-4607926898832952878' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/4607926898832952878' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-1690283959584893663</id><published>2009-10-03T08:49:00.459-04:00</published><updated>2009-10-03T08:49:00.459-04:00</updated><title type='text'>Great posting, well explained, practical and very ...</title><content type='html'>Great posting, well explained, practical and very useful. Thanks!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4607926898832952878/comments/default/1690283959584893663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4607926898832952878/comments/default/1690283959584893663'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/09/using-decorator-or-wrapper-design.html?showComment=1254574140459#c1690283959584893663' title=''/><author><name>RA</name><uri>http://www.blogger.com/profile/16579452623374206731</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/09/using-decorator-or-wrapper-design.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-4607926898832952878' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/4607926898832952878' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-6139295951524703030</id><published>2009-10-03T04:18:09.037-04:00</published><updated>2009-10-03T04:18:09.037-04:00</updated><title type='text'>Very insightful. I wish there was dedicated print ...</title><content type='html'>Very insightful. I wish there was dedicated print option, with all images and source code properly laid out on page. Keep the good stuff coming!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4607926898832952878/comments/default/6139295951524703030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4607926898832952878/comments/default/6139295951524703030'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/09/using-decorator-or-wrapper-design.html?showComment=1254557889037#c6139295951524703030' title=''/><author><name>Eurekin</name><uri>http://www.blogger.com/profile/12899228602227596377</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04203638751368774793'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/09/using-decorator-or-wrapper-design.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-4607926898832952878' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/4607926898832952878' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-6635436210377145028</id><published>2009-10-02T10:17:18.465-04:00</published><updated>2009-10-02T10:17:18.465-04:00</updated><title type='text'>This was a very timely and content rich post for m...</title><content type='html'>This was a very timely and content rich post for me to read, Eric, thank you!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4607926898832952878/comments/default/6635436210377145028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4607926898832952878/comments/default/6635436210377145028'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/09/using-decorator-or-wrapper-design.html?showComment=1254493038465#c6635436210377145028' title=''/><author><name>BigPigVT</name><uri>http://www.blogger.com/profile/13822643534037160541</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/09/using-decorator-or-wrapper-design.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-4607926898832952878' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/4607926898832952878' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-6926948517979639836</id><published>2009-09-09T20:06:13.699-04:00</published><updated>2009-09-09T20:06:13.699-04:00</updated><title type='text'>Very good idea! After I tried it out I have two hi...</title><content type='html'>Very good idea! After I tried it out I have two hints:&lt;br /&gt;&lt;br /&gt;If the property is a value type you need an additional step to unbox the expression body:&lt;br /&gt;&lt;br /&gt;((MemberExpression)((UnaryExpression)propertyExpression.Body).Operand).Member.Name&lt;br /&gt;&lt;br /&gt;The only reason why you must compile and execute the expression is to retrieve the sender. I would avoid this completely by simply adding the sender to the parameters:&lt;br /&gt;&lt;br /&gt;PropertyChanged.Raise(this, () =&amp;gt; Data); &lt;br /&gt;&lt;br /&gt;I think adding the sender is better than creating code to retrieve it.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4822423891402742000/comments/default/6926948517979639836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4822423891402742000/comments/default/6926948517979639836'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type_22.html?showComment=1252541173699#c6926948517979639836' title=''/><author><name>Stefan Lange</name><uri>http://www.blogger.com/profile/13483179720785178754</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type_22.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-4822423891402742000' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/4822423891402742000' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-2094652496087853848</id><published>2009-09-08T10:27:11.851-04:00</published><updated>2009-09-08T10:27:11.851-04:00</updated><title type='text'>Sweeeet :p</title><content type='html'>Sweeeet :p</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/3692239658054231243/comments/default/2094652496087853848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/3692239658054231243/comments/default/2094652496087853848'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/07/type-safe-inotifypropertychanged-and.html?showComment=1252420031851#c2094652496087853848' title=''/><author><name>Svart</name><uri>http://www.blogger.com/profile/09075342696232521449</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/07/type-safe-inotifypropertychanged-and.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-3692239658054231243' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/3692239658054231243' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-5912299783910676707</id><published>2009-08-01T09:11:41.395-04:00</published><updated>2009-08-01T09:11:41.395-04:00</updated><title type='text'>Hi, great idea.
I got inspired by that and wrote s...</title><content type='html'>Hi, great idea.&lt;br /&gt;I got inspired by that and wrote something about it.&lt;br /&gt;Have a look at http://gfoidl.spaces.live.com/blog/cns!36D34E66505CE4AF!201.entry&lt;br /&gt;&lt;br /&gt;Altought it&amp;#39;s written in German language the code should be readable.&lt;br /&gt;It&amp;#39;s very little code needed and shows a variant with reflection where even no arguments are needed.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/9144302345137872177/comments/default/5912299783910676707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/9144302345137872177/comments/default/5912299783910676707'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type.html?showComment=1249132301395#c5912299783910676707' title=''/><author><name>Günther</name><uri>http://www.blogger.com/profile/13219608595968756098</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-9144302345137872177' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/9144302345137872177' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-5245808568241076277</id><published>2009-07-23T13:44:27.265-04:00</published><updated>2009-07-23T13:44:27.265-04:00</updated><title type='text'>Maybe this can be improve to keep a cache but in m...</title><content type='html'>Maybe this can be improve to keep a cache but in most enterprise application the cost is negligible.&lt;br /&gt;&lt;br /&gt;Of course most refactoring tool will catch it, but what if someone change a property name without refactoring? It will compile but won&amp;#39;t work.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4822423891402742000/comments/default/5245808568241076277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4822423891402742000/comments/default/5245808568241076277'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type_22.html?showComment=1248371067265#c5245808568241076277' title=''/><author><name>Eric De C#</name><uri>http://www.blogger.com/profile/01046447681968794782</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14860490437971383161'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type_22.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-4822423891402742000' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/4822423891402742000' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-4236507849359941530</id><published>2009-07-23T13:31:11.555-04:00</published><updated>2009-07-23T13:31:11.555-04:00</updated><title type='text'>This is a very neat trick, rename refactor will pr...</title><content type='html'>This is a very neat trick, rename refactor will probably catch this as well? &lt;br /&gt;&lt;br /&gt;I&amp;#39;m worried about the reflection cost in vmlambda.Compile(). Will caching work here?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4822423891402742000/comments/default/4236507849359941530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/4822423891402742000/comments/default/4236507849359941530'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type_22.html?showComment=1248370271555#c4236507849359941530' title=''/><author><name>pieterbreed</name><uri>http://pieterbreed.myopenid.com/</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type_22.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-4822423891402742000' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/4822423891402742000' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-4958407455240685396</id><published>2009-07-22T18:17:14.157-04:00</published><updated>2009-07-22T18:17:14.157-04:00</updated><title type='text'>See my next post to find a solution I think worth ...</title><content type='html'>See my next post to find a solution I think worth trying.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/9144302345137872177/comments/default/4958407455240685396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/9144302345137872177/comments/default/4958407455240685396'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type.html?showComment=1248301034157#c4958407455240685396' title=''/><author><name>Eric De C#</name><uri>http://www.blogger.com/profile/01046447681968794782</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14860490437971383161'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-9144302345137872177' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/9144302345137872177' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-6963352796648073437</id><published>2009-07-22T10:58:39.325-04:00</published><updated>2009-07-22T10:58:39.325-04:00</updated><title type='text'>Nope, because you can't raise the event from your ...</title><content type='html'>Nope, because you can&amp;#39;t raise the event from your extension method.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/9144302345137872177/comments/default/6963352796648073437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/9144302345137872177/comments/default/6963352796648073437'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type.html?showComment=1248274719325#c6963352796648073437' title=''/><author><name>XIU</name><uri>http://www.blogger.com/profile/00949679407253456681</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-9144302345137872177' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/9144302345137872177' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-6769711178561647341</id><published>2009-07-22T08:23:08.062-04:00</published><updated>2009-07-22T08:23:08.062-04:00</updated><title type='text'>I think that you could just write the extension me...</title><content type='html'>I think that you could just write the extension method for the INotifyPropertyChanged interface, then do:&lt;br /&gt;&lt;br /&gt;&amp;quot;this.Raise(()=&amp;gt;Data)&amp;quot; and the inheritance problems go away.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/9144302345137872177/comments/default/6769711178561647341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/9144302345137872177/comments/default/6769711178561647341'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type.html?showComment=1248265388062#c6769711178561647341' title=''/><author><name>Andrew Theken</name><uri>http://www.blogger.com/profile/18422109270037477218</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-9144302345137872177' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/9144302345137872177' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-2212558652617325901.post-2717410978216587080</id><published>2009-07-22T07:28:56.974-04:00</published><updated>2009-07-22T07:28:56.974-04:00</updated><title type='text'>You are right. You need PropertyChanged event defi...</title><content type='html'>You are right. You need PropertyChanged event defined in every derived classes, but it it&amp;#39;s not so good because they will &amp;quot;hide&amp;quot; the base implementation. &lt;br /&gt;&lt;br /&gt;Another way to do this would be to define a virtual method on the base class that take a &amp;quot;Expression Of (Func Of object)&amp;quot; and use it to call the PropertyChanged event.&lt;br /&gt;&lt;br /&gt;I used to implement my INPC interface like this:&lt;br /&gt;        #region INotifyPropertyChanged Members&lt;br /&gt;&lt;br /&gt;        private string[] GetPropertiesList()&lt;br /&gt;        {&lt;br /&gt;            Type t = GetType();&lt;br /&gt;            PropertyInfo[] properties =&lt;br /&gt;                t.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty);&lt;br /&gt;&lt;br /&gt;            var propList = new string[properties.Length];&lt;br /&gt;            for (int i = 0; i &amp;lt; properties.Length; i++)&lt;br /&gt;                propList[i] = properties[i].Name;&lt;br /&gt;            return propList;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public void RaisePropertyChanged(params string[] properties)&lt;br /&gt;        {&lt;br /&gt;            if (properties.Length == 0)&lt;br /&gt;                properties = GetPropertiesList();&lt;br /&gt;&lt;br /&gt;            foreach (string property in properties)&lt;br /&gt;                OnPropertyChanged(new PropertyChangedEventArgs(property));&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void OnPropertyChanged(PropertyChangedEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            if (PropertyChanged != null)&lt;br /&gt;                PropertyChanged(this, e);&lt;br /&gt;&lt;br /&gt;            OnPropertyChangedCore(e);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        protected virtual void OnPropertyChangedCore(PropertyChangedEventArgs args) {}&lt;br /&gt;&lt;br /&gt;        public event PropertyChangedEventHandler PropertyChanged;&lt;br /&gt;&lt;br /&gt;        #endregion</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/9144302345137872177/comments/default/2717410978216587080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2212558652617325901/9144302345137872177/comments/default/2717410978216587080'/><link rel='alternate' type='text/html' href='http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type.html?showComment=1248262136974#c2717410978216587080' title=''/><author><name>Eric De C#</name><uri>http://www.blogger.com/profile/01046447681968794782</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14860490437971383161'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.decarufel.net/2009/07/how-to-use-inotifypropertychanged-type.html' ref='tag:blogger.com,1999:blog-2212558652617325901.post-9144302345137872177' source='http://www.blogger.com/feeds/2212558652617325901/posts/default/9144302345137872177' type='text/html'/></entry></feed>