首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程安全CollectionViewSource

线程安全CollectionViewSource
EN

Stack Overflow用户
提问于 2013-06-27 10:34:43
回答 1查看 855关注 0票数 1

我一直在使用杯标的BindableCollection来呈现Telerik RadGridView的数据,并且它是线程安全的,这意味着我可以从非UI线程更新集合。

现在我要做的是使用谓词过滤数据集。本质上的想法是使用CollectionViewSource,这样我的底层数据就不会改变,我可以通过在它上应用谓词来控制CollectionViewSource的视图。问题是CollectionViewSource不是线程安全的,如果源是从非UI线程更新的,则会抛出.

下面是XAML和视图模型。

XAML:

代码语言:javascript
复制
        <controls:RadGridView Grid.Column="2"
                          AutoGenerateColumns="False"
                          behaviours:RadGridViewExtensions.RowDoubleClick="OpenProgram"
                          CanUserDeleteRows="False"
                          CanUserInsertRows="False"
                          DataContext="{Binding ContractHeadersCollectionView}"
                          IsReadOnly="True"
                          ItemsSource="{Binding}"
                          RowIndicatorVisibility="Collapsed"
                          SelectedItem="{Binding SelectedContractHeader}"
                          SelectionMode="Single"/>

视图模型:

代码语言:javascript
复制
    /// <summary>
    /// Initialises a new instance of the <see cref="PortfolioViewModel"/> class.
    /// </summary>
    public PortfolioViewModel()
    {
        this.ContractHeaders = new BindableCollection<ContractHeaderViewModel>();
        this.ContractHeadersCollectionView = new CollectionViewSource() { Source = ContractHeaders };
    }

    public CollectionViewSource ContractHeadersCollectionView { get; private set; }

问题如下:

  1. Calibun.Micro提供了线程安全的CollectionViewSource等效吗?
  2. 如果不是,如果我不希望将更新BindableCollection的调用封送到UI线程,那么选项是什么?

谢谢你的想法或建议。

EN

回答 1

Stack Overflow用户

发布于 2013-07-03 10:35:20

您需要封送对UI线程的调用。Caliburn.Micro在Caliburn.Micro中提供了Execute.OnUiThread,用于编组对UI线程的调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17340848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档