我无法使用Reactive Extentions和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");
。
以下代码订阅了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
的setter上设置断点时,它永远不会被命中,所以我怀疑Observable流没有返回到UI线程。
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
这是因为您添加到Workspaces集合中,实际上并未再次设置集合属性。如果您已经使用过
Workspaces = new ObservableCollection<Workspace>();
然后触发了wokrspace属性的设置。现在它只使用已存在的值。如果你在getter中设置一个断点,它就会被击中。