Rockford Lhotka
    CTO at Magenic
    Author, speaker, software architect
    Creator of the CSLA .NET framework

About me
Contact me


Version 3.8.0 change log


This document is the change log for version 3.8.0 of CSLA .NET for Windows.


For a more complete list of changes, go to, select “all issues” and filter the status to “closed” and/or “checked in”.


Click here for a list of known issues with this version.


Release 3.8.0-091105:


LINQ to CSLA (091105)

Check for null property value before trying to index that value.


ProjectTrackerWithObjectFactory (091105)

Thanks to Jonny Bekkum there’s a new ProjectTracker sample that uses the ObjectFactory data access model, and has a generally more consistent coding model overall. This is perhaps more of a how-to reference app than an example showing all the various features available in CSLA .NET.


ViewModelBase (091105)

The OnModelChanged() parameters are now strongly typed.


Test project warnings (091104)

Eliminated warnings in the unit/integration test projects.


XML comments (091104)

All CSLA .NET framework code should now be commented.


Validation (091103)

ValidationComplete event is now raised immediately upon completion of all sync rules if there are no async rules. Otherwise it is still raised when all async rules complete as was the case prior to this change.


Pre-Release 3.8.0-091030:


InvokeMethod (091030)

Hooking PropertyChanged on the target object (DataContext or whatever) AND hooking the trigger event off the UI control turns out to be essentially impossible. The implementation we've had couldn't handle the case where the DataContext changed during the lifetime of the form, and trying to address that issue would have caused a memory leak.


In the end, it is almost certainly better if the UI control bind its IsEnabled (or whatever) property explicitly to control the visuals anyway, as that's more explicit and flexible.


Unfortunately this is a breaking change, because ManualEnableControl is now gone, and InvokeMethod now always operates as though that property were set to false.


CslaModelBinder (091027)

Added a basic ASP.NET MVC model binder to the Csla.Web.Mvc namespace. This is necessary for objects that use data annotations validation attributes, because the default model binder honors both validation attributes and IDataErrorInfo as separate concerns, but CSLA reflects broken attributes through IDEI – resulting in validation errors appearing twice in the UI. The CslaModelBinder does the right thing, so validation errors only appear once, and so multiple validation issues with a single property are shown to the user.


ViewModelBase (091026)

Add protected method OnModelChanged() so a subclass can hook events from the model as needed.


ViewModelBase (091026)

Fix issue where the Model property being changed didn’t trigger proper notification to the UI.


InvokeMethod (091026)

Fix issue where the Target property wasn’t always properly overriding the DataContext value.


Pre-Release 3.8.0-091025:


BusyAnimation (091025)

Fixed issue with memory leak when using BusyAnimation (and therefore PropertyStatus).


BusinessBase (091016)

Fixed issue where busy changed wasn’t being raised properly in some cases.


Samples (091022)

Updated for 3.8: ProjectTrackercs, ProjectTrackervb, AsyncDataPortalWinTest, AsyncDataPortalWpfTest, WpfDesignTimeSupportDemo, MVVMexperimentWpf


Samples\ProjectTracker (091022)

Added an ASP.NET MVC UI project running on top of the business library. This project is not yet complete, but does display and edit basic Project data and so shows the basics of using ASP.NET MVC over a CSLA .NET business layer.


Samples\ProjectTracker (091022)

Removed “legacy” projects from solution. They are still in the download, just not in the solution. This includes the asmx web service and client along with the Remoting, Enterprise Services and asmx data portal hosts.


Snippets (091022)

Fix issue with SmartDate snippet.


InvokeMethod and Execute (091022)

InvokeMethod and Execute now support exactly two method signatures for target methods. A target method may have 0 or 2 parameters. If the method has 2 parameters, the method must follow this signature:


public void Method(object sender, ExecuteEventArgs e)


This is a breaking change for InvokeMethod from previous 3.8 releases, because the 1 and 3 parameter options have been eliminated. This is an enhancement for Execute because the 0 parameter option has been added.


ViewModelBase (091022)

Added OnError() method and ErrorOccurred event to ViewModelBase. OnError() is invoked when a non-null value is set in the Error property, and OnError() raises the ErrorOccurred event. This simplifies code in the UI or viewmodel subclass when an error needs to be handled.


InvokeMethod (091020)

When InvokeMethod calls a two parameter target method, the parameters are now (object, ExecuteEventArgs) to match how Execute works with target methods.


ViewModel (091020)

Remove overloads of public methods, leaving only the sender/args versions that work with both Execute and InvokeMethod.


ViewModelBase (091020)

Add sync versions of refresh, save and addnew operations for WPF. The async refresh and save behaviors are available in both WPF and Silverlight. The async methods now start with “Begin” instead of “Do”, which is incompatible with Beta 1.


Interactivity assembly (091019)

System.Windows.Interactivity assembly is now referenced from a Dependencies folder in the CSLA .NET folder structure. This has the advantage that you don’t need to install the Expression Blend 3 SDK to build CSLA .NET. This has the disadvantage that you lose all localization and integrated help for the assembly. If you need localization or integrated help you’ll need to install the Blend SDK and change the assembly reference to pull the DLL from the SDK install location.


svn repository structure (091018)

CSLA .NET 3.8.x is now located in



The /core/trunk folder is now the working folder for version 4.0.0.


Resources (091017)

Changed the scope of the resources to be public so they can be accessed by other assemblies.


ViewModel (090917)

Substantial changes to ViewModelBase to bring it in line with the functionality provided by CslaDataProvider. At this point the ViewModelBase and ViewModel properties and methods should offer the same features as the Silverlight CslaDataProvider control.


Pre-Release 3.8.0-091003:


Validation (090930)

Add support for the data annotation attributes from System.ComponentModel.DataAnnotations. When validation annotation attributes are applied to business object properties, they are now incorporated into the CSLA .NET validation subsystem as business rules, and are executed as priority 0 rules automatically.


Wpf\PropertyStatus (090930)

Bring the behavior of PropertyStatus up to date with Silverlight. This means the Property property is now bindable, and the Target property is renamed to TargetControl. This is a breaking change.


Pre-Release 3.8.0-090929:


MobileFormatter (090929)

Add instance level cache of Type objects during deserialization as a performance optimization.


ViewModel (090929)

Added new ViewModelBase and ViewModel classes to Csla.Wpf that can be used to easily create typed ViewModel objects for CSLA .NET Model objects.


Execute trigger action (090929)

Added an Execute trigger action that can be used to invoke methods on the DataContext when an event occurs on the associated control. This uses the new System.Windows.Interactivity functionality that comes with Expression Blend 3.


For example:


      <TextBox Name="NewIdTextBox" Width="150" Margin="5"/>

      <Button Content="Refresh"

              Tag="{Binding ElementName=NewIdTextBox, Path=Text}">


          <i:EventTrigger EventName="Click">

            <csla:Execute MethodName="Load" />





Field Manager/PropertyInfo<T> (090928)

Add Type parameter to Create() methods so a PropertyInfo factory has access to the business object type that declares the property.


Pre-Release 3.8.0-090913:


Field Manager/PropertyInfo<T> (090911)

Add Csla.Core.IPropertyInfoFactory, which can be implemented to provide a new factory object to create PropertyInfo<T> instances.


Specify that your type should be used as a factory with the CslaPropertyInfoFactory config setting (provide assembly qualified type name) or by setting the Csla.Core.FieldManager.PropertyInfoFactory.Factory property to an instance of your factory object.


This is necessary to support the scenario where you implement a custom FieldData<T> subclass, and then a custom PropertyInfo<T> subclass, and you want to use the lambda expression overloads of RegisterProperty(). In that case, the RegisterProperty() implementation creates the instance of PropertyInfo<T> on your behalf, and this new factory scheme allows you to have it create your own subclass of PropertyInfo<T>.


FieldData (090910)

Mark the MarkClean() method as virtual so a subclass can more easily manage the dirty status.


CslaDataProvider (090826)

Fix bug where OnQueryFinished() overrides weren’t called correctly.


Pre-Release 3.8.0-090814:


MobileFormatter (090811)

Enable the use of binary XML serialization. This is now the default option. On the SL side, set the MobileFormatter.UseBinaryXml property to switch back to text XML. On the .NET side use the CslaUseBinaryXml setting in appSettings to use text XML.


PropertyStatus (090731)

Removed the Source property. The control now binds to the DataContext, whether set explicitly on the control, or on a containing control just like any other control. This is a breaking change.


InvokeMethod (090731)

Fixed a bug in MethodParameter that was blocking binding of arbitrary types, now this works:


      <ListBox ItemsSource="{Binding Path=Model}"

               ItemTemplate="{StaticResource DataList}"





       "{Binding SelectedItem, RelativeSource={RelativeSource Self}}"

               csla:InvokeMethod.ManualEnableControl="True" />


InvokeMethod (090731)

Fix a bug with ManualEnableControl and do a bunch of general code cleanup.


InvokeMethod (090730)

InvokeMethod can now pass the sender and EventArgs references through to the target method. The following method signatures are now valid:


void TargetMethod()

void TargetMethod(object paramValue)

void TargetMethod(object sender, object paramValue)

void TargetMethod(object sender, EventArgs e, object paramValue)


Combined with a change so the trigger event can now be nearly any event, this change makes it possible to route events from a ListBox or other control to a handler so the handler (such as a ViewModel) can react to the user changing a selection or double-clicking or something.


InvokeMethod (090730)

If there is no Can___ property for a method, the default is now to enable the UI control, making it easier to use InvokeMethod with arbitrary target objects. This could be a breaking change.


InvokeMethod (090730)

Added InvokeMethod to Csla.Wpf to provide better support for MVVM scenarios. While WPF commanding is nice, it isn’t as flexible or easy to use as InvokeMethod.


FilteredBindingList/SortedBindingList (090728)

Fixed some synchronization bugs with these types, especially around adding new items to the bottom of a datagrid and then pressing ESC.


LINQ to CSLA (090723)

Resolution to certain generic mapping issues in the method mapper caused SelectMany to break... resolved so that SelectMany method mapping is handled similar to GroupJoin, which has same sort of issues with mapping a generic Expression to a similar generic Func.


LogicalExecutionLocation (090721)

Store LogicalExecutionLocation in LocalContext so it is safe on the server and in multi-threaded client scenarios.


Also change the data portal so LogicalExecutionLocation works with nested calls. To do this I changed SetContext and ClearContext to be instance methods so they can work with an _oldLocation field to handle the nesting.


Reflection\MethodCaller (090721)

Fix an issue where MethodCaller (and therefore the child data portal) was not properly handling array parameters. It should now be possible to pass arrays of values through the child data portal into the Child_XYZ methods.



(Updated 11/5/2009 8:36:37 PM)