Главная » WPF » Управление текущим элементом

0

Самый  важный  аспект представления набора – это отслеживание текущего элемента в списке. При любой привязке к списку система по умолчанию  созда ет представление набора. Для того чтобы понять, как работает этот механизм, проще всего воспользоваться свойством  IsSynchronizedWithCurrentItem спис кового  элемента  управления. Оно  синхронизирует выбранный  в списке  эле мент с текущим элементом представления. Обычно мы привязываем набор к свойству, тип значения которого –набор (например, к свойству ItemsSource). Можно  привязать весь набор, индексированный элемент  набора или свойство текущего элемента. Мы уже видели привязку всего набора и индексированного элемента. А для того чтобы привязать свойство текущего элемента, достаточно указать его имя. Отсутствие квадратных  скобок означает, что привязывается текущий элемент.

public class AdvancedBinding : Window {

public AdvancedBinding() {

StackPanel sp = new StackPanel();

Person[] names = new Person[] {

new Person(new Name(«Chris», «Anderson»)), new Person(new Name(«Don», «Box»)),

new Person(new Name(«Chris», «Sells»)),

};

ListBox list = new ListBox(); list.IsSynchronizedWithCurrentItem = true; list.DisplayMemberPath = «Name»; list.ItemsSource = names;

TextBlock selected = new TextBlock();

selected.FontSize = 24; Binding text = new Binding(); text.Source = names;

text.Path = new PropertyPath(«Name»);

selected.SetBinding(TextBlock.TextProperty, text);

sp.Children.Add(list); sp.Children.Add(selected); Content = sp;

}

}

На рис. 6.17 показано  появляющееся окно; когда мы выбираем  в списковом поле некий элемент, текстовый  блок обновляется.

Рис. 6.17. Использование ListBox для демонстрации управления текущим элементом

В данном случае мы воспользовались представлением по умолчанию  для на бора имен. Обратиться к этому представлению из программы  позволяет  стати ческий метод GetDefaultView класса CollectionViewSource:

public class AdvancedBinding : Window {

public CollectionViews() {

StackPanel sp = new StackPanel();

WrapPanel commands = new WrapPanel(); Button prev = new Button(); prev.Content = «<»;

prev.Click +=

delegate {

ICollectionView view = CollectionViewSource.GetDefaultView(names);

view.MoveCurrentToPrevious();

};

commands.Children.Add(prev);

Button next = new Button(); next.Content = «>»; next.Click +=

delegate {

ICollectionView view = CollectionViewSource.GetDefaultView(names);

view.MoveCurrentToNext();

}; commands.Children.Add(next); sp.Children.Add(commands);

}

}

Управление текущим  элементом  – самая важная  функция представления на бора. Остальные связаны  с организацией виртуального представления данных. Оно дает некоторым элементам управления (например, сетке) возможность пре доставить ряд ожидаемых средств (к примеру, сортировку  путем щелчка по заго ловку столбца).

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

По теме:

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