我的WPF应用程序使用MVVM模式进行结构化。 ViewModel将与服务器异步通信,并且在返回请求的数据时,会触发ViewModel中的回调,并且它将对此数据执行某些操作。这将运行在不是UI线程的线程上。有时候这些回调涉及需要在UI线程上完成的工作,所以我需要Dispatcher。这可能是东西,如:ViewModel对象持有Dispatcher被认为是不好的做法吗?
- 将数据添加到一个ObservableCollection显示在GUI中
- 创建某种WPF对象
- ,将设置什么触发棱镜命令。
我尽量避免后者,但这两个第一点,我发现ViewModels做的事情是合理的。所以; ViewModel可以让Dispatcher能够调用UI线程的命令吗?或者这被认为是不好的做法?为什么?
我必须在控制器中做同样的事情 - 控制器订阅它创建的视图的Load事件,并且在那一刻抓取对视图调度器的引用。这对于执行已经传递的委托非常有用。 – slugster 2010-03-12 11:22:55
Thx小费!我正在使用IoC容器,并且IoC容器是在App.xaml.cs中创建的。我假设这是在UI线程中运行的,因此计划是在创建IoC容器的位置获取当前调度器并将其添加到容器中。仍然看看这是否成功。 – stiank81 2010-03-12 11:56:21
完美地工作。或者,您可以在任何您知道由UI线程运行的parh中简单地使用Dispatcher.CurrentDispatcher。像例如ViewModel构造函数 - 如果这些构造函数是在UI线程中构造的。 – stiank81 2010-03-12 13:00:18