diff --git a/src/Controls/src/Core/Element/Element.cs b/src/Controls/src/Core/Element/Element.cs index 03bcc445406b..43ec063d9047 100644 --- a/src/Controls/src/Core/Element/Element.cs +++ b/src/Controls/src/Core/Element/Element.cs @@ -641,8 +641,14 @@ private protected override void OnBindablePropertySet(BindableProperty property, base.OnBindablePropertySet(property, original, value, changed, willFirePropertyChanged); _pendingHandlerUpdatesFromBPSet.Remove(property.PropertyName); - UpdateHandlerValue(property.PropertyName, changed); + var specificity = GetContext(property).Values.GetSpecificity(); + if (specificity == SetterSpecificity.FromHandler) + { + return; + } + + UpdateHandlerValue(property.PropertyName, changed); } /// Method that is called when a bound property is changed. diff --git a/src/Controls/src/Core/Handlers/Items/SelectableItemsViewHandler.Windows.cs b/src/Controls/src/Core/Handlers/Items/SelectableItemsViewHandler.Windows.cs index 6ba7d01d4dbc..94f521efd376 100644 --- a/src/Controls/src/Core/Handlers/Items/SelectableItemsViewHandler.Windows.cs +++ b/src/Controls/src/Core/Handlers/Items/SelectableItemsViewHandler.Windows.cs @@ -181,7 +181,8 @@ void UpdateVirtualSingleSelection() if (ItemsView != null) { _ignoreVirtualSelectionChange = true; - ItemsView.SelectedItem = selectedItem; + ItemsView.SetValueFromRenderer(SelectableItemsView.SelectedItemProperty, selectedItem); + _ignoreVirtualSelectionChange = false; } diff --git a/src/Controls/src/Core/Handlers/Items/iOS/SelectableItemsViewController.cs b/src/Controls/src/Core/Handlers/Items/iOS/SelectableItemsViewController.cs index 2f83951b2dcf..416fa647293d 100644 --- a/src/Controls/src/Core/Handlers/Items/iOS/SelectableItemsViewController.cs +++ b/src/Controls/src/Core/Handlers/Items/iOS/SelectableItemsViewController.cs @@ -87,7 +87,8 @@ void FormsSelectItem(NSIndexPath indexPath) case SelectionMode.None: break; case SelectionMode.Single: - ItemsView.SelectedItem = GetItemAtIndex(indexPath); + var item = GetItemAtIndex(indexPath); + ItemsView.SetValueFromRenderer(SelectableItemsView.SelectedItemsProperty,item); break; case SelectionMode.Multiple: ItemsView.SelectedItems.Add(GetItemAtIndex(indexPath)); diff --git a/src/Controls/src/Core/Handlers/Items2/iOS/SelectableItemsViewController2.cs b/src/Controls/src/Core/Handlers/Items2/iOS/SelectableItemsViewController2.cs index a806cbaa2d54..6742477ee452 100644 --- a/src/Controls/src/Core/Handlers/Items2/iOS/SelectableItemsViewController2.cs +++ b/src/Controls/src/Core/Handlers/Items2/iOS/SelectableItemsViewController2.cs @@ -87,7 +87,8 @@ void FormsSelectItem(NSIndexPath indexPath) case SelectionMode.None: break; case SelectionMode.Single: - ItemsView.SelectedItem = GetItemAtIndex(indexPath); + var item = GetItemAtIndex(indexPath); + ItemsView.SetValueFromRenderer(SelectableItemsView.SelectedItemsProperty,item); break; case SelectionMode.Multiple: ItemsView.SelectedItems.Add(GetItemAtIndex(indexPath)); diff --git a/src/Controls/src/Core/Slider/Slider.cs b/src/Controls/src/Core/Slider/Slider.cs index 5575636cf511..74f77a17da1e 100644 --- a/src/Controls/src/Core/Slider/Slider.cs +++ b/src/Controls/src/Core/Slider/Slider.cs @@ -145,6 +145,12 @@ public double Value set { SetValue(ValueProperty, value); } } + double IRange.Value + { + get => Value; + set => SetValue(ValueProperty, value, SetterSpecificity.FromHandler); + } + public event EventHandler ValueChanged; public event EventHandler DragStarted; public event EventHandler DragCompleted; diff --git a/src/Controls/src/Core/Stepper/Stepper.cs b/src/Controls/src/Core/Stepper/Stepper.cs index 4c649b298fc2..36fc09923f3a 100644 --- a/src/Controls/src/Core/Stepper/Stepper.cs +++ b/src/Controls/src/Core/Stepper/Stepper.cs @@ -110,6 +110,12 @@ public double Value double IStepper.Interval => Increment; + double IRange.Value + { + get => Value; + set => SetValue(ValueProperty, value, SetterSpecificity.FromHandler); + } + private protected override string GetDebuggerDisplay() { return $"{base.GetDebuggerDisplay()}, Value = {Value}";