![]() |
|
Модераторы: gambit, Kefir, Partizan |
![]()
|
|
| mparsin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 26.9.2008 Репутация: нет Всего: нет |
Приветствую всех.
Мой первый пост на этом форуме - если что, не пинайте. Вроде бы тривиальная задача, однако не могу сообразить как её решить "in WPF way" Вкратце: Представьте себе обычную корзину заказа. Пользователь выбирает продукты из каталога, их количество и добавляет их в корзину. Есть класс, где все продукты накапливаются в коллекцию определенную как ObservableCollection<IProduct>. Задача - показать корзину в ListBox используя DataBinding. Место на котором я споткнулся - группировка. То есть я хочу, чтоб в листбоксе было Имя продукта Количество Цена Иными словами листбокс должен отображать только Group Headers без индивидуальных items. Напрашивается использование CollectionView - так как то, что я хочу показать не что иное, как View от моей коллекции продуктов. Проблема - как показать количество и Цену. Заранее спасибо за идеи и предложения Максим. |
|||
|
||||
| rooks |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 28.9.2008 Где: Минск Репутация: 5 Всего: 9 |
Вообще нужно больше инфы давать(код IProduct, например), иначе все приходится додумывать самому. Многим это делать лень, вот никто и не отвечает)
Я тут забабахал небольшой примерчик, но без использования CollectionView. Основная фишка тут в том что, ItemsSource листбокса привязывается к твоей коллекции, а отображение мастерится через DataTemplate. Window1.xaml:
Window1.xaml.cs:
Это сообщение отредактировал(а) rooks - 15.11.2008, 02:14 |
||||
|
|||||
| mparsin |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 26.9.2008 Репутация: нет Всего: нет |
Привет,
Спасибо за ответ и подсказку - почему коллективный разум безмолвствует. В забабаханном выше примерчике есть маленькая проблемка. Количество не является свойством продукта
Количество планировалось хранить в коллекции. То есть если ProductA дважды добавлен в коллекцию Order, определенную как
Но. Показывать пользователю наш Order в виде ProductA - 2.25 ProductA - 2.25 ProductB - 3.20 ProductB - 3.20 ProductB - 3.20 тоже не интеллигентно. Напрашивается группировка. Группировки можно добиться минимум двумя способами. 1. Сгруппировать данные на уровне модели. То есть добавить к классу Order метод GetGroupedByProduct() и потом забиндать к тому, что вернется из этого метода. Недостатки этого метода очевидны.
Если нужно будет сгруппировать по другим признакам (например Price Range) то надо будет менять класс и так далее. 2. CollectionView, по описанию, выглядит идеальным решением. Это надстройка (View) над коллекцией. Нам нужно будет другое представление этой коллекции - мы создадим другой View. Проблему, которую я не знаю как решить я описал в моем предыдущем посте. Вот, что я могу сделать
То есть мы реализуем binding не к коллекции самой а к группам в этой коллекции. Но для того, что мне нужно я должен показать Количество Items in group а это не является свойством группы. И второе я должен показать цену, которая так же не является свойством группы, а является свойством элемента группы. Я тут забабахал небольшой примерчик, но без использования CollectionView. Кстати, насколько я понимаю ItemsControl - ты не совсем прав. Ты не использовал CollectionView напрямую. Каждый раз когда мы bind'аем коллекцию или DataTable к ItemsControl - CollectionView создается за сценой. Там WPF хранит информацию о текущем выделенном элементе, например. Надеюсь сейчас я дал больше информации. Меня напрягает тривиальность задачи. Ведь, наверняка, проблему "пользовательской корзины" решили в WPF/Silverlight уже несколько тысяч программистов. |
||||||
|
|||||||
| rooks |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 28.9.2008 Где: Минск Репутация: 5 Всего: 9 |
Информации теперь более чем достаточно, а самое главное - понятно зачем нужно группировать. Собстенно посидев немного в дебаггере и поизучав внутренюю структуру CollectionViewSource, написал вторую версию минипримера:
|
||||
|
|||||
| mparsin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 26.9.2008 Репутация: нет Всего: нет |
Спасибо, всё правильно, молодец!
Не сообразил, что у CollectionViewGroup есть Items. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |