The
DataGridCollectionView class allows any collection that implements the
IEnumerable interface to be grouped, sorted, or filtered. Unlike the
BindingListCollectionView class, the
DataGridCollectionView class will
never touch the underlying data source, meaning that the original sorting and filtering present in the data source will not be modified. The underlying data source to which the
DataGridCollectionView is bound can be retrieved through the
SourceCollection property.
By default, a
DataGridItemProperty will be created for each property in the underlying data source and can be retrieved through the
ItemProperties property of the
DataGridCollectionView (you can consider these items to be the columns that will end up in a grid). Each item-property object represents the characteristics of a property for an item in the
DataGridCollectionView, including the
DataType,
Name,
PropertyDescriptor,
Title, and
ValuePath.
When you set the
GroupSortStatResultComparer property, the groups are ordered based on whether GroupSortStatResultPropertyName is also set; the passed IComparer will receive the stat result as values. If you do not pass any comparer, the default sort comparer for the returning type of the stat result will be used.
Multiple DataGridItemProperty sorting is also supported. For example, if property A and B have a GroupSortStatResultPropertyName that points to a sum, we are sorted by A then by B. When sum of A is equal, the sum of B will be used to determine the group order.
In order to avoid performance degradation, when modifying a cell value, only the group affected by that cell value modification is reordered, so there should not be any significant performance degradation when using this property.
The DataGridCollectionView
Contains method determines whether an item exists in the current view, while the
GetItemAt and
IndexOf methods can be used to retrieve an item at a specific index or retrieve its index, respectively. The number of items contained in a
DataGridCollectionView can be determined through the
Count property. In the case where no items are displayed in the view, the
Count property will return 0 and the
IsEmpty property will return
true.
Programmatically, when the
DataGridCollectionView is bound to a data source, the
ItemProperties.Clear method must be called prior to adding
DataGridItemProperty objects to the
ItemProperties collection to remove items that were automatically added when the
DataGridCollectionView was instantiated.
Unbound data can be "appended" to a data item through the use of unbound item properties, which are represented by the DataGridUnboundItemProperty class. Unlike unbound columns, which can be used to display non-data related information such as a label or controls that allow some sort of action to be carried out, unbound item properties can be used to provide additional data, such as calculated columns (see Example 1 in Unbound Data).
Grouping, Sorting, and Filtering
Data items contained in the view can be grouped using either the default
PropertyGroupDescription or the
DataGridGroupDescription (recommended) and adding them to the
GroupDescriptions property. The final, runtime groups can be retrieved through the
Groups property. Data items can also be sorted by adding the standard
SortDescription structures to the
SortDescriptions property. In addition to the default type-based sorting, custom sorting can also be applied by providing an
IComparer to the
SortComparer property of one or more item properties defined in the
DataGridCollectionView to which a grid is bound.
Detail Relations (Hierarchical Master/Detail)
If the data source to which a DataGridCollectionView is bound contains hierarchical detail relations, the content of those relations will be displayed as the details of data items in a grid or in another detail. Relations are represented by DataGridDetailDesciption objects and will automatically be created for:
Automatic creation of detail descriptions can be disabled by setting the AutoCreateDetailDescriptions property of the DataGridCollectionViewSource to false (by default, true) or by specifying so when creating an instance of the DataGridCollectionView.
In order for the details of a data item to be displayed (and created), the parent grid or detail's AutoCreateDetailConfigurations property must be set to true (by default, false at the grid level and true for detail configurations).
Hierarchical master/detail is only available when a grid is in a
table-view layout.
For more information on master/detail relations, refer to the DataGridDetailDescriptions Class and Detail Configuration topics.
Inserting and Editing Data Items
The DataGridCollectionView and DataGridCollectionViewSource classes expose events (see Table 1 in Inserting Data) that are triggered during key stages of inserting a new item into an underlying data source. These events provide full control over the insertion process and make it possible to insert items into a source that does not implement the IBindingList interface.
The DataGridCollectionView also exposes the EditItem, CommitEdit, and CancelEdit methods to allow items in the underlying data source to be edited directly.
For more information on inserting and editing data, refer to the Inserting Data and Editing Data topics.
DataGridCollectionViewSource Class
The DataGridCollectionViewSource class represents the XAML proxy of the DataGridCollectionView class. The DataGridCollectionViewSource class is not a view but rather the XAML representation of the DataGridCollectionView class.
Most properties and events exposed by the DataGridCollectionView class are also exposed by the DataGridCollectionViewSource class.
Most of the XAML examples demonstrated throughout this documentation make use of the DataGridCollectionViewSource class to provide data to a grid.
Data Virtualization
The DataGridVirtualizingCollectionView class and its XAML proxy, the DataGridVirtualizingCollectionViewSource class, provide support for data virtualization. Also known as "virtual mode" or "lazy loading", data virtualization provides smart deferred querying of data, support for asynchronous data fetching, preemptive loading, and query abort notifications to ensure a smooth and seamless experience that leaves applications responsive and prevents needless queries to data servers.
For more information on data virtualization, refer to the Data Virtualization topic.
Back to Row Class | Go to DetailDescription Class