powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF: CollectionViewSource.GetDefaultView() в другом потоке
9 сообщений из 9, страница 1 из 1
WPF: CollectionViewSource.GetDefaultView() в другом потоке
    #39629005
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто оставлю здесь (крик души)

CollectionViewSource.GetDefaultView() для одной и той же коллекции возвращает другой экземпляр View, если вызывать не в потоке пользовательского интерфейса. Блин, нафига такие грабли?...

...
Рейтинг: 0 / 0
WPF: CollectionViewSource.GetDefaultView() в другом потоке
    #39629101
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProПросто оставлю здесь (крик души)

CollectionViewSource.GetDefaultView() для одной и той же коллекции возвращает другой экземпляр View, если вызывать не в потоке пользовательского интерфейса. Блин, нафига такие грабли?...


я уже не 1 раз об этом писали.
Получайте представление через Dispatcher.Invoke, диспатчер всегда выполняется в основном потоке :)
а в целом, я обычно просто создаю свое представление и не использую DefaultView. Так как 1 коллекция может отображаться более чем 1 контроле, а если использовать 1 представление, то текущий элемент и много чего еще будет синхронизироваться между элементами управления
проще просто
var view = new ListCollectionView(source); и все довольны.
разница только в том, что ListCollectionView принимает IList, а не IEnumerable
...
Рейтинг: 0 / 0
WPF: CollectionViewSource.GetDefaultView() в другом потоке
    #39629108
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
решил для себя вместо CollectionViewSource использовать просто еще дополнительный список объектов с linq-фильтром после того, как
CollectionViewSource каким-то образом начинает генерить те же самые объекты, только с дригим хэшкодом, после чего UI отваливается.
...
Рейтинг: 0 / 0
WPF: CollectionViewSource.GetDefaultView() в другом потоке
    #39629115
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesПолучайте представление через Dispatcher.Invoke, диспатчер всегда выполняется в основном потоке :)Ну когда разобрался, то методы решения понятны )
Roman Mejtesvar view = new ListCollectionView(source); и все довольны.в смысле, ты его создаешь в VM и потом биндишься к нему из ItemsSource?
...
Рейтинг: 0 / 0
WPF: CollectionViewSource.GetDefaultView() в другом потоке
    #39629132
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

совершенно верно в ItemsControl при биндинге идет проверка, если переданная коллекция уже является ICollectionView, то он использует именно её, если коллекция не наследует этот интерфейс вызывается CollectionViewSource.GetDefaultView() и используется представление по умолчанию.
Принципов MVVM это не нарушает
...
Рейтинг: 0 / 0
WPF: CollectionViewSource.GetDefaultView() в другом потоке
    #39629135
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок, хороший вариант, воспользуюсь, спасибо )
...
Рейтинг: 0 / 0
WPF: CollectionViewSource.GetDefaultView() в другом потоке
    #39629144
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProОк, хороший вариант, воспользуюсь, спасибо )Тут, правда, другой бок вылез - ListCollectionView нетипизированный, так что для доступа к самой коллекции из VM приходится либо приводить явно, либо сохранять в локальном поле. Но все равно так удобнее.
...
Рейтинг: 0 / 0
WPF: CollectionViewSource.GetDefaultView() в другом потоке
    #39629148
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А началось-то все с того, что мне понадобилось присвоить
Код: c#
1.
ListCollectionView.CustomSort=Comparer<...>.Default;

Вопрос, какого фига просто нельзя представление сортировать с помощью дефолтного компаратора - тогда достаточно было бы просто в разметке указать один флаг и спокойно реализовывать IComparable для элементов коллекции.
Хотя, может я просто не смог разобраться, как это включить.
...
Рейтинг: 0 / 0
WPF: CollectionViewSource.GetDefaultView() в другом потоке
    #39632758
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProRoman Mejtesvar view = new ListCollectionView(source); и все довольны.в смысле, ты его создаешь в VM и потом биндишься к нему из ItemsSource?Забыл отписаться тогда - этот вариант тоже не прокатил. Если ListCollectionView создается не в UI-потоке, то потом UI-поток его пользовать не может.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF: CollectionViewSource.GetDefaultView() в другом потоке
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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