2016-08-24 2 views
0

Mein DetailsViewModel überwacht Änderungen in einem ausgewählten EnvelopeViewModel und aktualisiert die AgendaItemId des DetailsViewModel.ReactiveUI - Mehrere InvokeCommand funktioniert nicht für eine einzelne Observable

Ich aktualisiere das DetailsViewModel mit dem von _agendaItemService zurückgegebenen AgendaItem. Ich glaube, das verursacht Probleme.

Dies scheint tatsächlich zu funktionieren. Die DetailsView wird mit den neuen Werten aktualisiert. Wo Dinge scheitern, versuche ich, DepartmentContacts zu aktualisieren.

GetDepartmentContacts = ReactiveCommand.CreateAsyncTask(Function(x) _departmentService.GetDepartmentContactsAsync(AgendaItemId)) 
GetDepartmentContacts.ToPropertyEx(Me, Function(x) x.DepartmentContacts, New BindingList(Of PersonContactViewModel)) 
GetDepartmentContacts.ThrownExceptions.Subscribe(Sub(ex) Log.ErrorException("GetDepartmentContacts", ex)) 

WhenAnyValue(Function(vm) vm.AgendaItemId) _ 
     .Where(Function(id) id > 0) _ 
     .InvokeCommand(GetDepartmentContacts) 

Das ObservableAsPropertyHelper DepartmentContacts kann die Ansicht nicht aktualisieren.

Wenn ich jedoch den Aufruf des UpdateViewModel-Befehls auskommentiere, wird DepartmentContacts ohne Problem aktualisiert.

Es muss einen besseren Weg in ReactiveUI geben, um mein ViewModel zu aktualisieren.

Antwort

0

Ich glaube, ich fand die Antwort mit Combining Commands.

Ich denke, das Problem ist, dass ich InvokeCommand nicht zweimal auf der gleichen beobachtbaren verwenden kann. ReactiveCommand.CreateCombined lassen Sie mich die beiden Befehle in einem Befehl kombiniert, die aufgerufen werden können, und es würde behandeln beide Befehle ihm zugeordneten aufgerufen wird.

UpdateViewModel = ReactiveCommand.CreateAsyncTask(Function(x) _agendaItemService.FindAsync(AgendaItemId)) 
UpdateViewModel.SubscribeOn(RxApp.MainThreadScheduler).Subscribe(Sub(agendaItem) UpdateDetails(agendaItem)) 
UpdateViewModel.ThrownExceptions.Subscribe(Sub(ex) Log.ErrorException("LoadViewModel", ex)) 

GetDepartmentContacts = ReactiveCommand.CreateAsyncTask(Function(x) _departmentService.GetDepartmentContactsAsync(AgendaItemId)) 
GetDepartmentContacts.ToPropertyEx(Me, Function(x) x.DepartmentContacts, New BindingList(Of PersonContactViewModel)) 
GetDepartmentContacts.ThrownExceptions.Subscribe(Sub(ex) Log.ErrorException("GetDepartmentContacts", ex)) 

RefreshAgendaItemValues = ReactiveCommand.CreateCombined(RefreshViewModel, RefreshDepartmentContacts) 

WhenAnyValue(Function(vm) vm.AgendaItemId) _ 
    .Where(Function(id) id > 0) _ 
    .InvokeCommand(RefreshAgendaItemValues) 
Verwandte Themen