|
|
@ -151,15 +151,18 @@ namespace Avalonia.Controls.Primitives |
|
|
{ |
|
|
{ |
|
|
if (_updateCount == 0) |
|
|
if (_updateCount == 0) |
|
|
{ |
|
|
{ |
|
|
var old = SelectedIndex; |
|
|
SetAndRaise(SelectedIndexProperty, (val, notifierWrapper) => |
|
|
var effective = (value >= 0 && value < Items?.Cast<object>().Count()) ? value : -1; |
|
|
|
|
|
|
|
|
|
|
|
if (old != effective) |
|
|
|
|
|
{ |
|
|
{ |
|
|
_selectedIndex = effective; |
|
|
var old = SelectedIndex; |
|
|
RaisePropertyChanged(SelectedIndexProperty, old, effective, BindingPriority.LocalValue); |
|
|
var effective = (val >= 0 && val < Items?.Cast<object>().Count()) ? val : -1; |
|
|
SelectedItem = ElementAt(Items, effective); |
|
|
|
|
|
} |
|
|
if (old != effective) |
|
|
|
|
|
{ |
|
|
|
|
|
_selectedIndex = effective; |
|
|
|
|
|
notifierWrapper(() => RaisePropertyChanged(SelectedIndexProperty, old, effective, BindingPriority.LocalValue)); |
|
|
|
|
|
SelectedItem = ElementAt(Items, effective); |
|
|
|
|
|
} |
|
|
|
|
|
}, value, val => SelectedIndex = val); |
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
@ -183,19 +186,17 @@ namespace Avalonia.Controls.Primitives |
|
|
{ |
|
|
{ |
|
|
if (_updateCount == 0) |
|
|
if (_updateCount == 0) |
|
|
{ |
|
|
{ |
|
|
if (!directDelayedSetter.IsNotifying(SelectedItemProperty)) |
|
|
SetAndRaise(SelectedItemProperty, (val, notifyWrapper) => |
|
|
{ |
|
|
{ |
|
|
var old = SelectedItem; |
|
|
var old = SelectedItem; |
|
|
var index = IndexOf(Items, value); |
|
|
var index = IndexOf(Items, val); |
|
|
var effective = index != -1 ? value : null; |
|
|
var effective = index != -1 ? val : null; |
|
|
|
|
|
|
|
|
if (!object.Equals(effective, old)) |
|
|
if (!object.Equals(effective, old)) |
|
|
{ |
|
|
{ |
|
|
_selectedItem = effective; |
|
|
_selectedItem = effective; |
|
|
using (directDelayedSetter.MarkNotifying(SelectedItemProperty)) |
|
|
|
|
|
{ |
|
|
notifyWrapper(() => RaisePropertyChanged(SelectedItemProperty, old, effective, BindingPriority.LocalValue)); |
|
|
RaisePropertyChanged(SelectedItemProperty, old, effective, BindingPriority.LocalValue); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
SelectedIndex = index; |
|
|
SelectedIndex = index; |
|
|
|
|
|
|
|
|
@ -213,17 +214,8 @@ namespace Avalonia.Controls.Primitives |
|
|
{ |
|
|
{ |
|
|
SelectedItems.Clear(); |
|
|
SelectedItems.Clear(); |
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
|
if (directDelayedSetter.HasPendingSet(SelectedItemProperty)) |
|
|
}, value, val => SelectedItem = val); |
|
|
{ |
|
|
|
|
|
SelectedItem = directDelayedSetter.GetFirstPendingSet(SelectedItemProperty); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
directDelayedSetter.AddPendingSet(SelectedItemProperty, value); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
|