<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Rockford Lhotka</title>
    <link>http://www.lhotka.net/weblog/</link>
    <description>Author of Expert C#/VB 2005 Business Objects</description>
    <language>en-us</language>
    <copyright>Rockford Lhotka</copyright>
    <lastBuildDate>Tue, 10 Nov 2009 20:13:20 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>rocky@lhotka.net</managingEditor>
    <webMaster>rocky@lhotka.net</webMaster>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/RockfordLhotka" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=92bb1647-47ff-4e7f-8b84-37c1e8b661c0</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,92bb1647-47ff-4e7f-8b84-37c1e8b661c0.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,92bb1647-47ff-4e7f-8b84-37c1e8b661c0.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=92bb1647-47ff-4e7f-8b84-37c1e8b661c0</wfw:commentRss>
      <title>Magenic&amp;rsquo;s own Code Master</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,92bb1647-47ff-4e7f-8b84-37c1e8b661c0.aspx</guid>
      <link>http://www.lhotka.net/weblog/MagenicrsquosOwnCodeMaster.aspx</link>
      <pubDate>Tue, 10 Nov 2009 20:13:20 GMT</pubDate>
      <description>&lt;p&gt;
If you go to &lt;a title="http://www.microsoft.com/net/dotnetstories/" href="http://www.microsoft.com/net/dotnetstories/"&gt;http://www.microsoft.com/net/dotnetstories/&lt;/a&gt; you’ll
see many compelling stories of people using Microsoft .NET to do cool things.
&lt;/p&gt;
&lt;p&gt;
This includes Andy Schwartz, a colleague of mine at Magenic. Andy is not only a great
technologist, but he has a couple real black belts in martial arts.
&lt;/p&gt;
&lt;p&gt;
I love working with such great people! :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=92bb1647-47ff-4e7f-8b84-37c1e8b661c0" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;div style="border-top: 1px dotted;padding-top: 8px;padding-bottom: 5px;margin-top: 10px;margin-bottom: 0px;font-family: Verdana;font-weight: normal;line-height: 100%;text-align: left;"&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag Start --&gt;
&lt;script type="text/javascript" src="http://ads.aspalliance.com/displayad.aspx?t=3&amp;m=90&amp;guid=4"&gt;&lt;/script&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag End --&gt;
&lt;br clear="all"&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7R_NzthFtZ3186m0o0KWquf6O0U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7R_NzthFtZ3186m0o0KWquf6O0U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7R_NzthFtZ3186m0o0KWquf6O0U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7R_NzthFtZ3186m0o0KWquf6O0U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RockfordLhotka/~4/pNp_lH_S5j0" height="1" width="1"/&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,92bb1647-47ff-4e7f-8b84-37c1e8b661c0.aspx</comments>
      <category>Microsoft .NET</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=53472720-e2f0-40f2-847b-0ef4736ee6d6</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,53472720-e2f0-40f2-847b-0ef4736ee6d6.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,53472720-e2f0-40f2-847b-0ef4736ee6d6.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=53472720-e2f0-40f2-847b-0ef4736ee6d6</wfw:commentRss>
      <title>DataAnnotations not in the client profile</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,53472720-e2f0-40f2-847b-0ef4736ee6d6.aspx</guid>
      <link>http://www.lhotka.net/weblog/DataAnnotationsNotInTheClientProfile.aspx</link>
      <pubDate>Fri, 06 Nov 2009 21:41:13 GMT</pubDate>
      <description>&lt;p&gt;
In Visual Studio 2010 and .NET 4.0 Microsoft is amping up the visibility of the “client
profile” concept. In fact, when you install the 4.0 client profile on a machine, it
doesn’t drag the rest of the framework to that client later – they just get the client
profile. And when you create a WPF or Windows Forms project in VS10 you default to
targeting the client profile.
&lt;/p&gt;
&lt;p&gt;
That’s all good – great in fact!!
&lt;/p&gt;
&lt;p&gt;
But I’ve fallen in love with the validation attribute concepts in System.ComponentModel.DataAnnotations.dll.
These attributes are designed specifically to enable a UI framework author (or a business
layer framework author – like me with CSLA .NET) to automatically create a rich user
experience based on the attributes decorating business objects.
&lt;/p&gt;
&lt;p&gt;
This concept was first fully realized in Silverlight 3 – a client technology – and
is now fully supported in .NET 4.0 &lt;em&gt;full profile&lt;/em&gt;. But it is a &lt;em&gt;client side
technology&lt;/em&gt;, and so should be in the client profile.
&lt;/p&gt;
&lt;p&gt;
I’ve logged this issue on connect, and recommend you vote for this to be resolved:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=502807"&gt;https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=502807&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=53472720-e2f0-40f2-847b-0ef4736ee6d6" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;div style="border-top: 1px dotted;padding-top: 8px;padding-bottom: 5px;margin-top: 10px;margin-bottom: 0px;font-family: Verdana;font-weight: normal;line-height: 100%;text-align: left;"&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag Start --&gt;
&lt;script type="text/javascript" src="http://ads.aspalliance.com/displayad.aspx?t=3&amp;m=90&amp;guid=4"&gt;&lt;/script&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag End --&gt;
&lt;br clear="all"&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DIuMtgfo2SRA7kNRpWLk777Wv1Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DIuMtgfo2SRA7kNRpWLk777Wv1Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DIuMtgfo2SRA7kNRpWLk777Wv1Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DIuMtgfo2SRA7kNRpWLk777Wv1Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RockfordLhotka/~4/SptMKYCGg84" height="1" width="1"/&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,53472720-e2f0-40f2-847b-0ef4736ee6d6.aspx</comments>
      <category>Microsoft .NET</category>
      <category>Windows Forms</category>
      <category>WPF</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=64e1ff17-ffe2-481e-a711-7ac434f3b0a5</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,64e1ff17-ffe2-481e-a711-7ac434f3b0a5.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,64e1ff17-ffe2-481e-a711-7ac434f3b0a5.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=64e1ff17-ffe2-481e-a711-7ac434f3b0a5</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>CSLA .NET 3.8.0 released and available!</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,64e1ff17-ffe2-481e-a711-7ac434f3b0a5.aspx</guid>
      <link>http://www.lhotka.net/weblog/CSLANET380ReleasedAndAvailable.aspx</link>
      <pubDate>Fri, 06 Nov 2009 02:48:50 GMT</pubDate>
      <description>&lt;p&gt;
CSLA .NET version 3.8.0 is now released and is available for download.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.lhotka.net/cslanet/download.aspx"&gt;Windows version&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.lhotka.net/cslalight/download.aspx"&gt;Silverlight version&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
For Windows Forms and Web Forms users there are not any major new features, but some
of the bug fixes may be valuable. Upgrading from 3.7 to 3.8 should be painless for
these UI types (as well as XML services and workflow interfaces).
&lt;/p&gt;
&lt;p&gt;
If you use WPF or Silverlight, you will almost certainly want to take a look at the
features in 3.8. The downside is that there are several breaking changes in the XAML
controls, but the upside is that the new XAML control implementations are far superior
to previous versions. Controls impacted include:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
PropertyStatus – now supports a “pull model” so a UI control can bind to properties
of PropertyStatus, rather than having PropertyStatus directly manipulate the UI control’s
IsReadOnly and IsEnabled properties. Also in Silverlight, PropertyStatus now makes
use of the Silverlight 3 binding capabilities. 
&lt;/li&gt;
&lt;li&gt;
InvokeMethod – can now be triggered by any UI event, and can invoke a couple different
method signatures on the DataContext. Also, MethodParameter is now bindable. The end
result is that InvokeMethod provides really good support for both the CslaDataProvider
model and the MVVM design pattern. 
&lt;/li&gt;
&lt;li&gt;
Execute – a new control that is a &lt;em&gt;trigger action&lt;/em&gt; that works in the Blend
3 Interactivity model. This is very similar to InvokeMethod, but works with the Blend
3 scheme. 
&lt;/li&gt;
&lt;li&gt;
ViewModelBase&amp;lt;T&amp;gt; – provides a base class to make it easy to build a viewmodel
class when using the MVVM pattern. 
&lt;/li&gt;
&lt;li&gt;
ViewModel&amp;lt;T&amp;gt; – provides a base class to make it easy to build a viewmodel class
that works with InvokeMethod/Execute when using the MVVM pattern. 
&lt;/li&gt;
&lt;li&gt;
CslaDataProvider – the ObjectInstance property is now bindable, so it is possible
to create master-detail (parent-child) relationships in the UI between different data
provider controls. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
See &lt;a href="http://www.lhotka.net/weblog/ct.ashx?id=0f76ad49-569f-45ee-91b5-ce954f0b59fa&amp;amp;url=http%3a%2f%2fwww.lhotka.net%2fweblog%2fCSLANET38Beta2MVVMSupport.aspx"&gt;this
blog post&lt;/a&gt; for more MVVM information.
&lt;/p&gt;
&lt;p&gt;
Other important or interesting features include:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Support for System.ComponentModel.DataAnnotations validation attributes. &lt;a href="http://www.lhotka.net/weblog/LeveragingDataAnnotationAttributesInCSLANET.aspx"&gt;This
blog post&lt;/a&gt; has information about the change.&lt;/li&gt;
&lt;li&gt;
A CSLA .NET specific model binder for ASP.NET MVC, enabling the use of CSLA .NET rule
methods and DataAnnotation validation attributes in the same object, with the UI displaying
combined results.&lt;/li&gt;
&lt;li&gt;
Performance enhancements for MobileFormatter, including the use of binary XML. &lt;a href="http://forums.lhotka.net/forums/thread/37377.aspx"&gt;This
forum thread&lt;/a&gt; has some great comparative information around binary XML and compression.&lt;/li&gt;
&lt;li&gt;
Better support for altering the behavior of IsDirty when using managed backing fields. &lt;a href="http://www.jasonbock.net/JB/Default.aspx?blog=entry.9cc70d85bef34e2b9a683ba82615f8a3"&gt;This
blog post&lt;/a&gt; has good information about using the changes.&lt;/li&gt;
&lt;li&gt;
All the samples have been updated to build with 3.8.0, and the MVVMexperiment projects
for WPF and Silverlight illustrate most of the new MVVM features.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
There are also numerous bug fixes, including a solution to the memory leak issue with
BusyAnimation and a null reference issue with LINQ to CSLA. See the change logs for
more details about bug fixes.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=64e1ff17-ffe2-481e-a711-7ac434f3b0a5" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;div style="border-top: 1px dotted;padding-top: 8px;padding-bottom: 5px;margin-top: 10px;margin-bottom: 0px;font-family: Verdana;font-weight: normal;line-height: 100%;text-align: left;"&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag Start --&gt;
&lt;script type="text/javascript" src="http://ads.aspalliance.com/displayad.aspx?t=3&amp;m=90&amp;guid=4"&gt;&lt;/script&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag End --&gt;
&lt;br clear="all"&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bKGRq3209aiuLWpodPXuBEfYy7U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bKGRq3209aiuLWpodPXuBEfYy7U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bKGRq3209aiuLWpodPXuBEfYy7U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bKGRq3209aiuLWpodPXuBEfYy7U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RockfordLhotka/~4/Cc3vG6F7h8Y" height="1" width="1"/&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,64e1ff17-ffe2-481e-a711-7ac434f3b0a5.aspx</comments>
      <category>CSLA .NET</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=89d338dc-9021-45b3-9c53-839762ea0b5d</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,89d338dc-9021-45b3-9c53-839762ea0b5d.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,89d338dc-9021-45b3-9c53-839762ea0b5d.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=89d338dc-9021-45b3-9c53-839762ea0b5d</wfw:commentRss>
      <slash:comments>12</slash:comments>
      <title>It is only 8, how can it be legacy???</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,89d338dc-9021-45b3-9c53-839762ea0b5d.aspx</guid>
      <link>http://www.lhotka.net/weblog/ItIsOnly8HowCanItBeLegacy.aspx</link>
      <pubDate>Thu, 05 Nov 2009 03:20:16 GMT</pubDate>
      <description>&lt;p&gt;
Of course I’m referring to Windows Forms, which is about 8 years old. Even in dog
years that’s not old. But in &lt;em&gt;software years&lt;/em&gt; it is pretty old I’m afraid…
&lt;/p&gt;
&lt;p&gt;
I’m writing this post because here and in other venues I’ve recently referred to Windows
Forms as “legacy”, along with asmx and even possibly Web Forms. This has caused a
certain amount of alarm, but I’m not here to apologize or mollify.
&lt;/p&gt;
&lt;p&gt;
Technologies come and go. That’s just life in our industry. I was a DEC VAX guy for
many years (I hear Ted Neward laughing now, he loves these stories), but I could see
the end coming years before it faded away, so I switched to the woefully immature
Windows platform (Windows 3.0 – what a step backward from the VAX!). I know many FoxPro
people who transitioned, albeit painfully, to VB or other tools/languages. The same
with Clipper/dBase/etc. Most PowerBuilder people transitioned to Java or .NET (though
much to my surprise I recently learned that PowerBuilder still actually exists – like
you can still buy it!!).
&lt;/p&gt;
&lt;p&gt;
All through my career I’ve been lucky or observant enough to jump ship before any
technology came down on my head. I switched to Windows before the VAX collapsed, and
switched to .NET before VB6 collapsed, etc. And honestly I can’t think of a case where
I didn’t feel like I was stepping back in time to use the “new technology” because
it was so immature compared to the old stuff. But every single time it was worth the
effort, because I avoided being trapped on a slowly fading platform/technology with
my skills becoming less relevant every day.
&lt;/p&gt;
&lt;p&gt;
But what is “legacy”? I once heard a consultant say “legacy is anything you’ve put
in production”. Which might be good for a laugh, but isn’t terribly useful in any
practical sense.
&lt;/p&gt;
&lt;p&gt;
I think “legacy” refers to a technology or platform that is no longer an area of focus
or investment by the creator/maintainer. In our world that mostly means Microsoft,
and so the question is where is Microsoft focused, where are they spending their money
and what are they enhancing?
&lt;/p&gt;
&lt;p&gt;
The answers are pretty clear:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Azure&lt;/li&gt;
&lt;li&gt;
Silverlight&lt;/li&gt;
&lt;li&gt;
ASP.NET MVC&lt;/li&gt;
&lt;li&gt;
WPF (to a lesser degree)&lt;/li&gt;
&lt;li&gt;
ADO.NET EF&lt;/li&gt;
&lt;li&gt;
WCF&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
These are the areas where the research, development, marketing and general energy
are all focused. Ask a Microsoft guy what’s cool or hot and you’ll hear about Azure
or Silverlight, maybe ADO.NET EF or ASP.NET MVC and possibly WPF or WCF. But you won’t
hear Windows Forms, Web Forms, asmx web services, Enterprise Services, Remoting, LINQ
to SQL, DataSet/TableAdapter/DataTable or numerous other technologies.
&lt;/p&gt;
&lt;p&gt;
Some of those other technologies aren’t legacy – they aren’t going away, they just
aren’t sexy. Raw ADO.NET, for example. Nobody talks about that, but ADO.NET EF can’t
exist without it, so it is safe. But in theory ADO.NET EF competes with the DataSet
(poorly, but still) and so the DataSet is a strong candidate for the “legacy” label.
&lt;/p&gt;
&lt;p&gt;
Silverlight and WPF both compete with Windows Forms. Poor Windows Forms is getting
no love, no meaningful enhancements or new features. It is just there. At the same
time, Silverlight gets a new release in less than 12 month cycles, and WPF gets all
sorts of amazingly cool new features for Windows 7. You tell me whether Windows Forms
is legacy. But whatever you decide, I’m surely spending zero cycles of my time on
it.
&lt;/p&gt;
&lt;p&gt;
asmx is obvious legacy too. Has been ever since WCF showed up, though WCF’s configuration
issues have been a plague on its existence. I rather suspect .NET 4.0 will address
those shortcomings though, making WCF as easy to use as asmx and driving the final
nail in the asmx coffin.
&lt;/p&gt;
&lt;p&gt;
Web Forms isn’t so clear to me. All the buzz is on ASP.NET MVC. That’s the technology
all the cool kids are using, and it really is some nice technology – I like it as
much as I’ll probably ever like a web technology. But if you look at .NET 4.0, Microsoft
has done some really nice things in Web Forms. So while it isn’t getting the hype
of MVC, it is still getting some very real love from the Microsoft development group
that owns the technology. So I don’t think Web Forms is legacy now or in .NET 4.0,
but beyond that it is hard to say. I strongly suspect the fate of Web Forms lies mostly
in its user base and whether they fight for it, whether they make Microsoft believe
it continues to be worth serious investment and improvement into the .NET 5.0 timeframe.
&lt;/p&gt;
&lt;p&gt;
For my part, I can tell you that it is amazingly (impossibly?) time-consuming to be
an expert on 7-9 different interface technologies (UI, service, workflow, etc). Sure
CSLA .NET supports &lt;em&gt;all of them&lt;/em&gt;, but there are increasing tensions between
the stagnant technologies (most notably Windows Forms) and the vibrant technologies
like Silverlight and WPF. It is no longer possible, for example, to create a collection
object that works with all the interface technologies – you just can’t do it. And
the time needed to deeply understand the different binding models and subtle differences
grows with each release of .NET.
&lt;/p&gt;
&lt;p&gt;
CSLA .NET 4.0 will absolutely still support all the interface technologies. But it
would be foolish to cut off the future to protect the past – that way lies doom. So
in CSLA .NET 4.0 you should expect to see support for Windows Forms still there, but
probably moved into another namespace (Csla.Windows or something), while the main
Csla namespace provides support for modern interface technologies like WPF, ASP.NET
MVC, Silverlight, etc.
&lt;/p&gt;
&lt;p&gt;
I am absolutely committed to providing a window of time where Windows Forms users
can migrate their apps to WPF or Silverlight while still enjoying the value of CSLA
.NET. And I really hope to make that reasonably smooth – ideally you’ll just have
to change your base class types for your business objects when you switch the UI for
the object from Windows Forms to XAML – though I suspect other minor tweaks may be
necessary as well in some edge cases.
&lt;/p&gt;
&lt;p&gt;
But let’s face it, at some point CSLA .NET does have to drop legacy technologies.
I’m just one guy, and even with Magenic being such a great patron it isn’t realistic
to support every technology ever invented for .NET :)&amp;#160; I don’t think the time
to drop Windows Forms is in 4.0, because there are way too many people who need to
migrate to WPF over the next 2-3 years.
&lt;/p&gt;
&lt;p&gt;
On the other hand, if you and your organization aren’t developing a strategy to move
off Windows Forms in the next few years I suspect you’ll eventually wake up one day
and realize you are in a bad spot. One of those spots where you can’t hire anyone
because no one else has done your technology for years, and nobody really remembers
how it works (or at least won’t admit they do unless you offer them huge sums of money).
&lt;/p&gt;
&lt;p&gt;
I don’t see this as bad. People who want stability shouldn’t be in computing. They
should be in something like accounts receivable or accounts payable – parts of business
that haven’t changed substantially for decades, or perhaps centuries.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=89d338dc-9021-45b3-9c53-839762ea0b5d" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;div style="border-top: 1px dotted;padding-top: 8px;padding-bottom: 5px;margin-top: 10px;margin-bottom: 0px;font-family: Verdana;font-weight: normal;line-height: 100%;text-align: left;"&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag Start --&gt;
&lt;script type="text/javascript" src="http://ads.aspalliance.com/displayad.aspx?t=3&amp;m=90&amp;guid=4"&gt;&lt;/script&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag End --&gt;
&lt;br clear="all"&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RZT8AWjGGxgheoms8REp73nShJg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RZT8AWjGGxgheoms8REp73nShJg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RZT8AWjGGxgheoms8REp73nShJg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RZT8AWjGGxgheoms8REp73nShJg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RockfordLhotka/~4/Z-MWiJ4cHlA" height="1" width="1"/&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,89d338dc-9021-45b3-9c53-839762ea0b5d.aspx</comments>
      <category>CSLA .NET</category>
      <category>Microsoft .NET</category>
      <category>Silverlight</category>
      <category>WCF</category>
      <category>Web</category>
      <category>Windows Forms</category>
      <category>WPF</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=c866ac92-d759-4bb6-9fdc-e10f4aba4f3d</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,c866ac92-d759-4bb6-9fdc-e10f4aba4f3d.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,c866ac92-d759-4bb6-9fdc-e10f4aba4f3d.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=c866ac92-d759-4bb6-9fdc-e10f4aba4f3d</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <title>Prioritizing CSLA .NET work items</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,c866ac92-d759-4bb6-9fdc-e10f4aba4f3d.aspx</guid>
      <link>http://www.lhotka.net/weblog/PrioritizingCSLANETWorkItems.aspx</link>
      <pubDate>Mon, 02 Nov 2009 16:25:17 GMT</pubDate>
      <description>&lt;p&gt;
When I sit down to work on CSLA .NET I look at the &lt;a href="http://www.lhotka.net/cslabugs/"&gt;wish
list&lt;/a&gt;, and I tend to order my work based on a few priorities:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Is it a bug with no workaround? 
&lt;/li&gt;
&lt;li&gt;
Will it help a Magenic client/project? 
&lt;/li&gt;
&lt;li&gt;
Is it fun/interesting/intellectually stimulating to me? 
&lt;/li&gt;
&lt;li&gt;
Will it help make the lives of a reasonable number of users better? 
&lt;/li&gt;
&lt;li&gt;
Is it easy (low-hanging fruit)? 
&lt;/li&gt;
&lt;li&gt;
Does it make CSLA more &amp;quot;complete&amp;quot;? (like the recent MVVM work)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
And there are some anti-priorities:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Is it boring? Or worse, boring &lt;em&gt;and time consuming&lt;/em&gt;? 
&lt;/li&gt;
&lt;li&gt;
Does it increase complexity without amazing payoff in productivity/flexibility? 
&lt;/li&gt;
&lt;li&gt;
Does it increase my testing/support surface area? 
&lt;/li&gt;
&lt;li&gt;
Does it focus on &amp;quot;legacy&amp;quot; technologies (now including Windows Forms, Remoting,
asmx, Enterprise Services and maybe Web Forms)? 
&lt;/li&gt;
&lt;li&gt;
Does it solve a problem that's already been solved? (like ORM stuff or UI framework
stuff)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
These priorities are especially important during point releases, but they certainly
factor into major releases (like 4.0) as well. Though the &amp;quot;fun factor&amp;quot; becomes
a much bigger priority for major releases, and tactical things like bug fixes or specific
Magenic client requirements are usually not as big an issue.
&lt;/p&gt;
&lt;p&gt;
I guess this is one advantage of working on a free framework. Since I’m not directly
making money by selling the framework, I can prioritize what I do based on my own
intellectual stimulation and fun as much as anything else.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=c866ac92-d759-4bb6-9fdc-e10f4aba4f3d" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;div style="border-top: 1px dotted;padding-top: 8px;padding-bottom: 5px;margin-top: 10px;margin-bottom: 0px;font-family: Verdana;font-weight: normal;line-height: 100%;text-align: left;"&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag Start --&gt;
&lt;script type="text/javascript" src="http://ads.aspalliance.com/displayad.aspx?t=3&amp;m=90&amp;guid=4"&gt;&lt;/script&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag End --&gt;
&lt;br clear="all"&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XVU9VS9dJRc2U-baABn0JL1fQV4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XVU9VS9dJRc2U-baABn0JL1fQV4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XVU9VS9dJRc2U-baABn0JL1fQV4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XVU9VS9dJRc2U-baABn0JL1fQV4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RockfordLhotka/~4/9HYbyVo5saQ" height="1" width="1"/&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,c866ac92-d759-4bb6-9fdc-e10f4aba4f3d.aspx</comments>
      <category>CSLA .NET</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=e0936ac2-4b52-4e15-af01-bc383eede6ca</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,e0936ac2-4b52-4e15-af01-bc383eede6ca.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,e0936ac2-4b52-4e15-af01-bc383eede6ca.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=e0936ac2-4b52-4e15-af01-bc383eede6ca</wfw:commentRss>
      <title>CSLA .NET 3.8.0 Beta 3 available</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,e0936ac2-4b52-4e15-af01-bc383eede6ca.aspx</guid>
      <link>http://www.lhotka.net/weblog/CSLANET380Beta3Available.aspx</link>
      <pubDate>Fri, 30 Oct 2009 23:07:05 GMT</pubDate>
      <description>&lt;p&gt;
CSLA .NET 3.8.0 Beta 3 is now available for download
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.lhotka.net/cslanet/download.aspx"&gt;Windows download&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.lhotka.net/cslalight/download.aspx"&gt;Silverlight download&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Beta 3 includes fixes for some bugs found in Beta 2 (mostly in ViewModelBase and BusyAnimation),
and two more significant changes:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
InvokeMethod no longer attempts to manage the attached UI control’s IsEnabled property;
this is a breaking change, but was necessary to avoid an otherwise unavoidable memory
leak. It wasn’t a good practice anyway, so this implementation is both safer and better.&lt;/li&gt;
&lt;li&gt;
There’s a new Csla.Web.Mvc.CslaModelBinder class; it addresses a key issue around
the data annotation validation attributes and how their validation information is
reported back to the ASP.NET MVC framework. (I know I said Beta 1 was feature-complete,
but this was too important to hold back…)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I’ve also continued to update samples, and I think all the C# samples are now updated,
as are some of the VB ones. Hopefully I can get the rest of the VB ones updated before
final release.
&lt;/p&gt;
&lt;p&gt;
I am still on track to release 3.8.0 in about a week – hopefully Nov 6 or 9.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=e0936ac2-4b52-4e15-af01-bc383eede6ca" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;div style="border-top: 1px dotted;padding-top: 8px;padding-bottom: 5px;margin-top: 10px;margin-bottom: 0px;font-family: Verdana;font-weight: normal;line-height: 100%;text-align: left;"&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag Start --&gt;
&lt;script type="text/javascript" src="http://ads.aspalliance.com/displayad.aspx?t=3&amp;m=90&amp;guid=4"&gt;&lt;/script&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag End --&gt;
&lt;br clear="all"&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OqJBnn-AUs2x-qfGYIX-5QgWnhc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OqJBnn-AUs2x-qfGYIX-5QgWnhc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OqJBnn-AUs2x-qfGYIX-5QgWnhc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OqJBnn-AUs2x-qfGYIX-5QgWnhc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RockfordLhotka/~4/eZsBSZnBY5o" height="1" width="1"/&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,e0936ac2-4b52-4e15-af01-bc383eede6ca.aspx</comments>
      <category>CSLA .NET</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=ef9c2ecd-03b6-451f-a04d-d015a3763c10</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,ef9c2ecd-03b6-451f-a04d-d015a3763c10.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,ef9c2ecd-03b6-451f-a04d-d015a3763c10.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=ef9c2ecd-03b6-451f-a04d-d015a3763c10</wfw:commentRss>
      <title>SOA Manifesto</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,ef9c2ecd-03b6-451f-a04d-d015a3763c10.aspx</guid>
      <link>http://www.lhotka.net/weblog/SOAManifesto.aspx</link>
      <pubDate>Thu, 29 Oct 2009 16:23:13 GMT</pubDate>
      <description>&lt;p&gt;
I’m not too sure about all this “manifesto” stuff these days. Certain right-wing politicians
from days gone by are surely rolling in their graves. Then again, today’s highly communist/socialist
oriented open source worldview would have gotten many of us into a lot of trouble
just a few decades ago…
&lt;/p&gt;
&lt;p&gt;
Regardless, there’s now the &lt;a href="http://soa-manifesto.org/"&gt;SOA Manifesto&lt;/a&gt;.
And it seems to capture the spirit of SOA in a concise manner.
&lt;/p&gt;
&lt;p&gt;
In fact, its opening statement, talking about putting business value above technology
and so forth, seems to make sense for any software endeavor, not just ones that are
service-oriented.
&lt;/p&gt;
&lt;p&gt;
If you consider that SOA is much more of an &lt;em&gt;enterprise&lt;/em&gt; architecture than
it is an &lt;em&gt;application&lt;/em&gt; architecture, this all makes a great deal of sense.
The idea that applications should use service-oriented communication when they need
to interact with each other is exactly the sweet spot for service-orientation. 
&lt;/p&gt;
&lt;p&gt;
In that context, saying things like external uniformity and internal diversity are
good is clearly correct; because different applications may require different technologies
or implementation choices, but they all need to work with some enterprise-standardized
message-based service model.
&lt;/p&gt;
&lt;p&gt;
I still suspect SOA may ultimately make a big difference in our industry. But I also
think it will take decades to do so, just like object-orientation. People were working
on object-orientation for well over 20 years before the ideas became mainstream. SOA
is (if you are &lt;em&gt;really&lt;/em&gt; generous) maybe a decade old, so it is probably time
to work on some formalism so it is ready to become mainstream 10-15 years from now
:)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=ef9c2ecd-03b6-451f-a04d-d015a3763c10" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;div style="border-top: 1px dotted;padding-top: 8px;padding-bottom: 5px;margin-top: 10px;margin-bottom: 0px;font-family: Verdana;font-weight: normal;line-height: 100%;text-align: left;"&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag Start --&gt;
&lt;script type="text/javascript" src="http://ads.aspalliance.com/displayad.aspx?t=3&amp;m=90&amp;guid=4"&gt;&lt;/script&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag End --&gt;
&lt;br clear="all"&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/saH6sdtOPhYnZgH37bvmfFSpUkM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/saH6sdtOPhYnZgH37bvmfFSpUkM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/saH6sdtOPhYnZgH37bvmfFSpUkM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/saH6sdtOPhYnZgH37bvmfFSpUkM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RockfordLhotka/~4/vEgd18zAAn4" height="1" width="1"/&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,ef9c2ecd-03b6-451f-a04d-d015a3763c10.aspx</comments>
      <category>Service-Oriented</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=0f76ad49-569f-45ee-91b5-ce954f0b59fa</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,0f76ad49-569f-45ee-91b5-ce954f0b59fa.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,0f76ad49-569f-45ee-91b5-ce954f0b59fa.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=0f76ad49-569f-45ee-91b5-ce954f0b59fa</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <title>CSLA .NET 3.8.0 Beta 2 available</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,0f76ad49-569f-45ee-91b5-ce954f0b59fa.aspx</guid>
      <link>http://www.lhotka.net/weblog/CSLANET380Beta2Available.aspx</link>
      <pubDate>Mon, 26 Oct 2009 04:37:49 GMT</pubDate>
      <description>&lt;p&gt;
I have put CSLA .NET 3.8.0 Beta 2 online for download.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.lhotka.net/cslanet/download.aspx"&gt;Windows version&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.lhotka.net/cslalight/download.aspx"&gt;Silverlight version&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
This completes the work for version 3.8.0, and (barring anyone finding a show-stopping
issue) I plan to release 3.8 in just a couple weeks.
&lt;/p&gt;
&lt;p&gt;
For Windows Forms and Web Forms users there are not any major new features, but some
of the bug fixes may be valuable. Upgrading from 3.7 to 3.8 should be painless for
these UI types (as well as XML services and workflow interfaces).
&lt;/p&gt;
&lt;p&gt;
If you use WPF or Silverlight, you will almost certainly want to take a look at the
features in 3.8. The downside is that there are several breaking changes in the XAML
controls, but the upside is that the new XAML control implementations are far superior
to previous versions. Controls impacted include:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
PropertyStatus – now supports a “pull model” so a UI control can bind to properties
of PropertyStatus, rather than having PropertyStatus directly manipulate the UI control’s
IsReadOnly and IsEnabled properties. Also in Silverlight, PropertyStatus now makes
use of the Silverlight 3 binding capabilities.&lt;/li&gt;
&lt;li&gt;
InvokeMethod – can now be triggered by any UI event, and can invoke a couple different
method signatures on the DataContext. Also, MethodParameter is now bindable. The end
result is that InvokeMethod provides really good support for both the CslaDataProvider
model and the MVVM design pattern.&lt;/li&gt;
&lt;li&gt;
Execute – a new control that is a &lt;em&gt;trigger action&lt;/em&gt; that works in the Blend
3 Interactivity model. This is very similar to InvokeMethod, but works with the Blend
3 scheme.&lt;/li&gt;
&lt;li&gt;
ViewModelBase&amp;lt;T&amp;gt; – provides a base class to make it easy to build a viewmodel
class when using the MVVM pattern.&lt;/li&gt;
&lt;li&gt;
ViewModel&amp;lt;T&amp;gt; – provides a base class to make it easy to build a viewmodel class
that works with InvokeMethod/Execute when using the MVVM pattern.&lt;/li&gt;
&lt;li&gt;
CslaDataProvider – the ObjectInstance property is now bindable, so it is possible
to create master-detail (parent-child) relationships in the UI between different data
provider controls.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
See &lt;a href="http://www.lhotka.net/weblog/CSLANET38Beta2MVVMSupport.aspx"&gt;this blog
post&lt;/a&gt; for more MVVM information.
&lt;/p&gt;
&lt;p&gt;
Other important or interesting features include:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Support for System.ComponentModel.DataAnnotations validation attributes.&lt;/li&gt;
&lt;li&gt;
Performance enhancements for MobileFormatter, including the use of binary XML.&lt;/li&gt;
&lt;li&gt;
Better support for altering the behavior of IsDirty when using managed backing fields.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
There are also numerous bug fixes, including (hopefully) a solution to the memory
leak issue with BusyAnimation. See the change logs for more details about bug fixes.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=0f76ad49-569f-45ee-91b5-ce954f0b59fa" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;div style="border-top: 1px dotted;padding-top: 8px;padding-bottom: 5px;margin-top: 10px;margin-bottom: 0px;font-family: Verdana;font-weight: normal;line-height: 100%;text-align: left;"&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag Start --&gt;
&lt;script type="text/javascript" src="http://ads.aspalliance.com/displayad.aspx?t=3&amp;m=90&amp;guid=4"&gt;&lt;/script&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag End --&gt;
&lt;br clear="all"&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/b0ezcGfdc62R8wUgqFG0CRA-9yc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b0ezcGfdc62R8wUgqFG0CRA-9yc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/b0ezcGfdc62R8wUgqFG0CRA-9yc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b0ezcGfdc62R8wUgqFG0CRA-9yc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RockfordLhotka/~4/mxLwoFlIYIE" height="1" width="1"/&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,0f76ad49-569f-45ee-91b5-ce954f0b59fa.aspx</comments>
      <category>CSLA .NET</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=e269f649-a4e9-44aa-955a-61125704f056</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,e269f649-a4e9-44aa-955a-61125704f056.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,e269f649-a4e9-44aa-955a-61125704f056.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=e269f649-a4e9-44aa-955a-61125704f056</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>CSLA .NET 3.8 Beta 2 MVVM support</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,e269f649-a4e9-44aa-955a-61125704f056.aspx</guid>
      <link>http://www.lhotka.net/weblog/CSLANET38Beta2MVVMSupport.aspx</link>
      <pubDate>Mon, 26 Oct 2009 04:23:04 GMT</pubDate>
      <description>&lt;p&gt;
I’ve blogged about MVVM several times over the past few months. If you watch my posts
you’ll see that I started out pretty skeptical of the pattern, and then worked through
it trying to find the shiny silver lining that was promised.
&lt;/p&gt;
&lt;p&gt;
One of the biggest challenges with patterns is that people expect them to be a recipe,
when in reality they are just a vague formalization of a concept. Just look at MVC,
an incredibly mature pattern, and all the radically different ways it gets implemented
(for better or often worse) in applications. While MVVM isn’t nearly as mature as
MVC, it turns out that it really is a good concept – when “applied correctly”.
&lt;/p&gt;
&lt;p&gt;
In my view a pattern should only be used if its positive consequences outweigh its
negative consequences. Many patterns, oddly enough, require extra code and/or configuration
over what you’d normally write – which is a negative consequence. And in some interpretations
of MVVM this is very much the case – which was the primary reason for my initial skepticism.
&lt;/p&gt;
&lt;p&gt;
On the other hand, with some thought, foresight and work it is often possible to mitigate
some of the more negative consequences of many of the more popular patterns. This
turns out to be absolutely true for MVVM.
&lt;/p&gt;
&lt;p&gt;
To me, the real sweet spot for a pattern is if it can provide its positive consequences
with little or no negative impact at all.
&lt;/p&gt;
&lt;p&gt;
My time with CSLA .NET 3.8 has been divided into just a few areas:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Bug fixes (minor)&lt;/li&gt;
&lt;li&gt;
DataAnnotations (minor – but really nice)&lt;/li&gt;
&lt;li&gt;
Silverlight 3 element binding (major – also really nice)&lt;/li&gt;
&lt;li&gt;
MVVM support (major – and very cool)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
In the end, I think I’ve got something that enables the use of the MVVM design pattern,
probably in several variations, to work swimmingly with CSLA .NET. I’ll go so far
as to say that I think this implementation of MVVM makes developing Silverlight and
WPF apps &lt;i&gt;easier&lt;/i&gt; than out-of-the-box coding (drag-and-drop, handling UI events,
using data provider controls). And by easier I mean no more code, often less code,
and easier to read/test/maintain code. So the pattern is purely helpful, with no negative
consequences of note. Exactly what you’d hope for.
&lt;/p&gt;
&lt;p&gt;
What does this look like?
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;CSLA .NET MVVM Support&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
First, you must realize that CSLA .NET helps you create what’s called a &lt;i&gt;rich model&lt;/i&gt; as
opposed to various other technologies (like Add Service Reference) that help you create
an &lt;i&gt;anemic model&lt;/i&gt;. Using MVVM with an anemic model is useful, but can require
a lot of work, because your viewmodel object needs to compensate for all the stuff
the model doesn’t do. But with a rich model, the viewmodel requires far less work
because the model is already first-class citizen.
&lt;/p&gt;
&lt;p&gt;
To this end, CSLA .NET provides some helper types that you may optionally use to enable
a rich model MVVM implementation. At the same time, I fully recognize that many (most?)
people will find/build and use an MVVM UI framework, so the CSLA .NET helper types
can be used individually, all together or not at all – as you choose.
&lt;/p&gt;
&lt;p&gt;
Two parts of MVVM already (mostly) exist if you are using CSLA .NET and Silverlight
or WPF. CSLA .NET helps you create business domain objects that are your Model, and
XAML helps you create your View (with a little help). So in my mind those are essentially
a given. What’s left is the need to create the ViewModel.
&lt;/p&gt;
&lt;p&gt;
Notice that I said XAML gives you the view – &lt;i&gt;with a little help&lt;/i&gt;. This is because
WPF commanding isn’t quite enough to do MVVM, and Silverlight doesn’t even have commanding.
So the “little help” is something that handles arbitrary UI events and transforms
them into arbitrary method calls on the DataContext (presumably your viewmodel). I
would expect any decent MVVM UI framework to solve this most basic problem, and of
course they do. Sadly there’s no standard solution, so each UI framework does their
own thing.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;View Event Handling&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
While not a UI framework, CSLA .NET does provide a basic solution to this one critical
problem with using XAML to create a view. In fact it provides &lt;i&gt;two solutions&lt;/i&gt;:
InvokeMethod and Execute.
&lt;/p&gt;
&lt;p&gt;
InvokeMethod is an attached property that understands how to handle an arbitrary UI
event and to call an arbitrary method on the DataContext when that event is raised.
As an attached property, you can attach it to any UIElement (FrameworkElement in Silverlight)
to handle any event to call any method on the DataContext. Here’s a simple example:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&amp;lt;Button Content=”Save” 
&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; csla:InvokeMethod.TriggerEvent=”Click” 
&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; csla:InvokeMethod.MethodName=”SaveData”
/&amp;gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Execute is similar, but relies on the Blend 3 System.Windows.Interactivity event trigger
concept to detect that the event was raised:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&amp;lt;Button Content=&amp;quot;Save&amp;quot;&amp;gt; 
&lt;br /&gt;
&amp;#160; &amp;lt;i:Interaction.Triggers&amp;gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &amp;lt;i:EventTrigger EventName=&amp;quot;Click&amp;quot;&amp;gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;csla:Execute MethodName=&amp;quot;SaveData&amp;quot; /&amp;gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &amp;lt;/i:EventTrigger&amp;gt; 
&lt;br /&gt;
&amp;#160; &amp;lt;/i:Interaction.Triggers&amp;gt; 
&lt;br /&gt;
&amp;lt;/Button&amp;gt; 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
The advantage of using InvokeMethod is that it has several options around data binding
that simply aren’t available to a trigger action like Execute. Most notably, InvokeMethod
has a MethodParameter property that can be bound using a binding expression – so it
can pull values from other UI controls, resources, the DataContext, etc. There’s no
way to do this with a trigger action like Execute.
&lt;/p&gt;
&lt;p&gt;
The advantage of using Execute is that trigger actions are something the Blend 3 designer
understands. So InvokeMethod pretty much requires typing XAML, while Execute integrates
more naturally into the Blend design experience.
&lt;/p&gt;
&lt;p&gt;
In either case, the method on your viewmodel looks like this:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
public void SaveData() 
&lt;br /&gt;
{ 
&lt;br /&gt;
}
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Or this:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
public void SaveData(object sender, ExecuteEventArgs e) 
&lt;br /&gt;
{ 
&lt;br /&gt;
}
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Either one is fine, as InvokeMethod and Execute will work with either method signature.
If you use the second option, the args parameter contains information about the control
the raises the event, the event’s args and an optional MethodParameter value.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Creating a ViewModel&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
When using a rich model, I believe that a good viewmodel object will expose the model
as a property, so the View can bind directly against the Model &lt;i&gt;and still have access
to the viewmodel&lt;/i&gt;. This way the viewmodel can extend and enhance the model without
any extra effort. This works particularly well if the model already understands data
binding – which is one of the primary features of CSLA .NET.
&lt;/p&gt;
&lt;p&gt;
CSLA .NET includes ViewModelBase&amp;lt;T&amp;gt; and ViewModel&amp;lt;T&amp;gt;, both of which are
base classes designed to make it easy to build a viewmodel for a CSLA .NET business
object.
&lt;/p&gt;
&lt;p&gt;
ViewModelBase has a public Model property, a handful of other useful public properties
(like CanSave), and a whole bunch of protected methods. Again, my assumption is that
many people will use some MVVM UI framework, and that framework will have its own
constraints on how public methods must be implemented for their particular “commanding
equivalent” functionality. The ViewModelBase class allows you to create public methods
matching your UI framework’s requirements, but you can usually just delegate those
calls to existing protected methods that do most of the work. These methods include: 
&lt;table border="0" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
&lt;p&gt;
DoRefresh
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="377"&gt;
&lt;p&gt;
(WPF only) Synchronously invokes a static factory method to create/fetch the Model.
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
&lt;p&gt;
BeginRefresh
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="377"&gt;
&lt;p&gt;
Asynchronously invokes a static factory method to create/fetch the Model.
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
&lt;p&gt;
DoSave
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="377"&gt;
&lt;p&gt;
(WPF only) Synchronously saves the Model (if it is a root object).
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
&lt;p&gt;
BeginSave
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="377"&gt;
&lt;p&gt;
Asynchronously saves the Model (if it is a root object).
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
&lt;p&gt;
AddItem
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="377"&gt;
&lt;p&gt;
Adds an item to the collection (if the Model is a BusinessListBase).
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
&lt;p&gt;
Remove
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="377"&gt;
&lt;p&gt;
Removes an item from the collection (if the Model is a BusinessListBase).
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
&lt;p&gt;
Delete
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="377"&gt;
&lt;p&gt;
Marks the Model for deletion (if the Model is a root BusinessBase).
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
&lt;p&gt;
Cancel
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="377"&gt;
&lt;p&gt;
Cancels any changes that have been made to the Model (if ManageObjectLifetime is true).
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;
ViewModel is a subclass of ViewModelBase that implements public methods for use by
InvokeMethod and/or Execute. If you use InvokeMethod/Execute, then you’ll want to
create your viewmodel objects by subclassing ViewModel:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
public class CustomerViewModel : ViewModel&amp;lt;Customer&amp;gt; 
&lt;br /&gt;
{ 
&lt;br /&gt;
&amp;#160; public CustomerViewModel() 
&lt;br /&gt;
&amp;#160; { 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; BeginRefresh(“NewCustomer”); 
&lt;br /&gt;
&amp;#160; } 
&lt;br /&gt;
}
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
In many cases the constructor is all you’ll need to write, since the ViewModel&amp;lt;T&amp;gt;
base class already implements the methods necessary to build a standard data entry
form.
&lt;/p&gt;
&lt;p&gt;
Again, if you are using an MVVM UI framework, you’ll probably want to create your
own base class, somewhat like ViewModel&amp;lt;T&amp;gt;, by subclassing ViewModelBase&amp;lt;T&amp;gt;
and implementing your public methods to match the requirements of the UI framework.
You can use the code in ViewModel&amp;lt;T&amp;gt; as an example of how to do this.
&lt;/p&gt;
&lt;p&gt;
I should also point out that the Model property is bindable. This means you can create
“child viewmodel” objects that get their Model value by being bound to the property
of some “parent viewmodel” or parent model. For example, you might have a form for
working with SalesOrder objects, so your top level viewmodel exposes a SalesOrder
object through its Model property. The following would be the XAML to set up the viewmodel
for the form:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&amp;lt;UserControl.Resources&amp;gt; 
&lt;br /&gt;
&amp;#160; &amp;lt;this:SalesOrderViewModel x:Key=&amp;quot;ViewModel&amp;quot; /&amp;gt; 
&lt;br /&gt;
&amp;lt;/UserControl.Resources&amp;gt; 
&lt;br /&gt;
&amp;lt;Grid Name=”LayoutRoot” DataContext=”{Binding Source={StaticResource ViewModel}}”&amp;gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Now you could just bind the detail region of the form (where you show the line items)
to the LineItems property of the business object, and that works fine.
&lt;/p&gt;
&lt;p&gt;
But suppose you want to bind a button or hyperlink control to an AddItem() method
so the user can add items to the LineItems collection. How do you do that without
writing code? The answer is that you set up a viewmodel (probably LineItemsViewModel)
for that child region of the form, and you have the Model property of LineItemsViewModel
bound to the LineItems property of the SalesOrder business object. In the child region
you’d do something like this:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&amp;lt;Grid Name=”ChildRegionContainer”&amp;gt; 
&lt;br /&gt;
&amp;#160; &amp;lt;Grid.Resources&amp;gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &amp;lt;this:LineItemsViewModel x:Key=”LineItemsViewModel” 
&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;&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;&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;&amp;#160;
Model=”{Binding Path=Model.LineItems}”/&amp;gt; 
&lt;br /&gt;
&amp;#160; &amp;lt;/Grid.Resources&amp;gt; 
&lt;br /&gt;
&amp;#160; &amp;lt;Grid Name=”ChildRegion” DataContext=”{Binding Source={StaticResource LineItemsViewModel}}”&amp;gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
The advantage of this is that any controls inside the ChildRegion grid can invoke
methods on LineItemsViewModel – such as AddItem() or Remove() to add and remove items
from the collection – all with no coding on your part.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Creating the Model&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
This is the part where I just smile. Because you already have the model if you used
CSLA .NET and good object-oriented design to build your business domain objects. The
same business objects you may already be using for Windows Forms or Web Forms will
almost certainly just work in your WPF or Silverlight application (assuming you are
using CSLA .NET 3.5 or higher – and can upgrade to CSLA .NET 3.8).
&lt;/p&gt;
&lt;p&gt;
The primary goal of CSLA .NET, first and foremost, is to enable you to create a business
layer that encapsulates your business, validation and authorization logic into a set
of business domain objects. By doing so, you end up with a formal business layer on
top of which you can build Silverlight, WPF, ASP.NET MVC, Web Forms, Windows Forms,
asmx service or WCF service interfaces.
&lt;/p&gt;
&lt;p&gt;
So the whole point of having this business layer is that when something like XAML
comes along all you need to worry about is how to rebuild the UI, possibly using MVVM.
But you &lt;i&gt;don’t&lt;/i&gt; need to worry about rebuilding the business layer, or the data
access layer or the database.
&lt;/p&gt;
&lt;p&gt;
I’m pretty happy with the way CSLA .NET 3.8 enables the MVVM design pattern in Silverlight
and WPF. As I said to start with, you’d hope that a pattern gives you positive consequences
with little or no downside. With the support of InvokeMethod, Execute, ViewModelBase
and ViewModel I think CSLA .NET makes MVVM meet that goal. And in fact, I think it
allows you to build a UI with &lt;i&gt;less code&lt;/i&gt; than many, seemingly simpler, alternatives.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=e269f649-a4e9-44aa-955a-61125704f056" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;div style="border-top: 1px dotted;padding-top: 8px;padding-bottom: 5px;margin-top: 10px;margin-bottom: 0px;font-family: Verdana;font-weight: normal;line-height: 100%;text-align: left;"&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag Start --&gt;
&lt;script type="text/javascript" src="http://ads.aspalliance.com/displayad.aspx?t=3&amp;m=90&amp;guid=4"&gt;&lt;/script&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag End --&gt;
&lt;br clear="all"&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/blJFyuwzH_7t6vlTSxdVQF0vtkk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/blJFyuwzH_7t6vlTSxdVQF0vtkk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/blJFyuwzH_7t6vlTSxdVQF0vtkk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/blJFyuwzH_7t6vlTSxdVQF0vtkk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RockfordLhotka/~4/n1h_5OEDIZo" height="1" width="1"/&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,e269f649-a4e9-44aa-955a-61125704f056.aspx</comments>
      <category>CSLA .NET</category>
      <category>Silverlight</category>
      <category>WPF</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=12d4c0fd-0d0e-4868-8128-74910c48061d</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,12d4c0fd-0d0e-4868-8128-74910c48061d.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,12d4c0fd-0d0e-4868-8128-74910c48061d.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=12d4c0fd-0d0e-4868-8128-74910c48061d</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <title>Windows 7 features in .NET</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,12d4c0fd-0d0e-4868-8128-74910c48061d.aspx</guid>
      <link>http://www.lhotka.net/weblog/Windows7FeaturesInNET.aspx</link>
      <pubDate>Thu, 22 Oct 2009 16:56:24 GMT</pubDate>
      <description>&lt;p&gt;
I was just complaining that the cool new Windows 7 features weren’t available to me
as a .NET developer – at least not without painful p/invoke calls.
&lt;/p&gt;
&lt;p&gt;
My complaints were ill-founded however, as it turns out there’s a solution in the
form of the &lt;a href="http://code.msdn.microsoft.com/WindowsAPICodePack"&gt;Windows API
Code Pack&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
This makes me happy (though I haven’t tried it yet, so I’m just assuming it works)
because I want access to Jump Lists and some other Windows shell integration concepts
– which appear to be nicely included in the code pack.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=12d4c0fd-0d0e-4868-8128-74910c48061d" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;div style="border-top: 1px dotted;padding-top: 8px;padding-bottom: 5px;margin-top: 10px;margin-bottom: 0px;font-family: Verdana;font-weight: normal;line-height: 100%;text-align: left;"&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag Start --&gt;
&lt;script type="text/javascript" src="http://ads.aspalliance.com/displayad.aspx?t=3&amp;m=90&amp;guid=4"&gt;&lt;/script&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag End --&gt;
&lt;br clear="all"&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bOaDNZZs-Tf1K6sVU7eat7uTCUg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bOaDNZZs-Tf1K6sVU7eat7uTCUg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bOaDNZZs-Tf1K6sVU7eat7uTCUg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bOaDNZZs-Tf1K6sVU7eat7uTCUg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RockfordLhotka/~4/3dxV7HQjRpg" height="1" width="1"/&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,12d4c0fd-0d0e-4868-8128-74910c48061d.aspx</comments>
      <category>Microsoft .NET</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=4f56547c-f34f-43b6-a7a7-19cc221008ba</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,4f56547c-f34f-43b6-a7a7-19cc221008ba.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,4f56547c-f34f-43b6-a7a7-19cc221008ba.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=4f56547c-f34f-43b6-a7a7-19cc221008ba</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <title>Klingon Christmas Carol</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,4f56547c-f34f-43b6-a7a7-19cc221008ba.aspx</guid>
      <link>http://www.lhotka.net/weblog/KlingonChristmasCarol.aspx</link>
      <pubDate>Thu, 22 Oct 2009 03:20:36 GMT</pubDate>
      <description>&lt;p&gt;
If you didn’t know, I’m an uber-geek in a family of uber-geeks, and that (of course)
includes Star Trek, as well as supporting and being involved in the local fan community.
&lt;/p&gt;
&lt;p&gt;
My wife is the fight choreographer for this play (and setting up fights with a batleth
is really fun!). And the show itself is very good; good acting, well written script
and a nice mix of action and comedy. It is a novel twist on an old story :)
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;About the &lt;/em&gt;&lt;a href="http://www.cbtheatre.org/KCC2009/KCC2009.htm"&gt;&lt;em&gt;Klingon
Christmas Carol&lt;/em&gt;&lt;/a&gt;&lt;em&gt;:&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Scrooge has no honor, nor any courage. Can three ghosts help him to become the
true warrior he ought to be in time to save Tiny Tim from a horrible fate? Performed
in the Original Klingon with English Supertitles, and narrative analysis from The
Vulcan Institute of Cultural Anthropology.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;The Dickens classic tale of ghosts and redemption adapted to reflect the Warrior
Code of Honor and then translated into tlhIngan Hol&amp;#160; (That's the Klingon Language).&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;A co-production of Commedia Beauregard and the IKV RakeHell of the Klingon Assault
Group.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
If you are in the upper-midwest region, I suggest you attend a show and see (according
to the Klingons) the &lt;em&gt;original&lt;/em&gt; Christmas Carol story.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=4f56547c-f34f-43b6-a7a7-19cc221008ba" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;div style="border-top: 1px dotted;padding-top: 8px;padding-bottom: 5px;margin-top: 10px;margin-bottom: 0px;font-family: Verdana;font-weight: normal;line-height: 100%;text-align: left;"&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag Start --&gt;
&lt;script type="text/javascript" src="http://ads.aspalliance.com/displayad.aspx?t=3&amp;m=90&amp;guid=4"&gt;&lt;/script&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag End --&gt;
&lt;br clear="all"&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8Rx9jJ_5ggeQf0dyO95-1l4R1sE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8Rx9jJ_5ggeQf0dyO95-1l4R1sE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8Rx9jJ_5ggeQf0dyO95-1l4R1sE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8Rx9jJ_5ggeQf0dyO95-1l4R1sE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RockfordLhotka/~4/YDaWcgzjdfw" height="1" width="1"/&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,4f56547c-f34f-43b6-a7a7-19cc221008ba.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=2dbe2408-72df-40da-a0c8-81d1f5ceb2d9</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,2dbe2408-72df-40da-a0c8-81d1f5ceb2d9.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,2dbe2408-72df-40da-a0c8-81d1f5ceb2d9.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=2dbe2408-72df-40da-a0c8-81d1f5ceb2d9</wfw:commentRss>
      <title>CSLA .NET training &amp;ndash; Nov 2009</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,2dbe2408-72df-40da-a0c8-81d1f5ceb2d9.aspx</guid>
      <link>http://www.lhotka.net/weblog/CSLANETTrainingNdashNov2009.aspx</link>
      <pubDate>Tue, 20 Oct 2009 19:28:14 GMT</pubDate>
      <description>&lt;p&gt;
Dunn Training is offering their CSLA Master Class next month in Atlanta
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://www.dunntraining.com/training/cslamasterclass.htm" href="http://www.dunntraining.com/training/cslamasterclass.htm"&gt;http://www.dunntraining.com/training/cslamasterclass.htm&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
If you want to get up to speed fast with CSLA .NET this is the class for you. Instructor
Miguel Castro is a CSLA .NET expert and has contributed elements to the framework
itself, as well as being the author of the courseware used for the class.
&lt;/p&gt;
&lt;p&gt;
Sign up now!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=2dbe2408-72df-40da-a0c8-81d1f5ceb2d9" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;div style="border-top: 1px dotted;padding-top: 8px;padding-bottom: 5px;margin-top: 10px;margin-bottom: 0px;font-family: Verdana;font-weight: normal;line-height: 100%;text-align: left;"&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag Start --&gt;
&lt;script type="text/javascript" src="http://ads.aspalliance.com/displayad.aspx?t=3&amp;m=90&amp;guid=4"&gt;&lt;/script&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag End --&gt;
&lt;br clear="all"&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Lsqy9X4tgoxzd3FY6VQDvyvFUg4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Lsqy9X4tgoxzd3FY6VQDvyvFUg4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Lsqy9X4tgoxzd3FY6VQDvyvFUg4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Lsqy9X4tgoxzd3FY6VQDvyvFUg4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RockfordLhotka/~4/cRNbxJpLxO8" height="1" width="1"/&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,2dbe2408-72df-40da-a0c8-81d1f5ceb2d9.aspx</comments>
      <category>CSLA .NET</category>
    </item>
    <item>
      <trackback:ping>http://www.lhotka.net/weblog/Trackback.aspx?guid=8f9b93e7-620e-4077-a4d7-8ec49161078a</trackback:ping>
      <pingback:server>http://www.lhotka.net/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.lhotka.net/weblog/PermaLink,guid,8f9b93e7-620e-4077-a4d7-8ec49161078a.aspx</pingback:target>
      <dc:creator>Rockford Lhotka</dc:creator>
      <wfw:comment>http://www.lhotka.net/weblog/CommentView,guid,8f9b93e7-620e-4077-a4d7-8ec49161078a.aspx</wfw:comment>
      <wfw:commentRss>http://www.lhotka.net/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=8f9b93e7-620e-4077-a4d7-8ec49161078a</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <title>Visual Studio 2010 and .NET 4.0 Beta 2 &amp;ndash; and CSLA .NET</title>
      <guid isPermaLink="false">http://www.lhotka.net/weblog/PermaLink,guid,8f9b93e7-620e-4077-a4d7-8ec49161078a.aspx</guid>
      <link>http://www.lhotka.net/weblog/VisualStudio2010AndNET40Beta2NdashAndCSLANET.aspx</link>
      <pubDate>Mon, 19 Oct 2009 19:41:33 GMT</pubDate>
      <description>&lt;p&gt;
Microsoft has made &lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx"&gt;Visual
Studio 2010 and .NET 4.0 Beta 2&lt;/a&gt; available for download to MSDN subscribers, with
general availability soon. VS10 includes a lot of really nice features over VS2008,
and I’m personally very excited to see the Beta 2 release.
&lt;/p&gt;
&lt;p&gt;
I’ve made a pre-alpha CSLA .NET “4.0” available for download as well. This is really
just the version 3.8.0 code (somewhere between beta 1 and beta 2) that I’ve updated
to build under Visual Studio 2010 with .NET 4.0.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.lhotka.net/cslanet/download.aspx"&gt;Download for Windows&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.lhotka.net/cslalight/download.aspx"&gt;Download for Silverlight&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Over the next few months I’ll continue to release updates to version 4.0 that take
advantage of the .NET 4.0 features, but I wanted to make sure there was a version
online that builds with VS10 as soon as possible, so this is it – enjoy!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.lhotka.net/weblog/aggbug.ashx?id=8f9b93e7-620e-4077-a4d7-8ec49161078a" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;div style="border-top: 1px dotted;padding-top: 8px;padding-bottom: 5px;margin-top: 10px;margin-bottom: 0px;font-family: Verdana;font-weight: normal;line-height: 100%;text-align: left;"&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag Start --&gt;
&lt;script type="text/javascript" src="http://ads.aspalliance.com/displayad.aspx?t=3&amp;m=90&amp;guid=4"&gt;&lt;/script&gt;
&lt;!-- Text Ads - Product Spotlight Ad Tag End --&gt;
&lt;br clear="all"&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HV0tliOcEglk_kV0_wfpMyDKhPw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HV0tliOcEglk_kV0_wfpMyDKhPw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HV0tliOcEglk_kV0_wfpMyDKhPw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HV0tliOcEglk_kV0_wfpMyDKhPw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RockfordLhotka/~4/0nyyGelkySQ" height="1" width="1"/&gt;</description>
      <comments>http://www.lhotka.net/weblog/CommentView,guid,8f9b93e7-620e-4077-a4d7-8ec49161078a.aspx</comments>
      <category>CSLA .NET</category>
      <category>News</category>
    </item>
  </channel>
</rss>
