Reactive ExtentionsとMVVM Light Toolkitを使用してUIスレッドに戻ることができません。Rx、MVVM Light、およびSilverlightを使用してUIスレッドに戻ることができません
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;
}
}
お知らせUIに到着すると思われることはありません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
に設定すると、決してヒットしないので、ObservableストリームがUIスレッドに返されないという疑いがあります。
ご協力いただければ幸いです。
あなたはそうです!私がセッターを引き受けることの大きな間違いは打撃を受けるだろう。私が混乱したのは、ViewModelのコンストラクタで.Addを実行したときに必要な動作があったからですが、これはUIがまだプロパティにバインドされていないためです。 – ndsc