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}";