diff --git a/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj b/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj index d97ab89a09..1c3f453280 100644 --- a/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj +++ b/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj @@ -64,9 +64,9 @@ - - - + + + diff --git a/src/Markup/Avalonia.Markup/Data/ExpressionObserver.cs b/src/Markup/Avalonia.Markup/Data/ExpressionObserver.cs index 90c1aa2894..37226ee74b 100644 --- a/src/Markup/Avalonia.Markup/Data/ExpressionObserver.cs +++ b/src/Markup/Avalonia.Markup/Data/ExpressionObserver.cs @@ -41,14 +41,14 @@ namespace Avalonia.Markup.Data }; /// - /// An ordered collection of value handlers that can be used to customize the handling - /// of certain values. + /// An ordered collection of stream plugins that can be used to customize the behavior + /// of the '^' stream binding operator. /// - public static readonly IList ValueHandlers = - new List + public static readonly IList StreamHandlers = + new List { - new TaskValuePlugin(), - new ObservableValuePlugin(), + new TaskStreamPlugin(), + new ObservableStreamPlugin(), }; private static readonly object UninitializedValue = new object(); diff --git a/src/Markup/Avalonia.Markup/Data/Plugins/IValuePlugin.cs b/src/Markup/Avalonia.Markup/Data/Plugins/IStreamPlugin.cs similarity index 89% rename from src/Markup/Avalonia.Markup/Data/Plugins/IValuePlugin.cs rename to src/Markup/Avalonia.Markup/Data/Plugins/IStreamPlugin.cs index fb285c6d73..efb2e2d93a 100644 --- a/src/Markup/Avalonia.Markup/Data/Plugins/IValuePlugin.cs +++ b/src/Markup/Avalonia.Markup/Data/Plugins/IStreamPlugin.cs @@ -6,9 +6,9 @@ using System; namespace Avalonia.Markup.Data.Plugins { /// - /// Defines how values are observed by an . + /// Defines a plugin that handles the '^' stream binding operator. /// - public interface IValuePlugin + public interface IStreamPlugin { /// /// Checks whether this plugin handles the specified value. diff --git a/src/Markup/Avalonia.Markup/Data/Plugins/ObservableValuePlugin.cs b/src/Markup/Avalonia.Markup/Data/Plugins/ObservableStreamPlugin.cs similarity index 62% rename from src/Markup/Avalonia.Markup/Data/Plugins/ObservableValuePlugin.cs rename to src/Markup/Avalonia.Markup/Data/Plugins/ObservableStreamPlugin.cs index a406fc55b9..a1da42d28f 100644 --- a/src/Markup/Avalonia.Markup/Data/Plugins/ObservableValuePlugin.cs +++ b/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. 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 { /// - /// Handles binding to s in an . + /// Handles binding to s for the '^' stream binding operator. /// - public class ObservableValuePlugin : IValuePlugin + public class ObservableStreamPlugin : IStreamPlugin { /// /// Checks whether this plugin handles the specified value. /// /// A weak reference to the value. /// True if the plugin can handle the value; otherwise false. - public virtual bool Match(WeakReference reference) - { - var target = reference.Target; - - // ReactiveCommand is an IObservable but we want to bind to it, not its value. - return target is IObservable && !(target is ICommand); - } + public virtual bool Match(WeakReference reference) => reference.Target is IObservable; /// /// Starts producing output based on the specified value. diff --git a/src/Markup/Avalonia.Markup/Data/Plugins/TaskValuePlugin.cs b/src/Markup/Avalonia.Markup/Data/Plugins/TaskStreamPlugin.cs similarity index 95% rename from src/Markup/Avalonia.Markup/Data/Plugins/TaskValuePlugin.cs rename to src/Markup/Avalonia.Markup/Data/Plugins/TaskStreamPlugin.cs index b6fda67503..d2c8c1b064 100644 --- a/src/Markup/Avalonia.Markup/Data/Plugins/TaskValuePlugin.cs +++ b/src/Markup/Avalonia.Markup/Data/Plugins/TaskStreamPlugin.cs @@ -12,9 +12,9 @@ using Avalonia.Data; namespace Avalonia.Markup.Data.Plugins { /// - /// Handles binding to s in an . + /// Handles binding to s for the '^' stream binding operator. /// - public class TaskValuePlugin : IValuePlugin + public class TaskStreamPlugin : IStreamPlugin { /// /// Checks whether this plugin handles the specified value. diff --git a/src/Markup/Avalonia.Markup/Data/StreamNode.cs b/src/Markup/Avalonia.Markup/Data/StreamNode.cs index 7a5cfe5009..ebcbfc9598 100644 --- a/src/Markup/Avalonia.Markup/Data/StreamNode.cs +++ b/src/Markup/Avalonia.Markup/Data/StreamNode.cs @@ -14,7 +14,7 @@ namespace Avalonia.Markup.Data protected override IObservable StartListeningCore(WeakReference reference) { - foreach (var plugin in ExpressionObserver.ValueHandlers) + foreach (var plugin in ExpressionObserver.StreamHandlers) { if (plugin.Match(reference)) {