Browse Source

member selector support member path

pull/537/head
donandren 11 years ago
parent
commit
65cac33549
  1. 41
      src/Markup/Avalonia.Markup.Xaml/Templates/MemberSelector.cs
  2. 3
      src/Markup/Avalonia.Markup/Properties/AssemblyInfo.cs

41
src/Markup/Avalonia.Markup.Xaml/Templates/MemberSelector.cs

@ -1,20 +1,47 @@
// Copyright (c) The Avalonia Project. All rights reserved.
// Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System.Reflection;
using Avalonia.Controls.Templates;
using Avalonia.Markup.Data;
using System;
namespace Avalonia.Markup.Xaml.Templates
{
public class MemberSelector : IMemberSelector
{
public string MemberName { get; set; }
public string MemberName
{
get { return _memberName; }
set
{
if (_memberName != value)
{
_memberName = value;
_expressionNode = null;
_memberValueNode = null;
}
}
}
public object Select(object o)
{
// TODO: Handle nested property paths, changing values etc.
var property = o.GetType().GetRuntimeProperty(MemberName);
return property?.GetValue(o);
if (_expressionNode == null)
{
_expressionNode = ExpressionNodeBuilder.Build(MemberName);
_memberValueNode = _expressionNode;
while (_memberValueNode.Next != null)
_memberValueNode = _memberValueNode.Next;
}
_expressionNode.Target = new WeakReference(o);
return _memberValueNode.CurrentValue.Target;
}
private ExpressionNode _expressionNode;
private string _memberName;
private ExpressionNode _memberValueNode;
}
}
}

3
src/Markup/Avalonia.Markup/Properties/AssemblyInfo.cs

@ -7,4 +7,5 @@ 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.UnitTests")]
[assembly: InternalsVisibleTo("Avalonia.Markup.Xaml")]
Loading…
Cancel
Save