Skip to content

Commit bf4e582

Browse files
committed
Make sure to dispose WhenAnyValue on release
1 parent 46a20be commit bf4e582

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

ReactiveUI/Activation.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,16 @@ public static IDisposable WhenActivated(this IViewFor This, Func<IEnumerable<IDi
6666
var viewForDisp = new SerialDisposable();
6767
var currentDisp = new SerialDisposable();
6868

69+
var currentVmOrNull = Observable.CombineLatest(This.WhenAnyValue(x => x.ViewModel), activationEvents.Item1, (vm, _) => vm)
70+
.Where(vm => vm is ISupportsActivation);
71+
72+
var currentVmUnsubscribedOnDispose = Observable.Merge(
73+
activationEvents.Item1.Select(_ => currentVmOrNull),
74+
activationEvents.Item2.Select(_ => Observable.Never<object>()))
75+
.Switch();
76+
6977
return new CompositeDisposable(
70-
Observable.CombineLatest(This.WhenAnyValue(x => x.ViewModel), activationEvents.Item1, (vm, _) => vm)
71-
.Where(vm => vm is ISupportsActivation)
78+
currentVmUnsubscribedOnDispose
7279
.Subscribe(vm => viewForDisp.Disposable = ((ISupportsActivation)vm).Activator.Activate()),
7380
activationEvents.Item1.Subscribe(_ => currentDisp.Disposable = new CompositeDisposable(block())),
7481
activationEvents.Item2.Subscribe(_ => currentDisp.Disposable = viewForDisp.Disposable = Disposable.Empty),

0 commit comments

Comments
 (0)