Cells, CellValuePresenters and Cell Virtualization

Each DataRecord exposes a Cells collection that lazily creates a Cell for each Field in the FieldLayout. "Lazy creation" means that a Cell object is not created until it is requested in code or XAML.


Cells are not UIElements™, but rather lightweight objects that wrap the values in the data source for the associated field. They are represented in the UI by corresponding CellValuePresenter elements.

CellValuePresenter elements are virtualized so that they are created only to represent the cells that are currently in view (for more information, see Performance Optimizations Overview). However, in the following two cases, CellValuePresenters are created for cells that may not be in view:

  • CellValuePresenters are always created for cells whose corresponding Field’s FieldSettings' AllowCellVirtualization property is set to False, as in the following example which turns off cell virtualization for all fields.

  • When the FieldLayoutSettings's DataRecordSizingMode property is left to its default value of SizedToContentAndFixed, or set to SizedToContentAndIndividuallySizable (as in the following example XAML). In this case, the cell editor’s IsExtentBasedOnValue method is called to determine if the cell can be virtualized based on the orientation. For more information on cell editors, see Editing Cell Values.