To provide initial sorting and grouping in an XML view, proceed as follows:
<mvc:View
controllerName="sap.ui.sample.App"
xmlns="sap.m"
xmlns:l="sap.ui.layout"
xmlns:mvc="sap.ui.core.mvc">
<List items="{ path: '/companies',
sorter: { path: 'county', descending: false, group: '.getCounty'},
groupHeaderFactory: '.getGroupHeader'}">
<items>
<StandardListItem
title="{name}"
description="{city}"
/>
</items>
</List>
</mvc:View>The this context of a group header factory function is generally set
to the control (or managed object) that owns the binding. However, in XML views, the
reference to the group header factory is done in the view controller by putting a
dot (.) in front of the name of the group header factory function
({ groupHeaderFactory:'.myGroupHeader' }). In this case, the
group header factory's this context is bound to the controller.
The list uses a sorter which sorts the list of companies in ascending order by the
county column. It also groups its rows using the
App.controller's getCounty method to provide the captions and the
getGroupHeader function to provide non-standard group header
controls, as shown here:
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel",
"sap/m/GroupHeaderListItem "
], function (Controller, JSONModel, GroupHeaderListItem) {
"use strict";
return Controller.extend("sap.ui.sample.App", {
onInit : function () {
…
},
getCounty: function(oContext) {
return oContext.getProperty('county');
},
getGroupHeader: function(oGroup) {
return new GroupHeaderListItem({
title : oGroup.key
}
);
},
});As you can see, getCounty generates the key for a division into
groups as well as a group caption, which in this case is the county of the current
companies. getGroupHeader serves as a group header factory
function. After sorting and grouping, the company list looks like this:

The following XML snippet provides initial filtering:
<mvc:View
controllerName="sap.ui.sample.App"
xmlns="sap.m"
xmlns:l="sap.ui.layout"
xmlns:mvc="sap.ui.core.mvc">
<List items="{ path: '/companies',
filters: [{path: 'city', operator: 'StartsWith', value1: 'B'},
{path: 'revenue', operator: 'LT', value1: 150000000}]}">
<items>
<StandardListItem
title="{name}"
description="{city}"
/>
</items>
</List>
</mvc:View>The example shown here will only display companies whose city name begins with a 'b' and whose revenue is less than 150 million. As you can see, you can provide more than one filter, each of which may refer to different columns using different filter operators. For a complete list of permitted filter operators, see sap.ui.model.FilterOperator in the API Reference part of the Demo Kit.
As shown below, initial sorting, grouping and filtering can of course also be provided using JavaScript.
You can define a sorter and/or filters:
sap.ui.define([
"sap/ui/model/Sorter",
"sap/ui/model/Filter"
], function(Sorter, Filter) {
//returns group header captions
var fnGetCounty = function(oContext) {
return oContext.getProperty('county');
}
var oSorter = new Sorter({
path: 'county',
descending: false,
group: fnGetCounty});
var oFilterCity = new Filter("city",
sap.ui.model.FilterOperator.StartsWith, "B"),
oFilterRevenue = new sap.ui.model.Filter("revenue",
sap.ui.model.FilterOperator.LT, 150000000);
);
});
You can pass sorters and filters to the list binding:
var oList = new sap.m.List({
items: {path: "/companies", template: oItemTemplate,
sorter: oSorter, filters:[oFilterCity, oFilterRevenue]
}
});You can also use the other list binding possibilities (for example
bindAggregation or bindItems) and provide the
sorter and filters as parameters.
You can sort or filter data manually after the list binding is complete by getting the corresponding binding and calling the sort/filter function:
// manual sorting
oList.getBinding("items").sort(oSorter);
// manual filtering
oList.getBinding("items").filter([oFilterCity, oFilterRevenue]);
getBinding requires the name of the bound list. In this example,
we are looking at the items of the sap.m.List
control.
For more information about the various sorting and filter methods and operators, see the documentation for Filter, Sorter, and Filter operations under sap.ui.model in the API Reference part of the Demo Kit.
Complex syntax can be used to add filters and sorters for list binding. One or multiple objects can be defined.
<table:Table rows="{
path: '/table',
filters: [{
path: 'field3',
operator: 'EQ',
value1: 'test'
}],
sorter: [{
path: 'field1',
descending: false
}, {
path: 'field2',
descending: true
}]
}">
...
</table:Table>