Browse Source

Renamed ValueHandler -> StreamPlugin

pull/764/head
Steven Kirk 10 years ago
parent
commit
b6c51b34ef
  1. 6
      src/Markup/Avalonia.Markup/Avalonia.Markup.csproj
  2. 12
      src/Markup/Avalonia.Markup/Data/ExpressionObserver.cs
  3. 4
      src/Markup/Avalonia.Markup/Data/Plugins/IStreamPlugin.cs
  4. 18
      src/Markup/Avalonia.Markup/Data/Plugins/ObservableStreamPlugin.cs
  5. 4
      src/Markup/Avalonia.Markup/Data/Plugins/TaskStreamPlugin.cs
  6. 2
      src/Markup/Avalonia.Markup/Data/StreamNode.cs

6
src/Markup/Avalonia.Markup/Avalonia.Markup.csproj

@ -64,9 +64,9 @@
<Compile Include="Data\Parsers\IdentifierParser.cs" /> <Compile Include="Data\Parsers\IdentifierParser.cs" />
<Compile Include="Data\Parsers\ExpressionParser.cs" /> <Compile Include="Data\Parsers\ExpressionParser.cs" />
<Compile Include="Data\Parsers\Reader.cs" /> <Compile Include="Data\Parsers\Reader.cs" />
<Compile Include="Data\Plugins\ObservableValuePlugin.cs" /> <Compile Include="Data\Plugins\ObservableStreamPlugin.cs" />
<Compile Include="Data\Plugins\TaskValuePlugin.cs" /> <Compile Include="Data\Plugins\TaskStreamPlugin.cs" />
<Compile Include="Data\Plugins\IValuePlugin.cs" /> <Compile Include="Data\Plugins\IStreamPlugin.cs" />
<Compile Include="Data\Plugins\PropertyAccessorBase.cs" /> <Compile Include="Data\Plugins\PropertyAccessorBase.cs" />
<Compile Include="Data\Plugins\PropertyError.cs" /> <Compile Include="Data\Plugins\PropertyError.cs" />
<Compile Include="Data\Plugins\DataValidatiorBase.cs" /> <Compile Include="Data\Plugins\DataValidatiorBase.cs" />

12
src/Markup/Avalonia.Markup/Data/ExpressionObserver.cs

@ -41,14 +41,14 @@ namespace Avalonia.Markup.Data
}; };
/// <summary> /// <summary>
/// An ordered collection of value handlers that can be used to customize the handling /// An ordered collection of stream plugins that can be used to customize the behavior
/// of certain values. /// of the '^' stream binding operator.
/// </summary> /// </summary>
public static readonly IList<IValuePlugin> ValueHandlers = public static readonly IList<IStreamPlugin> StreamHandlers =
new List<IValuePlugin> new List<IStreamPlugin>
{ {
new TaskValuePlugin(), new TaskStreamPlugin(),
new ObservableValuePlugin(), new ObservableStreamPlugin(),
}; };
private static readonly object UninitializedValue = new object(); private static readonly object UninitializedValue = new object();

4
src/Markup/Avalonia.Markup/Data/Plugins/IValuePlugin.cs → src/Markup/Avalonia.Markup/Data/Plugins/IStreamPlugin.cs

@ -6,9 +6,9 @@ using System;
namespace Avalonia.Markup.Data.Plugins namespace Avalonia.Markup.Data.Plugins
{ {
/// <summary> /// <summary>
/// Defines how values are observed by an <see cref="ExpressionObserver"/>. /// Defines a plugin that handles the '^' stream binding operator.
/// </summary> /// </summary>
public interface IValuePlugin public interface IStreamPlugin
{ {
/// <summary> /// <summary>
/// Checks whether this plugin handles the specified value. /// Checks whether this plugin handles the specified value.

18
src/Markup/Avalonia.Markup/Data/Plugins/ObservableValuePlugin.cs → src/Markup/Avalonia.Markup/Data/Plugins/ObservableStreamPlugin.cs

@ -2,32 +2,20 @@
// Licensed under the MIT license. See licence.md file in the project root for full license information. // Licensed under the MIT license. See licence.md file in the project root for full license information.
using System; using System;
using System.Reactive.Linq;
using System.Reactive.Subjects;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows.Input;
using Avalonia.Data;
namespace Avalonia.Markup.Data.Plugins namespace Avalonia.Markup.Data.Plugins
{ {
/// <summary> /// <summary>
/// Handles binding to <see cref="IObservable{T}"/>s in an <see cref="ExpressionObserver"/>. /// Handles binding to <see cref="IObservable{T}"/>s for the '^' stream binding operator.
/// </summary> /// </summary>
public class ObservableValuePlugin : IValuePlugin public class ObservableStreamPlugin : IStreamPlugin
{ {
/// <summary> /// <summary>
/// Checks whether this plugin handles the specified value. /// Checks whether this plugin handles the specified value.
/// </summary> /// </summary>
/// <param name="reference">A weak reference to the value.</param> /// <param name="reference">A weak reference to the value.</param>
/// <returns>True if the plugin can handle the value; otherwise false.</returns> /// <returns>True if the plugin can handle the value; otherwise false.</returns>
public virtual bool Match(WeakReference reference) public virtual bool Match(WeakReference reference) => reference.Target is IObservable<object>;
{
var target = reference.Target;
// ReactiveCommand is an IObservable but we want to bind to it, not its value.
return target is IObservable<object> && !(target is ICommand);
}
/// <summary> /// <summary>
/// Starts producing output based on the specified value. /// Starts producing output based on the specified value.

4
src/Markup/Avalonia.Markup/Data/Plugins/TaskValuePlugin.cs → src/Markup/Avalonia.Markup/Data/Plugins/TaskStreamPlugin.cs

@ -12,9 +12,9 @@ using Avalonia.Data;
namespace Avalonia.Markup.Data.Plugins namespace Avalonia.Markup.Data.Plugins
{ {
/// <summary> /// <summary>
/// Handles binding to <see cref="Task"/>s in an <see cref="ExpressionObserver"/>. /// Handles binding to <see cref="Task"/>s for the '^' stream binding operator.
/// </summary> /// </summary>
public class TaskValuePlugin : IValuePlugin public class TaskStreamPlugin : IStreamPlugin
{ {
/// <summary> /// <summary>
/// Checks whether this plugin handles the specified value. /// Checks whether this plugin handles the specified value.

2
src/Markup/Avalonia.Markup/Data/StreamNode.cs

@ -14,7 +14,7 @@ namespace Avalonia.Markup.Data
protected override IObservable<object> StartListeningCore(WeakReference reference) protected override IObservable<object> StartListeningCore(WeakReference reference)
{ {
foreach (var plugin in ExpressionObserver.ValueHandlers) foreach (var plugin in ExpressionObserver.StreamHandlers)
{ {
if (plugin.Match(reference)) if (plugin.Match(reference))
{ {

Loading…
Cancel
Save