我需要选择批量数据(百万行),然后更新数据库表。现在,我正在按BackgroundWorker
中的块读取数据块(因为MSDN中指定的用法)
我有一个实现ViewModel
的{{1}}类,并且所有公共属性都通过INotifyPropertyChanged
组件绑定到GUI - 经典的WinForms方式:
问题是我的所有逻辑都在一个BindingSource
类中。如何以更好的方式隔离我的逻辑?数据获取和更新逻辑位于ViewModel
方法的循环中,它通过DoWork()
的{{1}}方法向UI发出信号。
编辑 - 除了进度之外,我不必在GUI上显示任何类型的数据。它只是一次性工具。建议?
编辑 - 解决方案 - http://www.codeproject.com/KB/architecture/MVPVMWindowsForms.aspx
答案 0 :(得分:1)
将所有BackgroundWorker逻辑移动到Model类中,并使其以异步方式执行。提供用于在新记录可用时通知ViewModel的事件。
通常,您的ViewModel不应该对线程有太多了解(除此之外可能还有Dispatcher.Invoke)。 ViewModel应仅接受来自View的输入,调用Model,然后使用INotifyPropertyChanged更新View。 ViewModel中不应存在太多逻辑。
你可能也想使用ObservableCollection,但听起来你还没有那么远。
答案 1 :(得分:1)