Browse Source

fix(ExpressionNode): ensure _subscriber do not change during ValueChanged

pull/8167/head
Giuseppe Lippolis 4 years ago
parent
commit
4845c10d88
  1. 46
      src/Avalonia.Base/Data/Core/ExpressionNode.cs

46
src/Avalonia.Base/Data/Core/ExpressionNode.cs

@ -98,36 +98,36 @@ namespace Avalonia.Data.Core
private void ValueChanged(object? value, bool notify) private void ValueChanged(object? value, bool notify)
{ {
if (_subscriber is null) if (_subscriber is { } subscriber)
return;
var notification = value as BindingNotification;
if (notification == null)
{ {
LastValue = value != null ? new WeakReference<object?>(value) : NullReference; var notification = value as BindingNotification;
var next = Next;
if (Next != null) if (notification == null)
{ {
Next.Target = LastValue; LastValue = value != null ? new WeakReference<object?>(value) : NullReference;
if (next != null)
{
next.Target = LastValue;
}
else if (notify)
{
subscriber(value);
}
} }
else if (notify) else
{ {
_subscriber(value); LastValue = notification.Value != null ? new WeakReference<object?>(notification.Value) : NullReference;
}
}
else
{
LastValue = notification.Value != null ? new WeakReference<object?>(notification.Value) : NullReference;
if (Next != null) if (next != null)
{ {
Next.Target = LastValue; next.Target = LastValue;
} }
if (Next == null || notification.Error != null) if (next == null || notification.Error != null)
{ {
_subscriber(value); subscriber(value);
}
} }
} }
} }

Loading…
Cancel
Save