|
|
@ -40,6 +40,18 @@ namespace Avalonia.PropertyStore |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public PriorityValue( |
|
|
|
|
|
IAvaloniaObject owner, |
|
|
|
|
|
StyledPropertyBase<T> property, |
|
|
|
|
|
IValueSink sink, |
|
|
|
|
|
LocalValueEntry<T> existing) |
|
|
|
|
|
: this(owner, property, sink) |
|
|
|
|
|
{ |
|
|
|
|
|
_localValue = existing.Value; |
|
|
|
|
|
Value = _localValue; |
|
|
|
|
|
ValuePriority = BindingPriority.LocalValue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
public StyledPropertyBase<T> Property { get; } |
|
|
public StyledPropertyBase<T> Property { get; } |
|
|
public Optional<T> Value { get; private set; } |
|
|
public Optional<T> Value { get; private set; } |
|
|
public BindingPriority ValuePriority { get; private set; } |
|
|
public BindingPriority ValuePriority { get; private set; } |
|
|
@ -77,7 +89,11 @@ namespace Avalonia.PropertyStore |
|
|
Optional<TValue> oldValue, |
|
|
Optional<TValue> oldValue, |
|
|
BindingValue<TValue> newValue) |
|
|
BindingValue<TValue> newValue) |
|
|
{ |
|
|
{ |
|
|
_localValue = default; |
|
|
if (priority == BindingPriority.LocalValue) |
|
|
|
|
|
{ |
|
|
|
|
|
_localValue = default; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
UpdateEffectiveValue(); |
|
|
UpdateEffectiveValue(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -108,29 +124,37 @@ namespace Avalonia.PropertyStore |
|
|
var reachedLocalValues = false; |
|
|
var reachedLocalValues = false; |
|
|
var value = default(Optional<T>); |
|
|
var value = default(Optional<T>); |
|
|
|
|
|
|
|
|
for (var i = _entries.Count - 1; i >= 0; --i) |
|
|
if (_entries.Count > 0) |
|
|
{ |
|
|
{ |
|
|
var entry = _entries[i]; |
|
|
for (var i = _entries.Count - 1; i >= 0; --i) |
|
|
|
|
|
|
|
|
if (!reachedLocalValues && entry.Priority >= BindingPriority.LocalValue) |
|
|
|
|
|
{ |
|
|
{ |
|
|
reachedLocalValues = true; |
|
|
var entry = _entries[i]; |
|
|
|
|
|
|
|
|
if (_localValue.HasValue) |
|
|
if (!reachedLocalValues && entry.Priority >= BindingPriority.LocalValue) |
|
|
{ |
|
|
{ |
|
|
value = _localValue; |
|
|
reachedLocalValues = true; |
|
|
ValuePriority = BindingPriority.LocalValue; |
|
|
|
|
|
break; |
|
|
if (_localValue.HasValue) |
|
|
|
|
|
{ |
|
|
|
|
|
value = _localValue; |
|
|
|
|
|
ValuePriority = BindingPriority.LocalValue; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (entry.Value.HasValue) |
|
|
if (entry.Value.HasValue) |
|
|
{ |
|
|
{ |
|
|
value = entry.Value; |
|
|
value = entry.Value; |
|
|
ValuePriority = entry.Priority; |
|
|
ValuePriority = entry.Priority; |
|
|
break; |
|
|
break; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
else if (_localValue.HasValue) |
|
|
|
|
|
{ |
|
|
|
|
|
value = _localValue; |
|
|
|
|
|
ValuePriority = BindingPriority.LocalValue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if (value != Value) |
|
|
if (value != Value) |
|
|
{ |
|
|
{ |
|
|
|