|
Wpf. Модификация ObservableCollection не обновляет View
|
|||
---|---|---|---|
#18+
Привет! Пишу проект, большой, использую 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". И потому обновление грида визуально не будет происходить. Но отладчик говорит о том, что гетттер не вызывается! Как может влиять на ход программы невызываемый код мне непонятно. Возможно он вызывается, но как-то хитро, так что я не вижу Просветите кто в курсе, по тупому костылить не хочется. Наверняка есть хороший метод решения проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2013, 14:24 |
|
Wpf. Модификация ObservableCollection не обновляет View
|
|||
---|---|---|---|
#18+
monstrilla, чудес не бывает... первым делом нужно искать баг в своем коде... Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2013, 17:06 |
|
Wpf. Модификация ObservableCollection не обновляет View
|
|||
---|---|---|---|
#18+
авторпервым делом нужно искать баг в своем коде... ну как бы я и не утверждал, что мой баг нужно искать в чужом коде :) за ответ спасибо, соль как раз в том месте. распишу подробнее, может кому пригодится. как выяснилось, дело в том, что у меня используется 2 экземпляра ObservableCollection. при инициализации биндинга идет вызов геттера. по условию ретурнится экземпляр ObservableCollection _totalStorage. В этот момент WPF запоминает, что свойству GridItems соответствует коллекция _totalStorage. Т.е. в качестве ItemSource для грида выступает _totalStorage. И когда в методе RefreshGridSource я провожу манипуляции с _gridItems, то гриду вообще параллельно на эти манипуляции, потому что его айтем сорс ассоциирован с другой коллекцией. вот :) будьте бдительны... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2013, 09:20 |
|
|
start [/forum/topic.php?fid=21&msg=38376146&tid=1441320]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
155ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 262ms |
0 / 0 |