WPF MVVM Threadsafe从ViewModel </object>获取List <object>的方法

时间:2009-08-05 00:33:24

标签: wpf mvvm viewmodel

我正在尝试从后台工作者访问视图模型上的List,但是因为我要跨线程而得到错误...

这是viewmodel上的问题方法:(我在函数的第一行得到异常(SMMainWindow窗口......))

public static MainWindowViewModel GetMainWindowViewModel() {
            SMMainWindow window = (SMMainWindow)System.Windows.Application.Current.MainWindow;
            if (window != null) {
                return (MainWindowViewModel)window.DataContext;
            }
            return null;
}

有什么想法吗?示例代码将不胜感激

2 个答案:

答案 0 :(得分:3)

如果使用Window的Dispatcher实例设置ViewModel,则会有很大帮助。如果你有这个,那么你可以使用Dispatcher.Invoke来获取或设置ViewModel中的项目。

答案 1 :(得分:0)

如果它是Freezable,您可以冻结窗口。这应该允许您访问它。

调度员方法可能是一个不错的选择,但我总觉得这是违规行为(感觉就像ViewModel过于密切地处理UI),但这可能是个人偏好。

然而,我在这里质疑你的方法。有一个很好的理由,一个ViewModel试图引用另一个吗?我会考虑重新考虑这种方法......通常当人们这样做时,他们正在访问ViewModel,而实际上他们应该触摸模型。