Browse Source
Merge pull request #8442 from AvaloniaUI/fixes/empty-batch-update
Fix empty batch nested updates.
pull/8446/head
Max Katz
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
30 additions and
4 deletions
-
src/Avalonia.Base/ValueStore.cs
-
tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_BatchUpdate.cs
|
|
|
@ -462,10 +462,6 @@ namespace Avalonia |
|
|
|
values.Remove(entry.property); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
throw new AvaloniaInternalException("Value could not be found at the end of batch update."); |
|
|
|
} |
|
|
|
|
|
|
|
// If a new batch update was started while ending this one, abort.
|
|
|
|
if (_batchUpdateCount > 0) |
|
|
|
|
|
|
|
@ -611,6 +611,36 @@ namespace Avalonia.Base.UnitTests |
|
|
|
Assert.Equal("foo", notifications[1].NewValue); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Can_Run_Empty_Batch_Update_When_Ending_Batch_Update() |
|
|
|
{ |
|
|
|
var target = new TestClass(); |
|
|
|
var raised = 0; |
|
|
|
var notifications = new List<AvaloniaPropertyChangedEventArgs>(); |
|
|
|
|
|
|
|
target.Foo = "foo"; |
|
|
|
target.Bar = "bar"; |
|
|
|
|
|
|
|
target.BeginBatchUpdate(); |
|
|
|
target.ClearValue(TestClass.FooProperty); |
|
|
|
target.ClearValue(TestClass.BarProperty); |
|
|
|
target.PropertyChanged += (sender, e) => |
|
|
|
{ |
|
|
|
if (e.Property == TestClass.BarProperty) |
|
|
|
{ |
|
|
|
target.BeginBatchUpdate(); |
|
|
|
target.EndBatchUpdate(); |
|
|
|
} |
|
|
|
|
|
|
|
++raised; |
|
|
|
}; |
|
|
|
target.EndBatchUpdate(); |
|
|
|
|
|
|
|
Assert.Null(target.Foo); |
|
|
|
Assert.Null(target.Bar); |
|
|
|
Assert.Equal(2, raised); |
|
|
|
} |
|
|
|
|
|
|
|
public class TestClass : AvaloniaObject |
|
|
|
{ |
|
|
|
public static readonly StyledProperty<string> FooProperty = |
|
|
|
|