【发布时间】:2012-01-08 09:41:07
【问题描述】:
我无法使用响应式扩展和 MVVM Light Toolkit 回到 UI 线程。
我在 ViewModel 上获得了以下属性:
private ObservableCollection<Workspace> _workspaces;
public ObservableCollection<Workspace> Workspaces
{
get
{
return _workspaces;
}
set
{
if (_workspaces == value)
return;
_workspaces = value;
RaisePropertyChanged("WorkspacesLoaded");
}
}
public bool WorkspacesLoaded
{
get
{
if (_workspaces != null && _workspaces.Count > 0)
return true;
return false;
}
}
注意 RaisePropertyChanged("WorkspacesLoaded"); 似乎永远不会到达 UI。
以下代码订阅了Subject<Workspace>,从我读到的.ObserveOnDispatcher() 应该让我回到UI 线程。
_workspaceSubscription = _workspaceSource.WorkspaceMutations
.ObserveOnDispatcher()
.SubscribeOn(Scheduler.ThreadPool)
.Subscribe(OnNewWorkspaceMutation, OnWorkspaceMutationError);
_workspaceSource.GetWorkspaces();
并且此代码添加到Workspaces 属性:
private void OnWorkspaceCreated(Workspace workspace)
{
Workspaces.Add(workspace);
}
这让我感到困惑:Workspaces 集合被正确填充并且 UI 正确绑定到它。但是,当我在 Workspaces 的设置器上设置断点时,它永远不会被击中,所以我怀疑 Observable 流没有返回到 UI 线程。
任何帮助将不胜感激。
【问题讨论】:
标签: silverlight mvvm mvvm-light system.reactive