| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > WPF и Silverlight > Binding |
| Автор: albert21 13.12.2008, 19:43 | ||
| Всем привет. Недавно начал изучать WPF. Разбираю вопрос привязки данных к элементам управления. Задача типовая: Есть список с объектами пользовательского класса (у меня класс содержит две строки - имя, фамилию). Необходимо подвязать этот список к элементу управления ListBox. Вот примеры реализации http://msdn.microsoft.com/ru-ru/library/aa970558.aspx, http://msdn.microsoft.com/ru-ru/magazine/cc163299.aspx В них приведены различные варианты решения. В одном используется <ObjectDataProvider/> и класс который возвращает список элементов, в другом создаётся класс-наследник от ObservableCollection<класс элемента списка>. Рассмотрев их я так и не пришёл к чёткому пониманию того как подвязывать данные Ключевая строчка: <ListBox ItemsSource="{Binding Source={???} Path={???}}"/> 1) Что можно и нужно указывать для свойств Source и Path? 2) Каким условиям должны удовлетворять значения этих свойств? Например:
Можно ли подвязаться к list? |
| Автор: Partizan 13.12.2008, 20:52 |
| albert21, list лучше превратить в DependencyProperty. Source="имя_объекта_класса_window1" Path="имя_свойства_представляющего =_list" |
| Автор: rooks 13.12.2008, 21:56 | ||||
Привязку данных можно делать и в code behind.
|
| Автор: Partizan 14.12.2008, 00:55 |
| rooks, это не дело... |
| Автор: albert21 14.12.2008, 17:30 |
| Ок. 1) в Source записывается имя public класса-владельца объекта-источника данных 2) в Path записывается имя public свойства представляющего объекта-источника данных Могу ли я получить значение индекса текущего элемента в источнике данных (в примере источником служит список list)? Что -то вроде "{Binding Source={StaticResource MyFriends}, Path=LIST[current_item].SURNAME}" |
| Автор: rooks 14.12.2008, 17:54 | ||
| 2Partizan просто я не знаю как сделать по-другому, было бы не плохо посмотреть на пример... 2albert21 если нужно, чтобы в списке отображались фамилии можно: 1. Переопределить в "класс элемента списка" метод ToString(), но это не очень красиво. 2. Написать DataTemplate для элементов листбокса, например так:
|
| Автор: Partizan 14.12.2008, 18:47 |
| rooks, я ж говорю - превратить его в DependencyProperty |
| Автор: albert21 14.12.2008, 19:21 |
| С DataTemplate я тоже видел пример, там ещё в разметке XAML для ListBox указывается свойство IsSynchronizedWithCurrentItem="True". А механизма прямого обращения к текущему элементу нет? Напиши пожалуйста подробнее о DependencyProperty применительно к теме? |
| Автор: Partizan 14.12.2008, 20:00 | ||
| albert21, в данном случае вполне можно обойтись public свойством в приватным setter-ом. Что касается DependencyProperty, то вот например так:
|