Списочные элементы управления
133WPF --- Привязка, команды и стили WPF --- Списочные элементы управления
»» В ДАННОЙ СТАТЬЕ ИСПОЛЬЗУЕТСЯ ИСХОДНЫЙ КОД ДЛЯ ПРИМЕРОВ
Форматирование строки и конвертеры значений — это все, что нужно для применения гибкого форматирования к индивидуальным привязанным значениям. Но привязанным спискам требуется нечто большее. К счастью, WPF предлагает несколько решений форматирования. Большинство из них встроено в базовый класс ItemsControl, от которого наследуются все списочные элементы управления, так что именно отсюда следует начать исследование форматирования списков.
Как известно, класс ItemsControl определяет базовую функциональность для элементов управления, которые содержат в себе список элементов. Этими элементами могут быть вхождения в списке, узлы дерева, команды меню, кнопки в панели инструментов и т.п. На рисунке ниже показана общая диаграмма классов ItemsControl в WPF:
Вы заметите, что некоторые оболочки элементов списков появляются в иерархии классов, унаследованных от ItemsControl. Например, здесь будут не только ожидаемые классы Menu и TreeView, но также MenuItem и TreeViewItem. Причина в том, что эти классы обладают способностью содержать собственные коллекции подэлементов — именно это обеспечивает деревьям и меню их вложенную иерархическую структуру. С другой стороны, вы не найдете здесь ComboBoxItem и ListBoxItem, поскольку они не содержат коллекций вложенных элементов, и потому не наследуются от ItemsControl.
В ItemsControl определены свойства, которые поддерживают привязку данных, и два ключевых средства форматирования: стили и шаблоны данных. В таблице ниже содержится краткий обзор свойств ItemsControl. (Свойства перечисляются от самых базовых до наиболее сложных.)
Следующий элемент иерархии наследования ItemsControl — класс Selector, который добавляет простой набор свойств для определения (и установки) выбранного элемента. Не все классы ItemsControl поддерживают выбор. Например, выбор не имеет никакого значения для ToolBar или Menu, потому эти классы наследуются от ItemsControl, а не от Selector.
Наименование | Описание |
---|---|
ItemsSource | Привязанный источник данных (коллекция DataView, которую необходимо отобразить в списке). |
DisplayMemberPath | Свойство, которое должно отображаться для каждого элемента данных. Для более сложного представления или комбинирования свойств используйте вместо него ItemsTemplate. |
ItemsStringFormat | Строка формата .NET, которая, будучи установленной, используется для форматирования текста каждого элемента. Обычно этот прием используется для преобразования числовых значений или значений дат в подходящее видимое представление — точно так же, как это делает свойство Binding.StringFormat. |
ItemContainerStyle | Стиль, позволяющий устанавливать свойства контейнера, который включает в себя каждый элемент. Контейнер зависит от типа списка (например, это ListBoxItem для класса ListBox и ComboBoxItem — для класса ComboBox). Объекты-оболочки создаются автоматически при наполнении списка. |
ItemContainerStyleSelector | StyleSelector, использующий код для выбора стиля оболочки каждого элемента в списке. Это позволяет назначать разным элементам списка различные стили. Специальный класс StyleSelector должен быть создан самостоятельно. |
AlternationCount | Число чередующихся наборов для данных. Например, при значении AlternationCount, равном 2, варьируется 2 стиля строк, при AlternationCount, равном 3, существует три чередующихся стиля строк и т.д. |
ItemTemplate | Шаблон, извлекающий соответствующие данные из привязанного объекта и организующий их в соответствующую комбинацию элементов управления. |
ItemTemplateSelector | DataTemplateSelector, использующий код для выбора шаблона каждого элемента в списке. Это позволяет назначать разным элементам различные шаблоны. Специальный класс DataTemplateSelector должен быть создан самостоятельно. |
ItemsPanel | Определяет панель, созданную для хранения всех элементов списка. Все оболочки элементов добавляются в этот контейнер. Обычно для вертикальной ориентации списка (сверху вниз) применяется VirtualizingStackPanel. |
GroupStyle | Если используется группирование, это стиль, определяющий, как должна быть сформатирована каждая группа. При использовании группирования оболочки элементов (ListBoxItem, ComboBoxItem и т.п.) добавляются к оболочкам GroupItem, представляющим каждую группу, и эти группы затем добавляются в список. |
GroupStyleSelector | StyleSelector, использующий код для выбора стиля каждой группы. Это позволяет назначать разным группам различные стили. Специальный класс StyleSelector должен быть создан самостоятельно. |
К свойствам, которые добавляет класс Selector, относятся SelectedItem (выбранный объект данных), SelectedIndex (позиция выбранного элемента) и SelectedValue (свойство "значения" выбранного объекта данных, которое указывается установкой SelectedValuePath). Обратите внимание, что класс Selector не поддерживает множественный выбор — это добавляется к ListBox посредством свойств SelectionMode и SelectionItems (что по существу и все, что класс ListBox добавляет к этой модели).