From 45207dd7c681bb0f01ea1a91cbcfe0cd0592ecd7 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 4 Mar 2016 01:58:41 +0100 Subject: [PATCH] Make ExpressionObserver complete... When rootObservable or _update completes. --- .../Perspex.Markup/Data/ExpressionObserver.cs | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Markup/Perspex.Markup/Data/ExpressionObserver.cs b/src/Markup/Perspex.Markup/Data/ExpressionObserver.cs index 52e619872f..cebf0daebd 100644 --- a/src/Markup/Perspex.Markup/Data/ExpressionObserver.cs +++ b/src/Markup/Perspex.Markup/Data/ExpressionObserver.cs @@ -193,7 +193,18 @@ namespace Perspex.Markup.Data if (_node != null) { - var subscription = _node.Subscribe(observer); + IObservable source = _node; + + if (_rootObservable != null) + { + source = source.TakeUntil(Complete(_rootObservable)); + } + else if (_update != null) + { + source = source.TakeUntil(Complete(_update)); + } + + var subscription = source.Subscribe(observer); return Disposable.Create(() => { @@ -221,6 +232,13 @@ namespace Perspex.Markup.Data } } + private static IObservable Complete(IObservable input) + { + return Observable.Merge( + input.TakeLast(1).Select(_ => Unit.Default), + input.IsEmpty().Where(x => x).Select(_ => Unit.Default)); + } + private void IncrementCount() { if (_count++ == 0 && _node != null)