From a59dd737435fa02e9742b3b907ea3ae1901be6ea Mon Sep 17 00:00:00 2001 From: devanathan-vaithiyanathan <114395405+devanathan-vaithiyanathan@users.noreply.github.com> Date: Mon, 22 Jun 2026 17:42:43 +0530 Subject: [PATCH 1/2] fix added --- src/Controls/src/Core/BindableObject.cs | 44 +++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/Controls/src/Core/BindableObject.cs b/src/Controls/src/Core/BindableObject.cs index e1b2d409257c..8cab0e9a9ea3 100644 --- a/src/Controls/src/Core/BindableObject.cs +++ b/src/Controls/src/Core/BindableObject.cs @@ -173,6 +173,50 @@ public object GetValue(BindableProperty property) return context == null ? property.DefaultValue : context.Values.GetValue(); } + internal LocalValueEnumerator GetLocalValueEnumerator() => new LocalValueEnumerator(this); + + internal sealed class LocalValueEnumerator : IEnumerator + { + Dictionary.ValueCollection.Enumerator _propertiesEnumerator; + internal LocalValueEnumerator(BindableObject bindableObject) => _propertiesEnumerator = bindableObject._properties.Values.GetEnumerator(); + + object IEnumerator.Current => Current; + public LocalValueEntry Current { get; private set; } + + public bool MoveNext() + { + if (_propertiesEnumerator.MoveNext()) + { + var context = _propertiesEnumerator.Current; + Current = new LocalValueEntry(context.Property, context.Values.GetValue(), context.Attributes); + return true; + } + return false; + } + + public void Dispose() => _propertiesEnumerator.Dispose(); + + void IEnumerator.Reset() + { + ((IEnumerator)_propertiesEnumerator).Reset(); + Current = null; + } + } + + internal sealed class LocalValueEntry + { + internal LocalValueEntry(BindableProperty property, object value, BindableContextAttributes attributes) + { + Property = property; + Value = value; + Attributes = attributes; + } + + public BindableProperty Property { get; } + public object Value { get; } + public BindableContextAttributes Attributes { get; } + } + internal (bool IsSet, T Value)[] GetValues(BindableProperty[] propArray) { var properties = _properties; From 30c796eb53f33a51a8d43de5c2af5182250f6448 Mon Sep 17 00:00:00 2001 From: Gerald Versluis Date: Wed, 24 Jun 2026 14:50:08 +0200 Subject: [PATCH 2/2] Add VS usage note for local value enumerator Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Controls/src/Core/BindableObject.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Controls/src/Core/BindableObject.cs b/src/Controls/src/Core/BindableObject.cs index 8cab0e9a9ea3..fc9dc7d8cefd 100644 --- a/src/Controls/src/Core/BindableObject.cs +++ b/src/Controls/src/Core/BindableObject.cs @@ -173,6 +173,7 @@ public object GetValue(BindableProperty property) return context == null ? property.DefaultValue : context.Values.GetValue(); } + // Used by Visual Studio Live Property Explorer via reflection; do not remove without coordinating with VS. internal LocalValueEnumerator GetLocalValueEnumerator() => new LocalValueEnumerator(this); internal sealed class LocalValueEnumerator : IEnumerator