From 44bf2ee72144f9e2707b21a2541082f0f907fe21 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Sun, 30 Dec 2018 23:20:37 -0600 Subject: [PATCH] Add unit test and fix #2149. --- src/Avalonia.Base/Data/Core/ExpressionNode.cs | 1 + .../Data/Core/ExpressionObserverTests_Property.cs | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/Avalonia.Base/Data/Core/ExpressionNode.cs b/src/Avalonia.Base/Data/Core/ExpressionNode.cs index f2f3ed9bfc..8a2dd46b86 100644 --- a/src/Avalonia.Base/Data/Core/ExpressionNode.cs +++ b/src/Avalonia.Base/Data/Core/ExpressionNode.cs @@ -147,6 +147,7 @@ namespace Avalonia.Data.Core private void StopListening() { StopListeningCore(); + _listening = false; } private BindingNotification TargetNullNotification() diff --git a/tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Property.cs b/tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Property.cs index c90683959e..f282d1baf3 100644 --- a/tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Property.cs +++ b/tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Property.cs @@ -563,6 +563,19 @@ namespace Avalonia.Base.UnitTests.Data.Core Assert.Null(result.Item2.Target); } + [Fact] + public void Should_Not_Throw_Exception_On_Unsubscribe_When_Already_Unsubscribed() + { + var source = new Class1 { Foo = "foo" }; + var target = new PropertyAccessorNode("Foo", false); + Assert.NotNull(target); + target.Target = new WeakReference(source); + target.Subscribe(_ => { }); + target.Unsubscribe(); + target.Unsubscribe(); + Assert.True(true); + } + private interface INext { int PropertyChangedSubscriptionCount { get; }