Well it took me two days of playing with code and about 4 attempts, but I finally have what I wanted: An active filtering, active sorting, searchable BindingListView<T>. It serves as a data bindable view for a BindingList<T>, in the same way that a DataView provides a bindable view of a DataTable.
The BindingList<T> does provide a nice easy way to quickly databind a list of business objects to a UI, but it is lacking in certain areas. While you can just inherit from BindingList<T> to add simple sorting, etc, this then involves altering the internal list of data. While this is fine in simple cases it is not practical when you need multiple views of the same data and want to sort by multiple columns for example.
The really neat stuff is where adding/editing an item still maintains the current filter and sort.
It can sort by multiple columns (ascending or descending).
It can filter via implementations of the IItemFilter<T> interface, for example using a simple Predicate<T> delegate. But I may write a expression parser (for that SQL WHERE clause style filter) or even one that can compile C# or VB.NET on the fly to create the item filter logic.
Basically I'm totally chuffed! :D
I am planing to write an article detailling the code soon (once my hands recover from 2 days of coding!), so watch this space…