From 0df0b640d416e6f80d995765fbb10e95446c0919 Mon Sep 17 00:00:00 2001 From: "sweep-ai[bot]" <128439645+sweep-ai[bot]@users.noreply.github.com> Date: Fri, 8 Mar 2024 21:22:45 +0000 Subject: [PATCH 1/2] feat: Updated src/Controls/src/Core/Picker/Picker. --- src/Controls/src/Core/Picker/Picker.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Controls/src/Core/Picker/Picker.cs b/src/Controls/src/Core/Picker/Picker.cs index 09f5f32201c5..1a4e895bfe22 100644 --- a/src/Controls/src/Core/Picker/Picker.cs +++ b/src/Controls/src/Core/Picker/Picker.cs @@ -232,8 +232,10 @@ string GetDisplayMember(object item) static object CoerceSelectedIndex(BindableObject bindable, object value) { - var picker = (Picker)bindable; - return picker.Items == null ? -1 : ((int)value).Clamp(-1, picker.Items.Count - 1); + var picker = (Picker)bindable; + if (picker.Items == null || !picker.Items.Any()) + return value; // Do not coerce if Items are not set yet + return ((int)value).Clamp(-1, picker.Items.Count - 1); } void OnItemDisplayBindingChanged(BindingBase oldValue, BindingBase newValue) From c84fc59c7670bd08f4687a83dcd05a29c20f6c0f Mon Sep 17 00:00:00 2001 From: "sweep-ai[bot]" <128439645+sweep-ai[bot]@users.noreply.github.com> Date: Fri, 8 Mar 2024 21:24:21 +0000 Subject: [PATCH 2/2] feat: Updated src/Controls/src/Xaml/XamlNode.cs --- src/Controls/src/Xaml/XamlNode.cs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/Controls/src/Xaml/XamlNode.cs b/src/Controls/src/Xaml/XamlNode.cs index 03c643012257..38c0bf053593 100644 --- a/src/Controls/src/Xaml/XamlNode.cs +++ b/src/Controls/src/Xaml/XamlNode.cs @@ -172,6 +172,21 @@ public ElementNode(XmlType type, string namespaceURI, IXmlNamespaceResolver name public NameScopeRef NameScopeRef { get; set; } public override void Accept(IXamlNodeVisitor visitor, INode parentNode) + Dictionary deferredProperties = new Dictionary(); + + public void DeferProperty(XmlName propertyName, object value) + { + deferredProperties[propertyName] = value; + } + + public void ApplyDeferredProperties() + { + foreach (var kvp in deferredProperties) + { + Properties[kvp.Key] = (INode)kvp.Value; + } + deferredProperties.Clear(); + } { if (visitor.VisitingMode == TreeVisitingMode.TopDown && !SkipVisitNode(visitor, parentNode)) visitor.Visit(this, parentNode); @@ -210,6 +225,19 @@ public override INode Clone() { var clone = new ElementNode(XmlType, NamespaceURI, NamespaceResolver, LineNumber, LinePosition) { + if (!SkipChildren(visitor, this, parentNode)) + { + // Check if ItemsSource or Items is being set and apply deferred SelectedIndex if any + if (Properties.ContainsKey(XmlName.xItemsSource) || Properties.ContainsKey(XmlName.xItems)) + { + ApplyDeferredProperties(); + } + + foreach (var node in Properties.Values.ToArray()) + node.Accept(visitor, this); + foreach (var node in CollectionItems.ToArray()) + node.Accept(visitor, this); + } IgnorablePrefixes = IgnorablePrefixes }; foreach (var kvp in Properties)