Skip to content

Commit f4177c8

Browse files
committed
Fix all of the test failures introduced
1 parent 9910e83 commit f4177c8

File tree

1 file changed

+20
-13
lines changed

1 file changed

+20
-13
lines changed

ReactiveUI/Activation.cs

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -63,23 +63,30 @@ public static IDisposable WhenActivated(this IViewFor This, Func<IEnumerable<IDi
6363

6464
var activationEvents = activationFetcher.GetActivationForView(This);
6565

66-
var viewForDisp = new SerialDisposable();
67-
var currentDisp = new SerialDisposable();
66+
var viewDisposable = new SerialDisposable();
6867

69-
var currentVmOrNull = Observable.CombineLatest(This.WhenAnyValue(x => x.ViewModel), activationEvents.Item1, (vm, _) => vm)
70-
.Where(vm => vm is ISupportsActivation);
68+
return new CompositeDisposable(
69+
activationEvents.Item1.Subscribe(_ => viewDisposable.Disposable = new CompositeDisposable(block())),
70+
activationEvents.Item2.Subscribe(_ => viewDisposable.Disposable = Disposable.Empty),
71+
handleViewModelActivation(This, activationEvents),
72+
viewDisposable);
73+
}
74+
75+
static IDisposable handleViewModelActivation(IViewFor view, Tuple<IObservable<Unit>, IObservable<Unit>> activation)
76+
{
77+
var vm = view.ViewModel as ISupportsActivation;
78+
var disp = new SerialDisposable() { Disposable = (vm != null ? vm.Activator.Activate() : Disposable.Empty) };
7179

72-
var currentVmUnsubscribedOnDispose = Observable.Merge(
73-
activationEvents.Item1.Select(_ => currentVmOrNull),
74-
activationEvents.Item2.Select(_ => Observable.Never<object>()))
75-
.Switch();
80+
var latestVm = Observable.Merge(
81+
activation.Item1.Select(_ => view.WhenAnyValue(x => x.ViewModel)),
82+
activation.Item2.Select(_ => Observable.Never<object>().StartWith(default(object))))
83+
.Switch()
84+
.Select(x => x as ISupportsActivation);
7685

7786
return new CompositeDisposable(
78-
currentVmUnsubscribedOnDispose
79-
.Subscribe(vm => viewForDisp.Disposable = ((ISupportsActivation)vm).Activator.Activate()),
80-
activationEvents.Item1.Subscribe(_ => currentDisp.Disposable = new CompositeDisposable(block())),
81-
activationEvents.Item2.Subscribe(_ => currentDisp.Disposable = viewForDisp.Disposable = Disposable.Empty),
82-
currentDisp, viewForDisp);
87+
disp,
88+
latestVm.Subscribe(x => disp.Disposable =
89+
(x != null ? x.Activator.Activate() : Disposable.Empty)));
8390
}
8491

8592
public static IDisposable WhenActivated(this IViewFor This, Action<Action<IDisposable>> block)

0 commit comments

Comments
 (0)