Introduction

Implementing parent-child hierarchies (for example, a Sale object and the SaleDetails associated with it) is one of the most common scenarios encountered when modeling the entities in a business domain. If you implement the business objects using classes, a collection of child objects will typically be stored in a List<T>. However, List<T>, will prove anemic should you require a rich user interface built on top of the .NET framework's support for data binding.

The typical solution will be to wrap the List<T> in a BindingSource in order to take advantage of its design time support for data binding. That road will only take you so far as a critical feature will be absent - support for sorting.

This article will seek to remedy that by providing a custom implementation of a BindingList<T> that will automatically provide the methods required to provide sorting capability on every property defined in type T.

Implementation Objectives

Support sorting on all properties by instantiating an instance of the custom implementation of the BindingList<T>. E.g., write:

In a Nutshell

If, for instance, you create a MySortableBindingList<Sale> and sort on the Customer property, an expression that conceptually looks something like Enumerable.OrderBy<Sale>(originalList, a => a.Customer) will be created and used to do the sorting.