我一直在使用杯标的BindableCollection来呈现Telerik RadGridView的数据,并且它是线程安全的,这意味着我可以从非UI线程更新集合。
现在我要做的是使用谓词过滤数据集。本质上的想法是使用CollectionViewSource,这样我的底层数据就不会改变,我可以通过在它上应用谓词来控制CollectionViewSource的视图。问题是CollectionViewSource不是线程安全的,如果源是从非UI线程更新的,则会抛出.
下面是XAML和视图模型。
XAML:
<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"/>视图模型:
/// <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; }问题如下:
谢谢你的想法或建议。
发布于 2013-07-03 10:35:20
您需要封送对UI线程的调用。Caliburn.Micro在Caliburn.Micro中提供了Execute.OnUiThread,用于编组对UI线程的调用。
https://stackoverflow.com/questions/17340848
复制相似问题