Browse Source

Added ExpressionSubject.

pull/237/head
Steven Kirk 11 years ago
parent
commit
82be7441ad
  1. 4
      src/Markup/Perspex.Markup/Binding/ExpressionObserver.cs
  2. 48
      src/Markup/Perspex.Markup/Binding/ExpressionSubject.cs
  3. 1
      src/Markup/Perspex.Markup/Perspex.Markup.csproj

4
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
{
/// <summary>
/// Observes the value of an expression on a root object.
/// Observes and sets the value of an expression on an object.
/// </summary>
public class ExpressionObserver : ObservableBase<ExpressionValue>
{

48
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
{
/// <summary>
/// Turns an <see cref="ExpressionObserver"/> into a subject that can be bound two-ways.
/// </summary>
public class ExpressionSubject : ISubject<object>
{
private ExpressionObserver _inner;
/// <summary>
/// Initializes a new instance of the <see cref="ExpressionObserver"/> class.
/// </summary>
/// <param name="inner">The <see cref="ExpressionObserver"/>.</param>
public ExpressionSubject(ExpressionObserver inner)
{
_inner = inner;
}
/// <inheritdoc/>
public void OnCompleted()
{
}
/// <inheritdoc/>
public void OnError(Exception error)
{
}
/// <inheritdoc/>
public void OnNext(object value)
{
_inner.SetValue(value);
}
/// <inheritdoc/>
public IDisposable Subscribe(IObserver<object> observer)
{
return _inner.Select(x => x.Value).Distinct().Subscribe(observer);
}
}
}

1
src/Markup/Perspex.Markup/Perspex.Markup.csproj

@ -36,6 +36,7 @@
<ItemGroup>
<Compile Include="Binding\ExpressionNodeBuilder.cs" />
<Compile Include="Binding\ExpressionParseException.cs" />
<Compile Include="Binding\ExpressionSubject.cs" />
<Compile Include="Binding\ExpressionValue.cs" />
<Compile Include="Binding\LogicalNotNode.cs" />
<Compile Include="Binding\IndexerNode.cs" />

Loading…
Cancel
Save