![]() |
Модераторы: gambit, Kefir, Partizan |
![]() ![]() ![]() |
|
Чердак |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 8.12.2004 Репутация: нет Всего: нет |
Доброе вермя суток.
Возникла такая проблема. У меня есть ListView, для которого создаю Template, в котором ListView-шка и кнопка. В коде я добавляю новый Items в ListView (для которого создан Template). Затем нужно в коде, по нажатию кнопки в выделенном Item-е, узнать какой Item (в Template) выделен. Как мне можно это узнать? Как работать с Template? Для ввода данных в Template использую Binding. А вот как например обратится к элементу (в моем случае - узнать SelectedItem в Template) я не знаю. --------------------
|
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
В обработчике щелчка по кнопке можно получить Item следующим образом:
|
|||
|
||||
Чердак |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 8.12.2004 Репутация: нет Всего: нет |
Спкасибо, а можно объяснить это. Что-то не допонимаю. Как мне узнать SelectedIndex?
--------------------
|
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
Чердак, а Вы внимательно посмотрите на методы объекта ItemContainerGenerator. Для получения SelectedIndex подойдет метод IndexFromContainer.
|
|||
|
||||
Чердак |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 8.12.2004 Репутация: нет Всего: нет |
У меня есть ListView (name ="lvRegionsIn"), в Template которого есть много чего, из которого мне нужно узнать номер выделенного итема (SelectedItem) в ListView (name ="lvBorders").
--------------------
|
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
||||
|
||||
Чердак |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 8.12.2004 Репутация: нет Всего: нет |
Для ListView я создаю Tempalate:
в котором есть lvRegBorders, так же есть кнопка, на клик которой, необходимо узнать какой SelectedIndex в lvRegBorders был выбран. --------------------
|
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
ListView вижу, lvRegBorders вижу. А что за кнопка? Где она расположена?
|
|||
|
||||
Чердак |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 8.12.2004 Репутация: нет Всего: нет |
в DataTemplate, Просто весь коде не вставил - большой.
Добавлено через 1 минуту и 42 секунды а вот присваивание ItemTemplate к lvRegionsIn
--------------------
|
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
Я так понимаю, в DataTemplate ListView, а не lvRegBorders? |
|||
|
||||
Чердак |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 8.12.2004 Репутация: нет Всего: нет |
вот кнопка в темплейте:
Добавлено через 34 секунды нет! lvRegBorders в темплейте Добавлено через 3 минуты и 18 секунд Т.е. есть листвью (lvRegionIn) для итемов которого создан темплейт, а в этом темлейте есть еще одинн листвью ( с именем lvRegBorders), а так же кнопка (и еще много чего). Но проблема тошлько в том, что я не могу по нажатию кновки в коде определить какой итем в lvRegBorders выделен. --------------------
|
|||
|
||||
Idsa |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
Ну дык а я о чем?! Чердак, старайтесь впредь сразу нормально формулировать задачу. Итак, имея ссылку на кнопку (параметр sender обработчика), нужно получить ссылку на lvRegBorders, находящийся в одном DataTemplate с кнопкой. Насчет ItemContainerGenerator я соврал (вернее, перепутал с подходом, применяемым в Xceed DataGridControl): для получения Сontainer'а (который для ListView имеет тип ListBoxItem) необходимо воспользоваться методом ListView.ContainerFromElement. А вот дальше - самое интересное. Просто заюзать FindName для ListBoxItem не получится. Вот описание workaround'а: http://joshsmithonwpf.wordpress.com/2007/0...contentcontrol/ Не могу сказать, что мне нравится этот подход... но по крайней мере он работает. Правда, его придется немного модифицировать: ContentPresenter находится за Border'ом. Вот реализация упрощенного примера:
|
||||
|
|||||
Чердак |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 8.12.2004 Репутация: нет Всего: нет |
У меня возникает вот здесь ошибка:
Ошибка: Error 4 Cannot convert type 'System.Windows.DependencyObject' to 'VSoft.GEO.Mejevanie.Border' D:\WORK\6.04.09\VSoft.GEO\VSoft.GEO.Mejevanie\WindowMain.xaml.cs 308 33 VSoft.GEO.Mejevanie Дело в том что lvRegBorders - это у меня не просто список, а GridVeiw а Border:
--------------------
|
||||
|
|||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
Чердак, Ваша задача - добраться до ContentPresenter. Посмотрите в debug'е при помощи Mole (хотя, конечно, можно и методом тыка...), где находится ContentPresenter относительно listViewItem - и действуйте.
|
|||
|
||||
Чердак |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 8.12.2004 Репутация: нет Всего: нет |
Idsa, наверно что-то не понял.
Как это сделать? --------------------
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |