BinaryTreeListView is a WPF custom control that merges the conventional Tree and List style views into one merged view for displaying hierarchical data in both data-bound and unbound modes.
1. Databinding support
BinaryTreeListview control can be bound to any datasource - including XML, data from your LINQ queries, Array, ObservableCollection
2. Supports grouping and sorting of items
You can setup the view (typically the CollectionView / CollevtionViewSource) of any given top level node (that has children) to be able to sort and group at the level of each node's children sibling nodes.
3. Supports data bound and unbound modes
The control supports both data bound and unbound modes. You can simply use WPF (& Silverlight) Binding to point to any IEnumerable data source, OR be also able to add tree-list items to the control, programatically or in XAML.
4. Treeview column can be placed in any column of your choice
You can setup columns, and then choose any column to act as the tree-list column - i.e. the column that will expand/collapse its children. Additionally, the tree-list column can be positioned in any column index position, not necessarily the first column.
5. The control comes with several custom controls
The control comes with pre-written custom controls, including BinaryCheckbox, Imagebox, and colorpicker controls, that can be used as the control column's cell template.
Out-of-the-box custom controls:
1. Our Custom Control: Color picker
2. Our Custom Control: BinaryCheckbox
You can customise the BinaryCheckbox control on several of its UI rendering aspects, including corner radius, check mark glyph, border and the background fill brushes.
3. BinaryCheckBox rendering options
The custom WPF & Silverlight CheckBox controls that comes with the control, supports two types of checked state drawing, viz., a Tick mark and a Cross mark, that you can choose from to render its IsChecked state to true.
The checkbox also supports a new question mark drawing for its un-set / x:Null state of its IsChecked state. These status drawing artefacts can also be customized in regard to their color brushes.
6. Extensive customization of the Tree-list "Item Selection" state
The control supports extensive customization of the tree-list view's Item selected state's background rendering.
7. Customization of Node image & Node connecting lines
The control supports customizations of node image. The node expansion colors and the connecting line color as well can be customized extensively.
Node connecting lines can be optionally switched off or alternatively drawn, as you deem fit for your application.
8. Full keyboard support
The control comes with full keyboard support. As an example of some good visual cues the control supports, you can see in the screen shot below that when the user expands a collapsed node, the control draws a visual cue with a dotted border around the expanded node and the last sibling in its child nodes.
9. FocusvisualStyle customization
FocusVisualStyle for the item in the treelistview can be either configured for its properties like stroke color, stroke style and stroke thickness.
Alternatively you can also provide your own control template for the FocusVisualStyle for the item in the control by setting a DependencyProperty in the control.
The following screen shots demonstrate the capability of this feature.
You can see that the control has been configured with customized attributes for the FocusVisualStyle - one image showing a red color stroke dash (dot) style, and the other showing a Blue color thicker dash style.
10. Easy skinning support
The control can be easily skinned.
The control comes with a skinning algorithm using which you can supply a single color, and the control will auto-magically produce appropriate shades of colors to apply on various of its UI elements.
11. No procedural code needed to setup the control
In contrast to the very powerful features in the control, you will find it extremely easy to setup and run the control in your applications with absolutely no procedural code.
Either using Designer tools like MS Expression Blend, or even with hand-cranked few lines XAML, you will be able to setup the control easily.