powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Wpf. Модификация ObservableCollection не обновляет View
3 сообщений из 3, страница 1 из 1
Wpf. Модификация ObservableCollection не обновляет View
    #38375878
monstrilla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет! Пишу проект, большой, использую MVVM-паттерн. в целом есть DataGrid, забинденный на одно из свойств DataContext-a (ViewModel), есть несколько радиобаттонов по которым фильтруется контент грида (список айтемов). Свойство ViewModel-a имеет тип ObservableCollection. По сути кликаю на баттоны, меняю ObservableCollection - меняется содержимое грида.

Столкнулся с такой проблемой:

При определенных условиях, изменение ObservableCollection не влияет на изменение содержимого грида. Чтобы не вставлять тут куски кода, и не уточнять по 10 раз, сделал маленький проект эмулирующий проблему. Понимающему человеку это вместо тысячи слов, имхо.

Ссылка: http://www.megafileupload.com/en/fil...ction-zip.html

Чтоб понять в чем соль - потыкайте по кнопкам, потом в ViewModel в свойстве GridItems в геттере раскоментите кусок кода. Потыкайте еще раз по кнопкам - увидите разницу.

Тем, кто уже скачал и поглядел.
Я с одной стороны понимаю, что если кликнуть по кнопке "Filtered", то коллекция будет пустой и потому программа в геттере GridItems будет заходить в условие и формировать полную коллекцию, как будто бы нажали на "All". И потому обновление грида визуально не будет происходить. Но отладчик говорит о том, что гетттер не вызывается! Как может влиять на ход программы невызываемый код мне непонятно. Возможно он вызывается, но как-то хитро, так что я не вижу Просветите кто в курсе, по тупому костылить не хочется. Наверняка есть хороший метод решения проблемы.
...
Рейтинг: 0 / 0
Wpf. Модификация ObservableCollection не обновляет View
    #38376146
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
monstrilla,

чудес не бывает... первым делом нужно искать баг в своем коде...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        public ObservableCollection<GridItem> GridItems
        {
            get
            {
                if (_gridItems.Count == 0)
                {
                    //return _totalStorage; <-- вот он, баг
                    foreach (var item in _totalStorage) { // фикс бага навскидку ))
                        _gridItems.Add(item);
                    }
                }
                return _gridItems;
...
Рейтинг: 0 / 0
Wpf. Модификация ObservableCollection не обновляет View
    #38377129
monstrilla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторпервым делом нужно искать баг в своем коде...

ну как бы я и не утверждал, что мой баг нужно искать в чужом коде :)

за ответ спасибо, соль как раз в том месте.

распишу подробнее, может кому пригодится. как выяснилось, дело в том, что у меня используется 2 экземпляра ObservableCollection. при инициализации биндинга идет вызов геттера. по условию ретурнится экземпляр ObservableCollection _totalStorage. В этот момент WPF запоминает, что свойству GridItems соответствует коллекция _totalStorage. Т.е. в качестве ItemSource для грида выступает _totalStorage. И когда в методе RefreshGridSource я провожу манипуляции с _gridItems, то гриду вообще параллельно на эти манипуляции, потому что его айтем сорс ассоциирован с другой коллекцией. вот :)

будьте бдительны...
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Wpf. Модификация ObservableCollection не обновляет View
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]