From 92a2f25de44afb1db346a9c9d8d806b15ab18321 Mon Sep 17 00:00:00 2001 From: donandren Date: Fri, 20 May 2016 17:32:09 +0300 Subject: [PATCH] make sure member selector is evaluating target value every time select is made --- .../Templates/MemberSelector.cs | 2 ++ .../Templates/MemberSelectorTests.cs | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/Markup/Avalonia.Markup.Xaml/Templates/MemberSelector.cs b/src/Markup/Avalonia.Markup.Xaml/Templates/MemberSelector.cs index a901c175c9..be4287605c 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Templates/MemberSelector.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Templates/MemberSelector.cs @@ -51,6 +51,8 @@ namespace Avalonia.Markup.Xaml.Templates object result = _memberValueNode.CurrentValue.Target; + _expressionNode.Target = null; + if (result == AvaloniaProperty.UnsetValue) { return null; diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Templates/MemberSelectorTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Templates/MemberSelectorTests.cs index 4903ca7b35..7082863c0d 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Templates/MemberSelectorTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Templates/MemberSelectorTests.cs @@ -157,6 +157,23 @@ namespace Avalonia.Markup.Xaml.UnitTests.Templates Assert.Equal(1, selector.Select(data)); } + [Fact] + public void Should_Support_Change_Of_Target_Value() + { + var selector = new MemberSelector() { MemberName = "StringValue" }; + + var data = new Item() + { + StringValue = "Value1" + }; + + Assert.Same("Value1", selector.Select(data)); + + data.StringValue = "Value2"; + + Assert.Same("Value2", selector.Select(data)); + } + private class Item { public Item Child { get; set; }