我将这些项目添加到ListBox
;
tvProgramListBox.Items.Add(r);
在添加所有对象后,我试图将这样的项目分组;
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(tvProgramListBox.Items);
PropertyGroupDescription groupDescription = new PropertyGroupDescription("date");
view.GroupDescriptions.Clear();
view.GroupDescriptions.Add(groupDescription);
或者像这样;
PropertyGroupDescription groupDescription = new PropertyGroupDescription("date");
tvProgramListBox.Items.GroupDescriptions.Clear();
tvProgramListBox.Items.GroupDescriptions.Add(groupDescription);
项目中存在 date
属性。但是,ListBox
不会对项目进行分组。当我之前使用ItemsSource
绑定时,分组工作正常。但是我的集合中有很多项目,我决定在后台线程中手动将它们添加到ListBox
,以保持UI免于冻结。所以现在它没有冻结,但也没有组合:)
任何建议赞赏。感谢。
答案 0 :(得分:1)
如果您想在后台主题中添加项目但仍然使用ItemsSource
,则可以使用BindingOperations.EnableCollectionSynchronization
来执行此操作。
使用以下语句添加:
using System.Windows.Data;
除了你的收藏之外,你还需要一个绑定引擎锁定对象:
ObservableCollection<MyType> Source = new ObservableCollection<MyType>();
object myLock = new object();
现在您可以在适当的时候启用同步。
BindingOperations.EnableCollectionSynchronization(Source, myLock);
您现在应该能够在ItemsSource
上使用ListBox
的同时从后台线程更新集合。