diff --git a/src/Markup/Avalonia.Markup.Xaml/Templates/MemberSelector.cs b/src/Markup/Avalonia.Markup.Xaml/Templates/MemberSelector.cs index 7e9d7c00b8..5e412633d2 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Templates/MemberSelector.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Templates/MemberSelector.cs @@ -5,14 +5,13 @@ using Avalonia.Controls.Templates; using Avalonia.Data; using Avalonia.Markup.Data; using System; +using System.Reactive.Linq; namespace Avalonia.Markup.Xaml.Templates { public class MemberSelector : IMemberSelector { - private ExpressionNode _expressionNode; private string _memberName; - private ExpressionNode _memberValueNode; public string MemberName { @@ -22,48 +21,22 @@ namespace Avalonia.Markup.Xaml.Templates if (_memberName != value) { _memberName = value; - _expressionNode = null; - _memberValueNode = null; } } } public object Select(object o) { - throw new NotImplementedException(); - ////if (string.IsNullOrEmpty(MemberName)) - ////{ - //// return o; - ////} - - ////if (_expressionNode == null) - ////{ - //// _expressionNode = ExpressionNodeBuilder.Build(MemberName); - - //// _memberValueNode = _expressionNode; - - //// while (_memberValueNode.Next != null) - //// { - //// _memberValueNode = _memberValueNode.Next; - //// } - ////} - - ////_expressionNode.Target = new WeakReference(o); - - ////object result = _memberValueNode.CurrentValue.Target; - - ////_expressionNode.Target = null; + if (string.IsNullOrEmpty(MemberName)) + { + return o; + } - ////if (result == AvaloniaProperty.UnsetValue) - ////{ - //// return null; - ////} - ////else if (result is BindingNotification) - ////{ - //// return null; - ////} + var expression = new ExpressionObserver(o, MemberName); + object result = AvaloniaProperty.UnsetValue; - ////return result; + expression.Subscribe(x => result = x); + return (result == AvaloniaProperty.UnsetValue || result is BindingNotification) ? null : result; } } } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup/Properties/AssemblyInfo.cs b/src/Markup/Avalonia.Markup/Properties/AssemblyInfo.cs index d74ccf00a1..dd8c0a6bd3 100644 --- a/src/Markup/Avalonia.Markup/Properties/AssemblyInfo.cs +++ b/src/Markup/Avalonia.Markup/Properties/AssemblyInfo.cs @@ -8,4 +8,3 @@ using System.Runtime.CompilerServices; [assembly: AssemblyTitle("Avalonia.Markup")] [assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Markup")] [assembly: InternalsVisibleTo("Avalonia.Markup.UnitTests")] -[assembly: InternalsVisibleTo("Avalonia.Markup.Xaml")] \ No newline at end of file