【问题标题】:Adding item to ObsercableCollection with ICollectionView for filtering WPF使用 ICollectionView 将项目添加到 ObsercableCollection 以过滤 WPF
【发布时间】:2018-08-08 22:03:57
【问题描述】:

我有一个 MainViewModel 和一个 CategoryViewModel

MainViewmodel 有集合:

 public ObservableCollection<Category> Categories { get; set; }

在 CategoryViewModel 中,我有 ICollectionView 用于过滤:

    public ICollectionView CategoriesView { get; set; }

CategoriesView = CollectionViewSource.GetDefaultView(_mainViewModel.Categories );
                CategoriesView .Filter = new Predicate<object>(o => Filter(o as Category));

问题是,如果我不使用 CategoriesView,我可以修改(添加、编辑、删除)我的 Categories ObservableCollection,但是当我实现 CategoriesView 进行过滤时,在尝试向可观察集合:

这种类型的 CollectionView 不支持从不同于 Dispatcher 线程的线程更改其 SourceCollection

我已经试过This type of CollectionView does not support changes to its SourceCollection from a thread different from the Dispatcher thread

App.Current.Dispatcher.Invoke((Action)delegate
            {
                _mainViewModel.Categories.Add(newCategory);
            });

还有:

BindingOperations.EnableCollectionSynchronization(_matchObsCollection , _lock);

我已经进入 Debug --> Windows --> Threads 该方法确实在主线程中

【问题讨论】:

    标签: c# wpf observablecollection


    【解决方案1】:

    好像

    CategoriesView = CollectionViewSource.GetDefaultView(_mainViewModel.Categories );
                CategoriesView .Filter = new Predicate<object>(o => Filter(o as Category));
    

    在非 ui 线程上运行。尝试通过 Dispatcher.Invoke 运行它以确保它在 main-ui 线程上运行:

    App.Current.Dispatcher.Invoke((Action)delegate
            {
                CategoriesView = CollectionViewSource.GetDefaultView(_mainViewModel.Categories );
                CategoriesView .Filter = new Predicate<object>(o => Filter(o as Category));
            });
    

    我在另一篇文章中发现了一个类似的案例,您可以参考它:https://social.msdn.microsoft.com/Forums/vstudio/en-US/ba22092e-ddb5-4cf9-95e3-8ecd61b0468d/listview-not-updating-white-copying-files-in-different-thread?forum=wpf

    【讨论】:

    • 就是这样!我的错误,我没有在主线程中声明它......谢谢!
    猜你喜欢
    • 2011-01-09
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多