2015-09-16 85 views
2

我將項目添加到ListBox像這樣;WPF。在沒有ItemsSource的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

刪除所有這些,並使用正確的數據綁定。 –

+0

@HighCore我需要從後臺線程添加項目到列表框 –

+0

不,你不需要。你需要在後臺線程中處理你的'data',這與UI無關。刪除所有這些並使用正確的數據綁定。 –

回答

1

如果要在後臺線程中將項目添加到集合中,但仍然使用ItemsSource,則可以使用BindingOperations.EnableCollectionSynchronization這樣做。

添加此using語句:

ObservableCollection<MyType> Source = new ObservableCollection<MyType>(); 
object myLock = new object(); 

現在,您可以啓用同步酌情:

using System.Windows.Data; 

你需要一個對象綁定引擎在除了你的收藏鎖定。

BindingOperations.EnableCollectionSynchronization(Source, myLock); 

您現在應該能夠同時仍然在使用ListBoxItemsSource後臺線程來更新集合。

+0

謝謝,但我需要支持.net 4.0 –

+0

我明白了。在這種情況下,您可能希望嘗試使用BackgroundWorker及其報告進度處理程序的答案建議:http://stackoverflow.com/a/32633164/1231132 – WasGoodDone

相關問題