From ec9da47d6ac1258c6f21c3d786465c857ca6b6d7 Mon Sep 17 00:00:00 2001 From: danwalmsley Date: Mon, 15 Feb 2016 14:27:26 +0000 Subject: [PATCH 1/2] supporting null or string.empty to trigger property notifications. --- .../Data/Plugins/InpcPropertyAccessorPlugin.cs | 2 +- .../Data/ExpressionObserverTests_Property.cs | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Markup/Perspex.Markup/Data/Plugins/InpcPropertyAccessorPlugin.cs b/src/Markup/Perspex.Markup/Data/Plugins/InpcPropertyAccessorPlugin.cs index 13970a9054..c52d1a3a26 100644 --- a/src/Markup/Perspex.Markup/Data/Plugins/InpcPropertyAccessorPlugin.cs +++ b/src/Markup/Perspex.Markup/Data/Plugins/InpcPropertyAccessorPlugin.cs @@ -105,7 +105,7 @@ namespace Perspex.Markup.Data.Plugins private void PropertyChanged(object sender, PropertyChangedEventArgs e) { - if (e.PropertyName == _property.Name) + if (e.PropertyName == _property.Name || string.IsNullOrEmpty(e.PropertyName)) { _changed(Value); } diff --git a/tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Property.cs b/tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Property.cs index fe9336ebe6..7730c18303 100644 --- a/tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Property.cs +++ b/tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Property.cs @@ -101,7 +101,10 @@ namespace Perspex.Markup.UnitTests.Data var sub = target.Subscribe(x => result.Add(x)); data.Foo = "bar"; - Assert.Equal(new[] { "foo", "bar" }, result); + data.RaisePropertyChanged(string.Empty); + data.RaisePropertyChanged(null); + + Assert.Equal(new[] { "foo", "bar", "bar", "bar" }, result); sub.Dispose(); @@ -333,6 +336,11 @@ namespace Perspex.Markup.UnitTests.Data RaisePropertyChanged(nameof(Next)); } } + + public void RaisePropertyChanged(string propertyName) + { + base.RaisePropertyChanged(propertyName); + } } private class Class2 : NotifyingBase, INext From 8c7412232cdda159d0ace29903985e8005ceb8da Mon Sep 17 00:00:00 2001 From: danwalmsley Date: Mon, 15 Feb 2016 14:48:41 +0000 Subject: [PATCH 2/2] Seperated testing of null and empty string triggering PropertyChangedEvent. --- .../Data/ExpressionObserverTests_Property.cs | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Property.cs b/tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Property.cs index 7730c18303..ebf98a363e 100644 --- a/tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Property.cs +++ b/tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Property.cs @@ -101,10 +101,35 @@ namespace Perspex.Markup.UnitTests.Data var sub = target.Subscribe(x => result.Add(x)); data.Foo = "bar"; + Assert.Equal(new[] { "foo", "bar" }, result); + + sub.Dispose(); + + Assert.Equal(0, data.SubscriptionCount); + } + + [Fact] + public void Should_Trigger_PropertyChanged_On_Null_Or_Empty_String() + { + var data = new Class1 { Bar = "foo" }; + var target = new ExpressionObserver(data, "Bar"); + var result = new List(); + + var sub = target.Subscribe(x => result.Add(x)); + + Assert.Equal(new[] { "foo" }, result); + + data.Bar = "bar"; + + Assert.Equal(new[] { "foo" }, result); + data.RaisePropertyChanged(string.Empty); + + Assert.Equal(new[] { "foo", "bar" }, result); + data.RaisePropertyChanged(null); - Assert.Equal(new[] { "foo", "bar", "bar", "bar" }, result); + Assert.Equal(new[] { "foo", "bar", "bar" }, result); sub.Dispose(); @@ -327,6 +352,13 @@ namespace Perspex.Markup.UnitTests.Data } } + private string _bar; + public string Bar + { + get { return _bar; } + set { _bar = value; } + } + public INext Next { get { return _next; }