Использование ListBox и DataBinding для отображения списков в Silverlight 2
Раньше мы использовали элемент управления DataGrid для отображения информации с сайта Digg.com. Это подходит нам в случае, если мы хотим отобразить содержимое в формате колонки. Для нашего приложения нам, скорее всего, понадобится немного изменить отображение таким образом, чтобы оно меньше было похоже на простую таблицу типа DataGrid, и больше на список (List). Хорошая новость заключается в том, что это несложно воплотить - и оно не требует изменений в коде приложения.
Мы начнем с замены нашего элемента управления DataGrid элементом <ListBox>. Мы сохраним название элемента ("StoriesList"):
При повторном запуске нашего приложения и поиске статей элемент ListBox отобразит следующее:
Вам наверняка интересно - почему каждый элемент является "DiggSample.DiggStory"? Причиной этого является то, что мы привязываем обекты DiggStory к ListBox (и стандартным поведением является вызов ToString() для каждого). Если мы хотим отобразить свойство "Title" объекта DiggStory, то мы можем установить свойство "DisplayMemberPath" в ListBox:
Совершив данное изменение, мы получим следующий Title отображенный в ListBox:
Если мы хотим показать более одного значения за один раз либо специализировать внешний вид каждого элемента, то мы можем перегрузить ItemTemplate элемента ListBox и предоставить специализированный DataTemplate. В пределах данного DataTemplate мы можем специализировать отображение каждого объекта DiggStory.
К примеру, мы можем отобразить оба значения Title и NumDiggs объекта DiggStory при помощи DataTemplate следующим образом.
Мы можем привязать любые общедоступные (public) свойства из нашего объекта DiggStory в пределах DataTemplate. Обратите внимание на то, как мы используем синтаксис {Binding Path=PropertyName} для выполнения этого при помощи элементов управления TextBlock.
Создав указанный выше DataTemplate, наш ListBox теперь будет отображать элементы следующим образом:
Давайте теперь изменим наш DataTemplate так, как это показано ниже. Данный DataTemplate использует два StackPanels - один для выстраивания элементов строк горизонтально, а другой - для выстраивания текстовых блоков вертикально:
Вышеуказанный DataTemplate заставляет ListBox отображать элементы на экране следующим образом:
Это выполняется тогда, когда мы определяем следующие правила Style в нашем файле App.xaml (обратите внимание как мы используем LinearGradientBrush для получения красивой желтой градиентной заливки фона в DiggPanel):
Стоит отметить одну важную особенность нашего ListBox - несмотря на то, что мы специализировали способ отображения элементов в нем, он все равно автоматически предоставляет поддержку семантики наведения и выделения элемента как при использовании клавиатуры, так и для мыши (клавиши наведения вверх/вниз, home/end и т.д.):
ListBox тоже поддерживает полноценное изменение размера, а также автоматическую прокрутку нашего содержимого при необходимости (обратите внимание, как горизонтальная полоса прокрутки в окне уменьшается):
Следующие шаги
На данном этапе мы изменили способ визуализации содержимого в стиль списка (List).
Давайте теперь завершим пострение функциональности поведения нашего приложения и реализуем процесс мастер/деталь (master/details), который позволит пользователям проникнуть глубже в детали статьи при ее выборе в списке.
В этой статье обсуждаются 12 вопросов, касающихся связывания, размещения, использования сервисов WCF, и как подключаться к базе данных при помощи Silverlight.
WPF и Silverlight,
Реализация шаблонов мастер страниц в Silverlight Есть несколько статей о том, как реализовать шаблон мастер страницы в Silverlight. Вопрос в том, действительно ли нам нужна возможность создавать шаблон мастер страницы в Silverlight. Если есть преимущества использования функции шаблона мастер страницы в ASP.NET, то нет причины, из-за которой Silverlight не мог бы использовать это преимущество...
WPF и Silverlight,
Элемент управления TreeView в Silverlight Элемент управления TreeView идеально подходит для отображения данных иерархической структуры. Несмотря на то, что вы можете выполнить многое при помощи данного элемента управления, в своей простейшей форме он достаточно легок в использовании, как только вы разберетесь в основной рекурсивности, требуемой им....