C# 如何将BlockingCollection绑定到WPF Listivew

C# 如何将BlockingCollection绑定到WPF Listivew,c#,wpf,multithreading,data-binding,blockingcollection,C#,Wpf,Multithreading,Data Binding,Blockingcollection,我在ViewModel中定义了一个BlockingCollection,它由不同的线程更新。我正在使用此BlockingCollection填充ListView。但是此集合中新添加的项没有反映在UI上。我需要一个BlockingCollection,因为我正在进行一个多线程操作,该集合可能由不同的线程更新,我希望确保线程安全,因此决定使用BlockingCollection 我的ViewModel是: public BlockingCollection<WorklistItem> L

我在ViewModel中定义了一个BlockingCollection,它由不同的线程更新。我正在使用此BlockingCollection填充ListView。但是此集合中新添加的项没有反映在UI上。我需要一个BlockingCollection,因为我正在进行一个多线程操作,该集合可能由不同的线程更新,我希望确保线程安全,因此决定使用BlockingCollection

我的ViewModel是:

public BlockingCollection<WorklistItem> ListSource { get; set; }
在xaml中,我将此BlockingCollection设置为按如下方式填充列表视图

 <ListView x:Name="MyList" HorizontalAlignment="Left" Height="263" Margin="5,200,0,0" VerticalAlignment="Top" Width="515" Grid.Column="0" AutomationProperties.IsColumnHeader="True" 
                              SelectedItem="{Binding SelectedItem}"
                              ItemsSource ="{Binding ListSource}" >

最简单的方法是从observablecollection开始,添加锁定和同步。

如果您特别需要blocking collection中的功能,则可以继承observablecollection,实现iproducerconsumercollection,然后将新集合用作blockingcollection的基本类型。新建blockingcollection时,可以为其指定默认集合以外的基础集合类型。如果您不知道您可以这样做,请点击此链接并向下滚动

,如果没有好的答案,则不可能提供好的答案。也就是说,BlockingCollection没有实现INotifyCollectionChanged,这是更新集合导致绑定UI更新所必需的。我认为您应该只使用ObservableCollection并显式地管理线程安全性。关于堆栈溢出已经有很多问题解释了如何从后台线程更新ObservableCollection。