From 82be7441ad1d99385caea37fdbc6f804c74f33a7 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 2 Oct 2015 10:50:36 +0200 Subject: [PATCH] Added ExpressionSubject. --- .../Binding/ExpressionObserver.cs | 4 +- .../Binding/ExpressionSubject.cs | 48 +++++++++++++++++++ .../Perspex.Markup/Perspex.Markup.csproj | 1 + 3 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 src/Markup/Perspex.Markup/Binding/ExpressionSubject.cs diff --git a/src/Markup/Perspex.Markup/Binding/ExpressionObserver.cs b/src/Markup/Perspex.Markup/Binding/ExpressionObserver.cs index bd0b08b7c3..c50868b549 100644 --- a/src/Markup/Perspex.Markup/Binding/ExpressionObserver.cs +++ b/src/Markup/Perspex.Markup/Binding/ExpressionObserver.cs @@ -2,15 +2,13 @@ // Licensed under the MIT license. See licence.md file in the project root for full license information. using System; -using System.Collections.Generic; -using System.Linq; using System.Reactive; using System.Reactive.Disposables; namespace Perspex.Markup.Binding { /// - /// Observes the value of an expression on a root object. + /// Observes and sets the value of an expression on an object. /// public class ExpressionObserver : ObservableBase { diff --git a/src/Markup/Perspex.Markup/Binding/ExpressionSubject.cs b/src/Markup/Perspex.Markup/Binding/ExpressionSubject.cs new file mode 100644 index 0000000000..e2e94daf7c --- /dev/null +++ b/src/Markup/Perspex.Markup/Binding/ExpressionSubject.cs @@ -0,0 +1,48 @@ +// Copyright (c) The Perspex Project. All rights reserved. +// Licensed under the MIT license. See licence.md file in the project root for full license information. + +using System; +using System.Reactive.Linq; +using System.Reactive.Subjects; + +namespace Perspex.Markup.Binding +{ + /// + /// Turns an into a subject that can be bound two-ways. + /// + public class ExpressionSubject : ISubject + { + private ExpressionObserver _inner; + + /// + /// Initializes a new instance of the class. + /// + /// The . + public ExpressionSubject(ExpressionObserver inner) + { + _inner = inner; + } + + /// + public void OnCompleted() + { + } + + /// + public void OnError(Exception error) + { + } + + /// + public void OnNext(object value) + { + _inner.SetValue(value); + } + + /// + public IDisposable Subscribe(IObserver observer) + { + return _inner.Select(x => x.Value).Distinct().Subscribe(observer); + } + } +} diff --git a/src/Markup/Perspex.Markup/Perspex.Markup.csproj b/src/Markup/Perspex.Markup/Perspex.Markup.csproj index aee9048774..d22201ee9f 100644 --- a/src/Markup/Perspex.Markup/Perspex.Markup.csproj +++ b/src/Markup/Perspex.Markup/Perspex.Markup.csproj @@ -36,6 +36,7 @@ +