Главная » Silverlight » Комментарий к строке

0

Элемент DataGrid поддерживает вывод отдельной области комментариев, появляю­щейся под строкой. Область комментариев растянута на всю длину решетки и не разби­та на столбцы. Ее можно сконфигурировать таким образом, чтобы она выводилась толь­ко для выбранной строки, что позволяет убрать ее, когда она не нужна пользователю.

На рис. 17.11 показана область комментариев, содержащая описание продукта и выводимая только при выделении строки.

Рис. 17.11. Область комментариев

Для создания этого примера нужно сконфигурировать область вывода комментариев, установив свойство DataGrid.RowDetailsTemplate. Затем с помощью свойства DataGrid. RowDetailsTemplate определите содержимое, выводимое в области комментариев. В дан­ном примере используется базовый шаблон, содержащий текстовый блок в рамке.

<data:DataGrid.RowDetailsTemplate> <DataTemplate> <Border Margin="10" Padding="10" BorderBrush="SteelBlue" BorderThickness="3" CornerRadius="5"> <TextBlock Text="{Binding Description}" TextWrapping="Wrap" FontSize="10"> </TextBlock> </Border> </DataTemplate>

</data:DataGrid.RowDetailsTemplate>

В область комментариев можно добавить элементы управления, позволяющие вы­полнять разные операции, например получать информацию о продукте, добавлять про­дукт в корзинку, редактировать параметры продукта и т.д.

Примечание. При установке размеров области вывода комментариев элемент DataGrid не учитывает внешние пустые полоски корневого элемента. В результате, если установить свойство Margin корневого элемента, часть содержимого будет отсечена снизу и справа. Чтобы устранить эту проблему, добавьте дополнительный контейнер, как в данном примере, в котором корневой элемент не содержит внешних пустых полосок. Вместо него их содержит элемент Border.

Сконфигурировать поведение области комментариев можно, установив свойство DataGrid.RowDetailsVisibilityMode. По умолчанию оно равно VisibleWhenSelected, при этом область комментариев выводится, когда выделена строка. Значение Visible приво­дит к выводу всех областей комментариев. При значении Collapsed ни одна область ком­ментариев не отображается, пока не будет изменено свойство RowDetailsVisibilityMode в коде (например, при выделении пользователем строк определенного типа).

Замораживание столбцов

Замороженный столбец всегда остается в левой части решетки DataGrid, даже при прокручивании решетки вправо. На рис. 17.12 показано, что во время прокрутки столбец Продукт остается видимым. Обратите внимание на то, что горизонтальная полоса про­крутки расположена только под прокручиваемыми столбцами, но не под замороженными.

Рис. 17.12. Замороженный столбец продукт

Замораживание столбцов — очень полезное средство для длинных решеток, особен­но если нужно сделать определенную информацию (например, название продукта или уникальный идентификатор) всегда видимой. Чтобы применить замораживание, при­свойте значение True свойству IsFrozen столбца.

<data:DataGridTextColumn Header="Product" Width="175" IsFrozen="True" Binding="{Binding ModelName}">

</data:DataGridTextColumn>

Замороженные столбцы должны находиться в левой части решетки. Например, если необходимо заморозить два столбца, это должны быть два первых левых столбца.

Выделение

Как и обычные списочные элементы управления, элемент DataGrid позволяет выде­лять отдельные строки. В момент выделения и при отмене выделения генерируется со­бытие SelectionChanged. Выяснить, какой объект данных выделен, можно с помощью свойства Selectedltem. Чтобы пользователь мог выделить одновременно несколько строк, свойство SelectionMode должно иметь значение Extended. При установленном по умолчанию значении Single выделяется только одна строка. Выделение многих строк выполняется с помощью клавиш <Shift> или <Ctrl>. Свойство Selectedltems содержит коллекцию выделенных строк.

Совет. Выделять строки можно программно с помощью свойства Selectedltem. Если выделенная строка не присутствует на экране, то логично будет так же программно прокрутить видимую область с помощью метода DataGrid. Scrolllntoview (). При его вызове решетка прокручивается вверх или вниз таким образом, что выделенный элемент становится видимым.

Сортировка строк

В элемент DataGrid встроены средства сортировки строк. Для этого он должен быть связан с коллекцией, реализующей интерфейс IList (например, List<T> или ObservableCollection<T>).

Чтобы применить сортировку, пользователь должен щелкнуть на заголовке столб­ца. При одном щелчке выполняется сортировка по возрастанию на основе типа дан­ных (например, числа сортируются по величине, текст — по алфавиту и т.д.). При по­вторном щелчке выполняется сортировка по убыванию. Отсортированный столбец отмечен стрелкой, расположенной в правой части заголовка столбца. Если стрелка направлена вниз, значит, решетка отсортирована по возрастанию значений столбца, а вверх — по убыванию. При щелчке на заголовке направление стрелки изменяется на противоположное.

С помощью клавиши <Shift> пользователь может отсортировать решетку на основе значений нескольких столбцов. Например, если нажать клавишу <Shift> и щелкнуть на заголовках Категория и Цена, продукты будут отсортированы в группы по категориям в алфавитном порядке, а в каждой группе — по значениям цены.

Существует несколько способов управления процессом сортировки.

•       SortMemberPath. Каждая колонка предоставляет свойство SortMemberPath, по­зволяющее задать в связанном объекте данных свойство, по значениям которого будет выполняться сортировка. Если свойство SortMemberPath не установлено, столбец сортируется на основе связанных данных. Однако при использовании класса DataGridTemplateColumn необходимо установить это свойство, потому что в нем нет свойства Binding, предоставляющего связанные данные. Если в данном случае не установить свойство SortMemberPath, столбец не будет поддер­живать сортировку.

•       PagedCollectionView. Этот класс служит оболочкой для обычной коллекции, предоставляя возможность сортировать, фильтровать, группировать и разбивать содержимое на страницы. Его применение вы увидите далее.

•       Пользовательский шаблон. Если вам не нравятся стрелки, обозначающие по­рядок сортировки, или вы хотите добавить анимированное обозначение, приме­ните свойство DataDrid.ColumnHeaderStyle для задания нового шаблона. Свой­ство ColumnHeaderStyle поддерживает три ключевых состояния: UnsortedState (сортировки нет), SortedAscendingState (столбец отсортирован по возрастанию)

и SortedDescendingState (столбец отсортирован по убыванию). Указанные со­стояния применяются для изменения внешнего вида заголовка.

Чтобы отключить сортировку, присвойте свойству CanUserSortColumns значение False. Отключить сортировку на основе заданных столбцов можно с помощью их свойств CanUserSort.

Источник: Мак-Дональд, Мэтью. Silverlight 3 с примерами на С# для профессионалов. : Пер. с англ. —- М. : ООО «И.Д. Вильяме», 2010. — 656 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии