QML-тип ColumnView
Создаёт экземпляры делегата в столбце по мере необходимости. Подробнее…
| Строка импорта: | import Sailfish.Silica 1.0 | 
| Наследуется от: | Item | 
Свойства
- cacheBuffer : int
 - count : int
 - delegate : Component
 - itemHeight : real
 - maximumVisibleHeight : real
 - model : var
 
Подробное описание
ColumnView реализует представление в виде объекта
Column, которое создает экземпляры делегата только
по мере необходимости.
Данный тип функционально эквивалентен элементу QtQuick
Repeater, который используется внутри
Column для создания экземпляров делегата
в соответствии с моделью. Однако ColumnView создаёт только отображаемые в данный момент
экземпляры делегата. Внешний вид и поведение ColumnView такие же, как у комбинации
Column/Repeater,
однако делегаты создаются только в момент отображения. Поэтому он наиболее подходит для списков, выходящих за пределы
одного экрана.
Данный тип полезно использовать при компоновке вида с прокруткой, состоящего из нескольких контейнеров типа Column, и при этом:
- нет необходимости прокручивать каждый контейнер в родительском элементе;
 - нет необходимости для рендеринга, так как каждый контейнер может содержать большое количество контента, или делегаты имеют сложную структуру,
 
Описанные выше сценарии встречаются сравнительно редко, поэтому вместо ColumnView
предпочтительнее использовать тип SilicaListView или комбинацию
Column/Repeater.
Ниже приведён пример, который демонстрирует преимущество использования ColumnView перед
SilicaListView. Внутри SilicaFlickable находятся два дочерних
представления ColumnView, модель каждого из которых будет содержать по 100 элементов после
нажатия кнопки Button. ColumnView будет создавать и отображать только те
экземпляры делегатов, которые в настоящее время видны на экране (или находятся
в cacheBuffer), что значительно повысит производительность:
import QtQuick 2.2
import Sailfish.Silica 1.0
ApplicationWindow {
    initialPage: Component {
        Page {
            SilicaFlickable {
                anchors.fill: parent
                contentHeight: mainColumn.height
                Column {
                    id: mainColumn
                    width: parent.width
                    PageHeader {}
                    Button {
                        text: "Показать результаты поиска"
                        anchors.horizontalCenter: parent.horizontalCenter
                        onClicked: {
                            console.log("Генерация содержимого...")
                            firstColumn.model = 100
                            secondColumn.model = 100
                            console.log("Done!")
                        }
                    }
                    SectionHeader { text: "Результаты поиска" }
                    ColumnView {
                        id: firstColumn
                        width: parent.width
                        itemHeight: Theme.itemSizeSmall
                        delegate: BackgroundItem {
                            width: parent.width
                            Label {
                                text: "Поиск результата " + model.index
                                anchors.centerIn: parent
                            }
                        }
                    }
                    SectionHeader { text: "Вам также может понравиться..."}
                    ColumnView {
                        id: secondColumn
                        width: parent.width
                        itemHeight: Theme.itemSizeSmall
                        delegate: BackgroundItem {
                            width: parent.width
                            Label {
                                text: "Предложение " + model.index
                                anchors.centerIn: parent
                            }
                        }
                    }
                }
            }
        }
    }
}
Для корректной работы ColumnView следует свойству itemHeight присвоить значение
высоты созданного экземпляра делегата.
Если для отображения содержимого вместо ColumnView использовать комбинацию
Column/Repeater,
то его отрисовка займет значительно больше времени, поскольку это потребует создания и отрисовки всех, а не только
необходимых экземпляров делегатов. Ситуация при использовании SilicaListView аналогичная. Чтобы обеспечить
возможность прокручивать родительский объект полностью (от начала первого представления до конца второго представления),
необходимо свойству height представления списка присвоить значение contentHeight. Но это приведёт к тому, что все
экземпляры делегатов представления будут создаваться сразу.
При наличии только одного представления в виде столбца, а не двух (как в примере), возможно вместо ColumnView
использование SilicaListView. В этом случае объекты типа PageHeader
и Button следует переместить в заголовок списка.
Описание свойств
cacheBuffer : int
Максимальное количество пикселей, которые будут кэшироваться за пределами видимой области в предварительно сгенерированных элементах делегата.
См. также cacheBuffer.
[read-only] count : int
Содержит значение, равное количеству элементов в модели ColumnView.
delegate : Component
Предоставляет шаблон для каждого элемента, созданного ColumnView.
itemHeight : real
По умолчанию высота элементов, которые будут созданы ColumnView. Значение данного свойства
необходимо для вычисления высоты содержимого столбца.
maximumVisibleHeight : real
Максимальная высота элемента списка, отображаемого в определенный момент времени, которая по умолчанию соответствует высоте экрана Screen.height.
model : var
Предоставляет список элементов, которые будут созданы ColumnView.