Introduction
A footer row with the column totals frozen at the bottom is a fairly common item on grids. You can probably get one by using a DataGrid
,
but there’s a good deal of complexity associated with DataGrid
s you might want to avoid.
Using the Code
I made a Custom Control ListViewF
based on the standard ListView
. You need to supply the
ListViewF
with a FooterObj
which
should be the same type of object you are displaying in the regular rows. You can specify a
FooterStyle
. Both FooterObj
and FooterStyle
can be instantiated in
the XAML.
You will need to call the ListViewF.InitFooter
function after the columns have loaded. The function creates a
CellTemplateSelector
for each GridViewColumn
.
If the column is using DisplayMemberBinding
it creates two CellTemplate
s – one for the regular
cells and one for the footer. The regular cell template is just
a TextBlock
with the Text
bound to whatever the DisplayMemberBinding
was. The footer is the same but wrapped in a
Border
. The original DisplayMemberBinding
is cleared so the DataTemplateSelector
can be used.
If the column is using a CellTemplate
it creates a footer template by adding a
ContentPresenter
with the original template as the ContentTemplate
and then
wrapping the ContentPresenter
in a Border
.
I don’t handle cases where the column already has a CellTemplateSelector
. It shouldn’t be too hard to create a new selector that calls the original
CellTemplateSelector
and then either returns the original template or wraps it in a Border
.
Points of Interest
You need to use a custom GridView
that overrides the DefaultStyleKey
. If you add columns using a normal
GridView
the Control
goes back to using the regular
ListView
template.