Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
АТерентьев
23 / 22 / 16
Регистрация: 16.10.2009
Сообщений: 953
1

Как подписаться на событие CollectionView.CollectionChanged?

03.02.2013, 15:28. Просмотров 1399. Ответов 5
Метки нет (Все метки)

Уважаемые Гуру!
Требуется при изменении CollectionView (в результате фильтрации или добавления/удаления элементов) показывать количество записей. Хотел подписаться на событие CollectionChanged, но оно Protected, подписаться не удается due its protected level. Как решается такая задача?
Спасибо.

Добавлено через 29 минут
C#
1
2
3
4
5
6
7
8
using System.Collections.Specialized;
 
((INotifyCollectionChanged)_dataView).CollectionChanged += new NotifyCollectionChangedEventHandler(приИзмененииКоллекции);
 
public void приИзмененииКоллекции(Object sender, NotifyCollectionChangedEventArgs e)
{
   MessageBox.Show("Элементов в коллекции - " + dataView.Count);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2013, 15:28
Ответы с готовыми решениями:

Как подписаться на событие
Доброго времени суток, cтоит задача при нажатии на кнопку формы с генерировать...

Как из collectionView получить IQuerable из CollectionView?
Доброго времени суток! В DataGrid на форме: ItemsSource = "{Binding...

Как подписаться на событие нажатие кнопки мыши. Не важно по какому контролу, простой щелчек
В общем хочу перехватить событие простого нажатие кнопки мыши. Что нибудь...

Подписаться на событие другого класса
class Table { ... this.ButtonChangedEvent += new...

linq & CollectionView
Есть такие свойства: obsCollection = new...

5
Noob.net
Темная сторона .Net
581 / 478 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
03.02.2013, 17:07 2
АТерентьев, Подпишемся на событие в конструкторе ViewModel
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
_customers.CollectionChanged += Cust_CollectionChanged;
//реализуем 
 private void Cust_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            switch (e.Action)
            {
                case NotifyCollectionChangedAction.Add:
                    // e.NewItems contains the new items, 
                    break;
                case NotifyCollectionChangedAction.Remove:
                    break;
                case NotifyCollectionChangedAction.Replace:
                    // e.NewItems contains the new items, 
                    // e.OldItems contains the removed items
                    break;
                case NotifyCollectionChangedAction.Reset:
                    // the collection has been cleared
                    break;
            }
        }

INotifyCollectionChanged должен быть реализован,зачем приводит к этому типу?
0
АТерентьев
23 / 22 / 16
Регистрация: 16.10.2009
Сообщений: 953
03.02.2013, 22:41  [ТС] 3
А какой тип у _customers?
Потому как для свойства типа CollectionView событие не подписывается.
Рекомендация взята из аналогичного вопроса.
0
Noob.net
Темная сторона .Net
581 / 478 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
04.02.2013, 00:28 4
АТерентьев, ой простите) ObservableCollection<Customer>
а у вас CollectionView,понятно). Еще не понял как решить вашу проблему,перейти на ObCol не вариант?
1
АТерентьев
23 / 22 / 16
Регистрация: 16.10.2009
Сообщений: 953
04.02.2013, 09:14  [ТС] 5
Перейти на всю коллекцию - не подойдет, т.к. нужно работать с содержимым уже отфильтрованного списка. Приведенный код - устраивает. Спасибо.
0
Noob.net
Темная сторона .Net
581 / 478 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
04.02.2013, 12:13 6
АТерентьев, Вот нашел еще одно решение. Кушает вроде как. (using System.ComponentModel
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        private ICollectionView source;
        public ICollectionView Source
        {
            get
            {
                if (source == null)
                {
                    source = CollectionViewSource.GetDefaultView(Names);//коллекция
                    source.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(source_CollectionChanged);//событие
                }
                return source;
            }
        }
void source_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
   if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
   {
          //то же самое что и в примере выше
   }
}
0
04.02.2013, 12:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2013, 12:13

Никак не разберусь с CollectionView
Здравствуйте! Требуется фильтровать ListView, нашла, что это делается с...

Можно ли как-то подписаться на системные события "Source Control"?
Добрый день. Есть AddIn модуль, можно в нем как то подписаться на события,...

Подписаться на изменения свойства чужого класса
Привет, для своих классов слышал есть INotifyPropertyChanged, а как быть если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru