Главная » WPF » Элемент управления ListView

0

Класс ListView, являясь производным от ListBox, добавляет к нему возможность отделить свойства представления (например, информацию о колонках при выводе в виде таблицы) от управляющих свойств (например, информации о том, какой эле# мент списка выбран). Так, мы можем вывести список в виде, показанном на рис. 3.18. Для этого понадобится определить  объекты, в которых будут храниться данные:

class Person

{

string _name;

bool _canCode;

public Person(string name, bool canCode)

{

Name = name; CanCode = canCode;

}

public string Name

{

get { return _name; }

set { _name = value; }

}

public bool CanCode

{

get { return _canCode; }

set { _canCode = value; }

}

}

В классе ListView нет свойств, позволяющих задать число колонок, заголовки и прочие  аспекты  представления. Чтобы  их определить,  мы должны  присвоить свойству ListView.View в качестве значения  объект типа GridView  и уже для него установить  все необходимые свойства. Для получения выводимых данных объек# ту GridView необходима привязка (подробнее эта тема рассматривается в главе 6).

Рис 3.18. Отображение данных в элементе управления ListView с помощью встроенного объекта GridView

<ListView>

<ListView.View>

<GridView>

<GridView.Columns>

<GridViewColumn Width=’300’ Header=’Name’

DisplayMemberBinding=’{Binding Path=Name}’ />

<GridViewColumn Width=’100’ Header=’CanCode’

DisplayMemberBinding=’{Binding Path=CanCode}’ />

</GridView.Columns>

</GridView>

</ListView.View>

</ListView>

Такое разделение  свойств на управляющие и относящиеся к отображению  де#

лает ListView самым развитым  из списковых  элементов.

Чтобы создать новое представление для элемента  ListView  (нечто, способное заменить GridView), необходимо унаследовать  обманчиво простому классу ViewBase. Суть требуемых действий проста: нужно переопределить метод PrepareItem и настроить  свойства:

public class MyView : ViewBase {

private double angle;

public double Angle {

get { return angle; }

set { angle = value; }

}

protected override void PrepareItem(ListViewItem item) { item.LayoutTransform = new RotateTransform(angle); base.PrepareItem(item);

}

}

Но это лишь начало. По#настоящему  полезным  объект представления стано# вится за счет сочетания с системой стилизации. Переопределив свойство ItemContainerDefaultStyleKey, мы дадим этому объекту возможность задать все аспекты отображения, что и доказывает  пример GridView.

Рис. 3.19. Отображение иерархии списков в элементе TreeView

Все списковые  элементы, с которыми  мы встречались до сих пор, были пред# назначены для отображения плоских списков. Однако часто бывает нужно предс# тавить иерархически организованные данные.

Элемент управления TreeView

Элемент TreeView  добавляет  возможность отображать  иерархии, подобные приведенной на рис. 3.19. Можно  считать, что дерево – это просто список, каж# дый элемент  которого в свою очередь является списком. Именно  так и работает

TreeView. Пожалуй,  это самый лучший пример композиции; каждый объект TreeViewItem сам является элементом  управления. Чтобы создать такое дерево, как на рис. 3.19, мы можем определить  следующую иерархию:

<TreeView>

<TreeViewItem Header=’Coders’>

<TreeViewItem Header=’Don’ />

<TreeViewItem Header=’Dharma’ />

</TreeViewItem>

<TreeViewItem Header=’Noncoders’>

<TreeViewItem Header=’Chris’ />

</TreeViewItem>

</TreeView>

Как и другие списковые  элементы, TreeView может получать данные либо пу# тем  добавления   в  свойство   Items   (как   в  примере   выше),  либо  из  свойства ItemsSource. О способе передачи иерархических данных элементу TreeView мож# но сказать немало интересного, но мы отложим этот разговор до главы 6.

Источник: К. Андерсон  Основы  Windows Presentation Foundation. Пер. с англ. А. Слинкина — М.: ДМК Пресс, 2008 — 432 с.: ил.

По теме:

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