我正在尝试从后台工作者访问视图模型上的List,但是因为我要跨线程而得到错误...
这是viewmodel上的问题方法:(我在函数的第一行得到异常(SMMainWindow窗口......))
public static MainWindowViewModel GetMainWindowViewModel() {
SMMainWindow window = (SMMainWindow)System.Windows.Application.Current.MainWindow;
if (window != null) {
return (MainWindowViewModel)window.DataContext;
}
return null;
}
有什么想法吗?示例代码将不胜感激
答案 0 :(得分:3)
如果使用Window的Dispatcher实例设置ViewModel,则会有很大帮助。如果你有这个,那么你可以使用Dispatcher.Invoke来获取或设置ViewModel中的项目。
答案 1 :(得分:0)
如果它是Freezable,您可以冻结窗口。这应该允许您访问它。
调度员方法可能是一个不错的选择,但我总觉得这是违规行为(感觉就像ViewModel过于密切地处理UI),但这可能是个人偏好。
然而,我在这里质疑你的方法。有一个很好的理由,一个ViewModel试图引用另一个吗?我会考虑重新考虑这种方法......通常当人们这样做时,他们正在访问ViewModel,而实际上他们应该触摸模型。