Browse Source

Raised property changed when binding completes.

Fixes #3545
pull/3556/head
Steven Kirk 6 years ago
parent
commit
edc8bece4e
  1. 8
      src/Avalonia.Base/AvaloniaObject.cs
  2. 4
      src/Avalonia.Base/PropertyStore/BindingEntry.cs
  3. 5
      src/Avalonia.Base/PropertyStore/IValueSink.cs
  4. 5
      src/Avalonia.Base/PropertyStore/PriorityValue.cs
  5. 6
      src/Avalonia.Base/ValueStore.cs

8
src/Avalonia.Base/AvaloniaObject.cs

@ -478,7 +478,13 @@ namespace Avalonia
}
}
void IValueSink.Completed(AvaloniaProperty property, IPriorityValueEntry entry) { }
void IValueSink.Completed<T>(
StyledPropertyBase<T> property,
IPriorityValueEntry entry,
Optional<T> oldValue)
{
((IValueSink)this).ValueChanged(property, BindingPriority.Unset, oldValue, default);
}
/// <summary>
/// Called for each inherited property when the <see cref="InheritanceParent"/> changes.

4
src/Avalonia.Base/PropertyStore/BindingEntry.cs

@ -48,10 +48,10 @@ namespace Avalonia.PropertyStore
{
_subscription?.Dispose();
_subscription = null;
_sink.Completed(Property, this);
_sink.Completed(Property, this, Value);
}
public void OnCompleted() => _sink.Completed(Property, this);
public void OnCompleted() => _sink.Completed(Property, this, Value);
public void OnError(Exception error)
{

5
src/Avalonia.Base/PropertyStore/IValueSink.cs

@ -15,6 +15,9 @@ namespace Avalonia.PropertyStore
Optional<T> oldValue,
BindingValue<T> newValue);
void Completed(AvaloniaProperty property, IPriorityValueEntry entry);
void Completed<T>(
StyledPropertyBase<T> property,
IPriorityValueEntry entry,
Optional<T> oldValue);
}
}

5
src/Avalonia.Base/PropertyStore/PriorityValue.cs

@ -117,7 +117,10 @@ namespace Avalonia.PropertyStore
UpdateEffectiveValue();
}
void IValueSink.Completed(AvaloniaProperty property, IPriorityValueEntry entry)
void IValueSink.Completed<TValue>(
StyledPropertyBase<TValue> property,
IPriorityValueEntry entry,
Optional<TValue> oldValue)
{
_entries.Remove((IPriorityValueEntry<T>)entry);
UpdateEffectiveValue();

6
src/Avalonia.Base/ValueStore.cs

@ -190,13 +190,17 @@ namespace Avalonia
_sink.ValueChanged(property, priority, oldValue, newValue);
}
void IValueSink.Completed(AvaloniaProperty property, IPriorityValueEntry entry)
void IValueSink.Completed<T>(
StyledPropertyBase<T> property,
IPriorityValueEntry entry,
Optional<T> oldValue)
{
if (_values.TryGetValue(property, out var slot))
{
if (slot == entry)
{
_values.Remove(property);
_sink.Completed(property, entry, oldValue);
}
}
}

Loading…
Cancel
Save