Backgroundworker - Привязка данных - Просмотр обновления - PullRequest
1 голос
/ 31 августа 2011

У меня есть требование выбрать объемные данные (миллион строк) и затем обновить таблицу БД. Теперь я читаю порцию данных по порциям в BackgroundWorker (как указано в MSDN )

У меня есть класс ViewModel, который реализует INotifyPropertyChanged, и все публичные свойства связаны с GUI через компонент BindingSource - классический способ WinForms:

Проблема в том, что вся моя логика в одном ViewModel классе. Как я могу отделить мою логику гораздо лучше? Логика выборки и обновления данных находится в цикле в методе DoWork() и сигнализирует пользовательский интерфейс с помощью метода ReportProgress из BackgroundWorker.

РЕДАКТИРОВАТЬ - мне не нужно отображать какие-либо данные в графическом интерфейсе, кроме прогресса. Это всего лишь одноразовый инструмент. Предложения?

РЕДАКТИРОВАТЬ - Решение - http://www.codeproject.com/KB/architecture/MVPVMWindowsForms.aspx

Ответы [ 2 ]

1 голос
/ 06 сентября 2011
1 голос
/ 31 августа 2011

Переместите всю логику BackgroundWorker в класс Model и заставьте его выполнять работу асинхронно.Укажите события для уведомления вашей ViewModel о появлении новых записей.

Как правило, ваши ViewModels не должны иметь больших знаний о потоке (кроме, может быть, Dispatcher.Invoke здесь и там).Модель представления должна просто принимать входные данные из представления, вызывать модель и затем обновлять представление с помощью INotifyPropertyChanged.В ViewModel не должно быть много логики.

Возможно, вы также захотите использовать ObservableCollection, но, похоже, вы еще не достигли этого.

...