1

CollectionViewSourceを使用している場合、バックグラウンドワーカーにデータをロードするにはどうすればよいですか?私のCollectionViewSourceがUIスレッドにあるので、エラーをスローします。BackgroundWorkerとCollectionViewSource

これは私のコード(XAMLで設定したマイバックグラウンドワーカー)のすべて:

public partial class DepartmentsLookup : Window 
{ 
    private BackgroundWorker backgroundWorker; 
    private ObservableCollection<Department> AllDepartmentsData; 
    private ListCollectionView AllDepartmentsView; 

    private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) 
    { 
     IEnumerable<Department> data = null; 
     using (ArchiveEntities db = new ArchiveEntities()) 
     { 
      data = db.Departments; 
      this.AllDepartmentsData = new ObservableCollection<Department>(data); 
     } 
     CollectionViewSource departmentsSource = (CollectionViewSource)this.FindResource("AllDepartmentsDataSource"); 
     departmentsSource.Source = this.AllDepartmentsData; 
     this.AllDepartmentsView = (ListCollectionView)departmentsSource.View; 
    } 

    public DepartmentsLookup() 
    { 
     InitializeComponent(); 
     backgroundWorker = ((BackgroundWorker)this.FindResource("backgroundWorker")); 
    } 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     backgroundWorker.RunWorkerAsync(); 
    } 
} 

ありがとう。

+1

私は背景職人を見ません。それにもかかわらず、コレクションビューを設定するときにディスパッチャを使用する必要があります – blindmeis

+0

例外と例外はどこにスローされますか? –

+0

私の質問が更新されます。 –

答えて

2

UIエレメントのコードを実行するにはWPFのDispatcherオブジェクト(Dispatcher.Invoke)を使用する必要があります(Withni from BackgroundWorker)。たぶんthis articleはあなたにいくつかの情報を与えることができます。

またはworking with the WPF Dispatcherです。

+1

あなたのセカンドリンクが私を助けます。どうもありがとうございました。 –