Fix Picker SelectedIndex deferred initialization#35629
Conversation
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## What Restrict the agentic-labeler to apply **exactly one `area-*` label** per item, while still allowing multiple `platform/*` labels. ## Why Backfilling the 26 items affected by the `max:1` bug (fixed in dotnet#35540) revealed that the labeler occasionally applies multiple `area-*` labels for ambiguous cases: - **dotnet#35501** got both `area-layout` and `area-safearea` - **dotnet#35490** got both `area-navigation` and `area-controls-tabbedpage` The intended behavior is exactly one best-fit `area-*` per item (a label-quota distinction not expressible via `safe-outputs.add-labels.max:` — that field counts total labels, not labels per prefix). The fix has to live in the agent's instructions. ## Changes ### `.github/skills/agentic-labeler/SKILL.md` - Scope section: "Exactly one `area-*`" / "One or more `platform/*`". - Area rules section: renamed heading, changed "pick one or more" → "apply exactly one". - New **tie-breaking heuristics** for the area-* selection: - Specific control beats generic area (`area-controls-tabbedpage` over `area-navigation`) - Sub-area beats parent area (`area-safearea` over `area-layout`) - Subject-matter focus beats incidental touch - When genuinely tied, prefer the user-visible feature - Mixed-PR rule clarified: infra-primary PRs get only `area-infrastructure` (no second product area). ### `.github/workflows/agentic-labeler.md` - Added explicit reinforcement in the workflow prompt: "Apply exactly one `area-*` label … and one or more `platform/*` labels". - Fixed two stale `max: 1` comments left over from dotnet#35540 (the cap is now `max: 10`). ### `.github/workflows/agentic-labeler.lock.yml` - Regenerated via `gh aw compile`. Diff is frontmatter-hash + heredoc rotations only — no semantic change to the compiled config. ## Validation - Reviewed all 21 existing eval scenarios in `tests/eval.yaml` — none assert multiple `area-*` labels, so no test updates needed. - The `max: 10` cap in `safe-outputs` is preserved as a blast-radius safeguard (one area + several platforms still fit comfortably). ## Follow-ups (not in this PR) If accuracy of the "one area" rule drops below ~95% in eval runs, consider adding a deterministic post-step that strips extra `area-*` labels per a known precedence list (Option B from the design discussion). Co-authored-by: bot <bot@test> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
## Description
Extends the `maui-copilot` DevDiv pipeline (pipeline 27723) with a
3-stage architecture that runs real UI tests on platform-pool agents and
reports results directly in the AI summary PR comment.
### Pipeline Workflow
```
┌─────────────────────────────────────────────────────────┐
│ Stage 1: ReviewPR │
│ │
│ STEP 1: Branch Setup (checkout + cherry-pick PR) │
│ STEP 2: Detect UI Test Categories │
│ STEP 3: Run Detected UI Tests (in-process, fast) │
│ STEP 4: Regression Cross-Reference │
│ STEP 5: Gate — verify tests fail/pass before/after fix │
│ STEP 6: Code Review — deep analysis via Copilot agent │
│ │
│ Outputs → CopilotLogs artifact + detectedCategories │
└──────────────────────┬──────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────┐
│ Stage 2: RunDeepUITests (platform-pool agent) │
│ │
│ iOS: AcesShared Tahoe + iOS 26.4 │
│ Android: ubuntu-22.04 + KVM + AVD │
│ │
│ Runs BuildAndRunHostApp.ps1 per detected category │
│ Outputs → drop-deep-uitests artifact (TRX + diffs) │
└──────────────────────┬──────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────┐
│ Stage 3: PostResults │
│ │
│ 1. Download CopilotLogs (review content files) │
│ 2. Download drop-deep-uitests (TRX results) │
│ 3. Merge deep results into uitests/content.md │
│ 4. Post full AI Summary comment on PR │
│ 5. Apply labels (s/agent-reviewed, etc.) │
│ │
│ One comment with everything — no patching needed │
└─────────────────────────────────────────────────────────┘
```
### What's New
**Deep UI Test Execution (Stage 2)**
- Runs detected UI test categories on proper platform-pool agents (not
in-process on Linux)
- **iOS**: AcesShared Tahoe agents with iOS 26.4 simulator, iPhone 11
Pro (matching `ios-26` baselines from PR dotnet#35061)
- **Android**: ubuntu-22.04 with KVM, AVD boot with `-partition-size
2048`, `ignoreHiddenApiPolicyError` capability
- TRX results + snapshot-diff PNGs published as `drop-deep-uitests`
artifact
**Unified Comment Posting (Stage 3)**
- Comment posting and label application deferred to Stage 3 (after deep
tests complete)
- Single AI summary comment includes ALL results: code review + deep
test results
- Nested collapsible `<details>` for failed tests with full error +
stack trace
- Dynamic section title: `🧪 UI Tests — CollectionView, TabbedPage`
- Artifact download link for snapshot-diff PNGs
**Android Emulator Improvements**
- AVD boot step with proper partition size, ADB key pre-authorization,
boot wait
- `DEVICE_UDID` pass-through prevents double emulator boot
- Disk cleanup on hosted ubuntu agents (frees ~22GB)
- KVM enablement + `appium:ignoreHiddenApiPolicyError` for API 30
**iOS Simulator Improvements**
- Tahoe pool demand ensures macOS 26.x agents
- Explicit iOS 26.4 download via latest Xcode
- Auto-creates iPhone 11 Pro for baseline resolution match
### Validation
Tested across 30+ pipeline iterations on 6 PRs:
| PR | iOS | Android |
|---|---|---|
| 35358 (ViewBaseTests) | **112/112 ALL PASS** ✅ | **118/119 PASS** ✅ |
| 35359 (TabbedPage) | 44/50 (1 real failure) | 74/75 (1 real failure) |
| 35356 (CollectionView) | **415/417 PASS** ✅ | 593/619 (26 real
failures) |
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…35589) > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! Backport of dotnet#35460 to `main`. /cc @PureWeen Co-authored-by: HarishKumarSF4517 <harish.kumar@syncfusion.com>
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 35629Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35629" |
There was a problem hiding this comment.
Pull request overview
This PR fixes Picker.SelectedIndex when it’s set before the picker has items available (e.g., XAML sets SelectedIndex before ItemsSource/Items are populated). It preserves the requested index while Items is empty (keeping the public SelectedIndex coerced to -1), then applies the pending selection once items are available, updating SelectedItem without raising SelectedIndexChanged.
Changes:
- Add pending
SelectedIndexstorage and deferred-apply logic toPicker, including suppression ofSelectedIndexChangedduring deferred initialization. - Add core unit tests validating deferred selection behavior across
ItemsSource, inlineItems, clamping, and clearing. - Add XAML unit test + HostApp/UI test coverage for both
ItemsSourceand inlinePicker.Itemsinitialization paths.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| src/Controls/src/Core/Picker/Picker.cs | Implements pending selected-index tracking, deferred apply, and event suppression during deferred initialization. |
| src/Controls/tests/Core.UnitTests/PickerTests.cs | Adds unit tests covering deferred initialization, clamping, and “no event during deferred apply” expectations. |
| src/Controls/tests/Xaml.UnitTests/Issues/Maui9150.xaml | Adds XAML repro for SelectedIndex set before ItemsSource / inline items exist. |
| src/Controls/tests/Xaml.UnitTests/Issues/Maui9150.xaml.cs | Adds XAML unit tests validating the deferred selection behavior and event suppression during construction. |
| src/Controls/tests/TestCases.HostApp/Issues/Issue9150.xaml | Adds HostApp repro UI with automation IDs for UI validation. |
| src/Controls/tests/TestCases.HostApp/Issues/Issue9150.xaml.cs | Implements runtime “Passed/Failed” status evaluation for selection + event count. |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue9150.cs | Adds Appium UI regression test asserting the HostApp status is “Passed”. |
|
/review -b feature/refactor-copilot-yml -p ios |
|
/review -b feature/refactor-copilot-yml -p ios |
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 1 findings
See inline comments for details.
|
/review -b feature/refactor-copilot-yml |
|
/azp run maui-pr-uitests |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
/review -b feature/refactor-copilot-yml -p windows |
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 1 findings
See inline comments for details.
|
|
||
| var selectedIndex = pendingSelectedIndex.Clamp(-1, Items.Count - 1); | ||
| var oldSuppressSelectedIndexChanged = _suppressSelectedIndexChanged; | ||
| _suppressSelectedIndexChanged = true; |
There was a problem hiding this comment.
[warning] Deferred selection suppresses SelectedIndexChanged outside construction TryApplyPendingSelectedIndex applies a pending index with _suppressSelectedIndexChanged = true unconditionally. That avoids XAML construction-time events, but it also means an already-displayed Picker with an empty observable ItemsSource can transition from SelectedIndex == -1 to the pending index when the collection is later populated without notifying SelectedIndexChanged subscribers. If suppression is only needed for construction compatibility, consider scoping it more narrowly or confirming this event semantic explicitly.
This comment has been minimized.
This comment has been minimized.
kubaflo
left a comment
There was a problem hiding this comment.
AI Review Summary
@AdamEssenmacher — new AI review results are available based on this last commit:
80d2c05.
Fix stale picker pending selection
Review Sessions — click to expand
Gate — Test Before & After Fix
Gate Result: ✅ PASSED
Platform: WINDOWS · Base: main · Merge base: b0ea772f
| Test | Without Fix (expect FAIL) | With Fix (expect PASS) |
|---|---|---|
🖥️ Issue9150 Issue9150 |
✅ FAIL — 568s | ✅ PASS — 487s |
🧪 PickerTests PickerTests |
✅ FAIL — 47s | ✅ PASS — 42s |
📄 Maui9150 Maui9150 |
✅ FAIL — 122s | ✅ PASS — 113s |
🔴 Without fix — 🖥️ Issue9150: FAIL ✅ · 568s
Determining projects to restore...
Restored D:\a\1\s\src\Graphics\src\Graphics\Graphics.csproj (in 20.97 sec).
Restored D:\a\1\s\src\Graphics\src\Graphics.Win2D\Graphics.Win2D.csproj (in 21.05 sec).
Restored D:\a\1\s\src\Essentials\src\Essentials.csproj (in 7.75 sec).
Restored D:\a\1\s\src\Core\src\Core.csproj (in 15.48 sec).
Restored D:\a\1\s\src\Core\maps\src\Maps.csproj (in 14.38 sec).
Restored D:\a\1\s\src\Controls\tests\TestCases.HostApp\Controls.TestCases.HostApp.csproj (in 7.63 sec).
Restored D:\a\1\s\src\Controls\src\Core\Controls.Core.csproj (in 36 ms).
Restored D:\a\1\s\src\Controls\src\Xaml\Controls.Xaml.csproj (in 50 ms).
Restored D:\a\1\s\src\Controls\Maps\src\Controls.Maps.csproj (in 12 ms).
Restored D:\a\1\s\src\Controls\Foldable\src\Controls.Foldable.csproj (in 15 ms).
Restored D:\a\1\s\src\BlazorWebView\src\Maui\Microsoft.AspNetCore.Components.WebView.Maui.csproj (in 17 ms).
3 of 14 projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Graphics -> D:\a\1\s\artifacts\bin\Graphics\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Essentials -> D:\a\1\s\artifacts\bin\Essentials\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Graphics.Win2D -> D:\a\1\s\artifacts\bin\Graphics.Win2D\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Graphics.Win2D.WinUI.Desktop.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Core -> D:\a\1\s\artifacts\bin\Core\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Maps -> D:\a\1\s\artifacts\bin\Maps\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Maps.dll
Controls.BindingSourceGen -> D:\a\1\s\artifacts\bin\Controls.BindingSourceGen\Debug\netstandard2.0\Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Controls.Core -> D:\a\1\s\artifacts\bin\Controls.Core\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Controls.Maps -> D:\a\1\s\artifacts\bin\Controls.Maps\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Maps.dll
Controls.Foldable -> D:\a\1\s\artifacts\bin\Controls.Foldable\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Foldable.dll
Controls.Xaml -> D:\a\1\s\artifacts\bin\Controls.Xaml\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Xaml.dll
Microsoft.AspNetCore.Components.WebView.Maui -> D:\a\1\s\artifacts\bin\Microsoft.AspNetCore.Components.WebView.Maui\Debug\net10.0-windows10.0.19041.0\Microsoft.AspNetCore.Components.WebView.Maui.dll
Controls.TestCases.HostApp -> D:\a\1\s\artifacts\bin\Controls.TestCases.HostApp\Debug\net10.0-windows10.0.19041.0\win-x64\Controls.TestCases.HostApp.dll
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:06:03.55
Determining projects to restore...
Restored D:\a\1\s\src\Controls\tests\CustomAttributes\Controls.CustomAttributes.csproj (in 732 ms).
Restored D:\a\1\s\src\TestUtils\src\VisualTestUtils\VisualTestUtils.csproj (in 4 ms).
Restored D:\a\1\s\src\TestUtils\src\VisualTestUtils.MagickNet\VisualTestUtils.MagickNet.csproj (in 6.12 sec).
Restored D:\a\1\s\src\Controls\tests\TestCases.WinUI.Tests\Controls.TestCases.WinUI.Tests.csproj (in 8.71 sec).
Restored D:\a\1\s\src\TestUtils\src\UITest.Core\UITest.Core.csproj (in 2 ms).
Restored D:\a\1\s\src\TestUtils\src\UITest.Appium\UITest.Appium.csproj (in 2 ms).
Restored D:\a\1\s\src\TestUtils\src\UITest.NUnit\UITest.NUnit.csproj (in 2.85 sec).
Restored D:\a\1\s\src\TestUtils\src\UITest.Analyzers\UITest.Analyzers.csproj (in 6.09 sec).
7 of 15 projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Graphics -> D:\a\1\s\artifacts\bin\Graphics\Debug\net10.0\Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Essentials -> D:\a\1\s\artifacts\bin\Essentials\Debug\net10.0\Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Controls.CustomAttributes -> D:\a\1\s\artifacts\bin\Controls.CustomAttributes\Debug\net10.0\Controls.CustomAttributes.dll
Core -> D:\a\1\s\artifacts\bin\Core\Debug\net10.0\Microsoft.Maui.dll
Controls.Core.Design -> D:\a\1\s\artifacts\bin\Controls.Core.Design\Debug\net472\Microsoft.Maui.Controls.DesignTools.dll
Controls.BindingSourceGen -> D:\a\1\s\artifacts\bin\Controls.BindingSourceGen\Debug\netstandard2.0\Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Controls.Core -> D:\a\1\s\artifacts\bin\Controls.Core\Debug\net10.0\Microsoft.Maui.Controls.dll
UITest.Core -> D:\a\1\s\artifacts\bin\UITest.Core\Debug\net10.0\UITest.Core.dll
UITest.Appium -> D:\a\1\s\artifacts\bin\UITest.Appium\Debug\net10.0\UITest.Appium.dll
UITest.NUnit -> D:\a\1\s\artifacts\bin\UITest.NUnit\Debug\net10.0\UITest.NUnit.dll
VisualTestUtils -> D:\a\1\s\artifacts\bin\VisualTestUtils\Debug\netstandard2.0\VisualTestUtils.dll
VisualTestUtils.MagickNet -> D:\a\1\s\artifacts\bin\VisualTestUtils.MagickNet\Debug\netstandard2.0\VisualTestUtils.MagickNet.dll
UITest.Analyzers -> D:\a\1\s\artifacts\bin\UITest.Analyzers\Debug\netstandard2.0\UITest.Analyzers.dll
Controls.TestCases.WinUI.Tests -> D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll
Test run for D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll
NUnit3TestExecutor discovered 1 of 1 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 5/30/2026 11:38:09 AM FixtureSetup for Issue9150(Windows)
>>>>> 5/30/2026 11:38:19 AM PickerSelectedIndexSetBeforeItemsInitializesSelection Start
>>>>> 5/30/2026 11:38:20 AM PickerSelectedIndexSetBeforeItemsInitializesSelection Stop
>>>>> 5/30/2026 11:38:20 AM Log types:
Failed PickerSelectedIndexSetBeforeItemsInitializesSelection [1 s]
Error Message:
Assert.That(App.WaitForElement("StatusLabel").GetText(), Is.EqualTo("Passed"))
Expected string length 6 but was 51. Strings differ at index 0.
Expected: "Passed"
But was: "Failed: ItemsSource=(-1, ), Inline=(-1, ), Events=0"
-----------^
Stack Trace:
at Microsoft.Maui.TestCases.Tests.Issues.Issue9150.PickerSelectedIndexSetBeforeItemsInitializesSelection() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue9150.cs:line 19
1) at Microsoft.Maui.TestCases.Tests.Issues.Issue9150.PickerSelectedIndexSetBeforeItemsInitializesSelection() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue9150.cs:line 19
NUnit Adapter 4.5.0.0: Test execution complete
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.13] Discovering: Controls.TestCases.WinUI.Tests
[xUnit.net 00:00:00.42] Discovered: Controls.TestCases.WinUI.Tests
Results File: D:\a\1\s\CustomAgentLogsTmp\UITests\TestResults\Issue9150.trx
Total tests: 1
Failed: 1
Test Run Failed.
Total time: 30.8337 Seconds
>>> TRX_RESULT_FILE: D:\a\1\s\CustomAgentLogsTmp\UITests\TestResults\Issue9150.trx
🟢 With fix — 🖥️ Issue9150: PASS ✅ · 487s
Determining projects to restore...
All projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Graphics -> D:\a\1\s\artifacts\bin\Graphics\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Essentials -> D:\a\1\s\artifacts\bin\Essentials\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Essentials.dll
Graphics.Win2D -> D:\a\1\s\artifacts\bin\Graphics.Win2D\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Graphics.Win2D.WinUI.Desktop.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Core -> D:\a\1\s\artifacts\bin\Core\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Controls.BindingSourceGen -> D:\a\1\s\artifacts\bin\Controls.BindingSourceGen\Debug\netstandard2.0\Microsoft.Maui.Controls.BindingSourceGen.dll
Maps -> D:\a\1\s\artifacts\bin\Maps\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Maps.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Controls.Core -> D:\a\1\s\artifacts\bin\Controls.Core\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Controls.Maps -> D:\a\1\s\artifacts\bin\Controls.Maps\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Maps.dll
Controls.Xaml -> D:\a\1\s\artifacts\bin\Controls.Xaml\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Xaml.dll
Controls.Foldable -> D:\a\1\s\artifacts\bin\Controls.Foldable\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Foldable.dll
Microsoft.AspNetCore.Components.WebView.Maui -> D:\a\1\s\artifacts\bin\Microsoft.AspNetCore.Components.WebView.Maui\Debug\net10.0-windows10.0.19041.0\Microsoft.AspNetCore.Components.WebView.Maui.dll
Controls.TestCases.HostApp -> D:\a\1\s\artifacts\bin\Controls.TestCases.HostApp\Debug\net10.0-windows10.0.19041.0\win-x64\Controls.TestCases.HostApp.dll
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:05:58.54
Determining projects to restore...
All projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Graphics -> D:\a\1\s\artifacts\bin\Graphics\Debug\net10.0\Microsoft.Maui.Graphics.dll
Controls.CustomAttributes -> D:\a\1\s\artifacts\bin\Controls.CustomAttributes\Debug\net10.0\Controls.CustomAttributes.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Essentials -> D:\a\1\s\artifacts\bin\Essentials\Debug\net10.0\Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Core -> D:\a\1\s\artifacts\bin\Core\Debug\net10.0\Microsoft.Maui.dll
Controls.Core.Design -> D:\a\1\s\artifacts\bin\Controls.Core.Design\Debug\net472\Microsoft.Maui.Controls.DesignTools.dll
Controls.BindingSourceGen -> D:\a\1\s\artifacts\bin\Controls.BindingSourceGen\Debug\netstandard2.0\Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Controls.Core -> D:\a\1\s\artifacts\bin\Controls.Core\Debug\net10.0\Microsoft.Maui.Controls.dll
UITest.Core -> D:\a\1\s\artifacts\bin\UITest.Core\Debug\net10.0\UITest.Core.dll
UITest.Appium -> D:\a\1\s\artifacts\bin\UITest.Appium\Debug\net10.0\UITest.Appium.dll
VisualTestUtils -> D:\a\1\s\artifacts\bin\VisualTestUtils\Debug\netstandard2.0\VisualTestUtils.dll
VisualTestUtils.MagickNet -> D:\a\1\s\artifacts\bin\VisualTestUtils.MagickNet\Debug\netstandard2.0\VisualTestUtils.MagickNet.dll
UITest.NUnit -> D:\a\1\s\artifacts\bin\UITest.NUnit\Debug\net10.0\UITest.NUnit.dll
UITest.Analyzers -> D:\a\1\s\artifacts\bin\UITest.Analyzers\Debug\netstandard2.0\UITest.Analyzers.dll
Controls.TestCases.WinUI.Tests -> D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll
Test run for D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll
NUnit3TestExecutor discovered 1 of 1 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 5/30/2026 11:49:07 AM FixtureSetup for Issue9150(Windows)
>>>>> 5/30/2026 11:49:16 AM PickerSelectedIndexSetBeforeItemsInitializesSelection Start
>>>>> 5/30/2026 11:49:17 AM PickerSelectedIndexSetBeforeItemsInitializesSelection Stop
Passed PickerSelectedIndexSetBeforeItemsInitializesSelection [983 ms]
NUnit Adapter 4.5.0.0: Test execution complete
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.12] Discovering: Controls.TestCases.WinUI.Tests
[xUnit.net 00:00:00.33] Discovered: Controls.TestCases.WinUI.Tests
Results File: D:\a\1\s\CustomAgentLogsTmp\UITests\TestResults\Issue9150.trx
Test Run Successful.
Total tests: 1
Passed: 1
Total time: 24.5933 Seconds
>>> TRX_RESULT_FILE: D:\a\1\s\CustomAgentLogsTmp\UITests\TestResults\Issue9150.trx
🔴 Without fix — 🧪 PickerTests: FAIL ✅ · 47s
Determining projects to restore...
Restored D:\a\1\s\src\TestUtils\src\TestUtils\TestUtils.csproj (in 897 ms).
Restored D:\a\1\s\src\Controls\tests\Core.UnitTests\Controls.Core.UnitTests.csproj (in 1.52 sec).
11 of 13 projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Graphics -> D:\a\1\s\artifacts\bin\Graphics\Debug\net10.0\Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Essentials -> D:\a\1\s\artifacts\bin\Essentials\Debug\net10.0\Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Core -> D:\a\1\s\artifacts\bin\Core\Debug\net10.0\Microsoft.Maui.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Maps -> D:\a\1\s\artifacts\bin\Maps\Debug\net10.0\Microsoft.Maui.Maps.dll
Controls.Core.Design -> D:\a\1\s\artifacts\bin\Controls.Core.Design\Debug\net472\Microsoft.Maui.Controls.DesignTools.dll
Controls.BindingSourceGen -> D:\a\1\s\artifacts\bin\Controls.BindingSourceGen\Debug\netstandard2.0\Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Controls.Core -> D:\a\1\s\artifacts\bin\Controls.Core\Debug\net10.0\Microsoft.Maui.Controls.dll
Controls.Xaml.Design -> D:\a\1\s\artifacts\bin\Controls.Xaml.Design\Debug\net472\Microsoft.Maui.Controls.Xaml.DesignTools.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Controls.Xaml -> D:\a\1\s\artifacts\bin\Controls.Xaml\Debug\net10.0\Microsoft.Maui.Controls.Xaml.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Controls.Maps -> D:\a\1\s\artifacts\bin\Controls.Maps\Debug\net10.0\Microsoft.Maui.Controls.Maps.dll
TestUtils -> D:\a\1\s\artifacts\bin\TestUtils\Debug\netstandard2.0\Microsoft.Maui.TestUtils.dll
Controls.Core.UnitTests -> D:\a\1\s\artifacts\bin\Controls.Core.UnitTests\Debug\net10.0\Microsoft.Maui.Controls.Core.UnitTests.dll
Test run for D:\a\1\s\artifacts\bin\Controls.Core.UnitTests\Debug\net10.0\Microsoft.Maui.Controls.Core.UnitTests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.20] Discovering: Microsoft.Maui.Controls.Core.UnitTests
[xUnit.net 00:00:01.96] Discovered: Microsoft.Maui.Controls.Core.UnitTests
[xUnit.net 00:00:01.98] Starting: Microsoft.Maui.Controls.Core.UnitTests
[xUnit.net 00:00:02.09] SelectedIndexSetBeforeEmptyItemsSourceAppliesWhenIndexBecomesValid [FAIL]
[xUnit.net 00:00:02.09] Assert.Equal() Failure: Values differ
[xUnit.net 00:00:02.09] Expected: 2
[xUnit.net 00:00:02.09] Actual: -1
[xUnit.net 00:00:02.09] Stack Trace:
[xUnit.net 00:00:02.09] /_/src/Controls/tests/Core.UnitTests/PickerTests.cs(296,0): at Microsoft.Maui.Controls.Core.UnitTests.PickerTests.SelectedIndexSetBeforeEmptyItemsSourceAppliesWhenIndexBecomesValid()
[xUnit.net 00:00:02.09] at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
[xUnit.net 00:00:02.09] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Passed NullItemReturnsEmptyStringFromInterface [17 ms]
Failed SelectedIndexSetBeforeEmptyItemsSourceAppliesWhenIndexBecomesValid [8 ms]
Error Message:
Assert.Equal() Failure: Values differ
Expected: 2
Actual: -1
Stack Trace:
at Microsoft.Maui.Controls.Core.UnitTests.PickerTests.SelectedIndexSetBeforeEmptyItemsSourceAppliesWhenIndexBecomesValid() in /_/src/Controls/tests/Core.UnitTests/PickerTests.cs:line 296
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Passed TestItemsSourceCollectionChangedInsertBeforeSelected(insertionIndex: 0, insertNames: ["George", "Pete"]) [16 ms]
Passed TestItemsSourceCollectionChangedInsertBeforeSelected(insertionIndex: 2, insertNames: ["George"]) [< 1 ms]
Passed TestItemsSourceCollectionChangedInsertBeforeSelected(insertionIndex: 1, insertNames: ["George"]) [< 1 ms]
Passed TestItemsSourceCollectionChangedInsertBeforeSelected(insertionIndex: 1, insertNames: ["George", "Pete"]) [< 1 ms]
Passed TestItemsSourceCollectionChangedInsertBeforeSelected(insertionIndex: 2, insertNames: ["George", "Pete"]) [< 1 ms]
Passed TestItemsSourceCollectionChangedInsertBeforeSelected(insertionIndex: 3, insertNames: ["George"]) [< 1 ms]
Passed TestItemsSourceCollectionChangedInsertBeforeSelected(insertionIndex: 0, insertNames: ["George"]) [< 1 ms]
Passed TestItemsSourceCollectionChangedInsertBeforeSelected(insertionIndex: 3, insertNames: ["George", "Pete"]) [< 1 ms]
Passed TestSelectedIndexAssignedItemsSourceCollectionChangedInsert [2 ms]
Passed TestItemsSourceCollectionChangedReAssign [6 ms]
Passed TestItemsSourceCollectionOfStrings [< 1 ms]
Passed TestItemsSourceCollectionChangedRemoveBeforeSelected(removeIndex: 1, removeCount: 2, selectedItemPreserved: False) [4 ms]
Passed TestItemsSourceCollectionChangedRemoveBeforeSelected(removeIndex: 2, removeCount: 1, selectedItemPreserved: True) [< 1 ms]
Passed TestItemsSourceCollectionChangedRemoveBeforeSelected(removeIndex: 0, removeCount: 2, selectedItemPreserved: False) [< 1 ms]
Passed TestItemsSourceCollectionChangedRemoveBeforeSelected(removeIndex: 1, removeCount: 1, selectedItemPreserved: False) [< 1 ms]
Passed TestItemsSourceCollectionChangedRemoveBeforeSelected(removeIndex: 0, removeCount: 1, selectedItemPreserved: True) [< 1 ms]
Passed TestItemsSourceCollectionChangedRemoveBeforeSelected(removeIndex: 2, removeCount: 2, selectedItemPreserved: True) [< 1 ms]
Passed TestSelectedIndexChangedOnCollectionShrink [1 ms]
Passed TestSelectedIndexOutOfRangeUpdatesSelectedItem [< 1 ms]
Passed TestDisplayConverter [1 ms]
Passed PickerPreservesSelectedItemAfterRemovingItemBeforeSelection [< 1 ms]
Passed TestSelectedIndexInRange [< 1 ms]
Passed TestSelectedItemSet [3 ms]
Passed TestSelectedIndexAssignedItemsSourceCollectionChangedReAssign [< 1 ms]
Passed TestSelectedIndexAssignedItemsSourceCollectionChangedClear [1 ms]
[xUnit.net 00:00:02.15] SelectedIndexSetBeforeInlineItemsSurvivesParentSetUntilIndexBecomesValid [FAIL]
[xUnit.net 00:00:02.15] Assert.Equal() Failure: Values differ
[xUnit.net 00:00:02.15] Expected: 2
[xUnit.net 00:00:02.15] Actual: -1
[xUnit.net 00:00:02.15] Stack Trace:
[xUnit.net 00:00:02.15] /_/src/Controls/tests/Core.UnitTests/PickerTests.cs(183,0): at Microsoft.Maui.Controls.Core.UnitTests.PickerTests.SelectedIndexSetBeforeInlineItemsSurvivesParentSetUntilIndexBecomesValid()
[xUnit.net 00:00:02.15] at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
[xUnit.net 00:00:02.15] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
[xUnit.net 00:00:02.15] SelectedIndexSetBeforeItemsSourceAppliesAfterItemsSource [FAIL]
[xUnit.net 00:00:02.15] Assert.Equal() Failure: Values differ
[xUnit.net 00:00:02.15] Expected: 1
[xUnit.net 00:00:02.15] Actual: -1
[xUnit.net 00:00:02.15] Stack Trace:
[xUnit.net 00:00:02.15] /_/src/Controls/tests/Core.UnitTests/PickerTests.cs(132,0): at Microsoft.Maui.Controls.Core.UnitTests.PickerTests.SelectedIndexSetBeforeItemsSourceAppliesAfterItemsSource()
[xUnit.net 00:00:02.15] at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
[xUnit.net 00:00:02.15] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Failed SelectedIndexSetBeforeInlineItemsSurvivesParentSetUntilIndexBecomesValid [19 ms]
Error Message:
Assert.Equal() Failure: Values differ
Expected: 2
Actual: -1
Stack Trace:
at Microsoft.Maui.Controls.Core.UnitTests.PickerTests.SelectedIndexSetBeforeInlineItemsSurvivesParentSetUntilIndexBecomesValid() in /_/src/Controls/tests/Core.UnitTests/PickerTests.cs:line 183
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Passed TestItemsSourceCollectionChangedClear [< 1 ms]
Passed TestSelectedIndexInRangeDefaultSelectedIndex [< 1 ms]
Failed SelectedIndexSetBeforeItemsSourceAppliesAfterItemsSource [< 1 ms]
Error Message:
Assert.Equal() Failure: Values differ
Expected: 1
Actual: -1
Stack Trace:
at Microsoft.Maui.Controls.Core.UnitTests.PickerTests.SelectedIndexSetBeforeItemsSourceAppliesAfterItemsSource() in /_/src/Controls/tests/Core.UnitTests/PickerTests.cs:line 132
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Passed TestItemsSourceCollectionChangedRemoveAtEndSelected(removeCount: 2) [< 1 ms]
Passed TestItemsSourceCollectionChangedRemoveAtEndSelected(removeCount: 1) [< 1 ms]
Passed TestSelectedItemChangeSelectedIndex [1 ms]
Passed TestNestedDisplayMemberPathExpression [< 1 ms]
Passed TestSetItemsSourceProperty [< 1 ms]
[xUnit.net 00:00:02.16] SelectedIndexSetBeforeInlineItemsAppliesWhenIndexBecomesValid [FAIL]
[xUnit.net 00:00:02.16] Assert.Equal() Failure: Values differ
[xUnit.net 00:00:02.16] Expected: 2
[xUnit.net 00:00:02.16] Actual: -1
[xUnit.net 00:00:02.16] Stack Trace:
[xUnit.net 00:00:02.16] /_/src/Controls/tests/Core.UnitTests/PickerTests.cs(156,0): at Microsoft.Maui.Controls.Core.UnitTests.PickerTests.SelectedIndexSetBeforeInlineItemsAppliesWhenIndexBecomesValid()
[xUnit.net 00:00:02.16] at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
[xUnit.net 00:00:02.16] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
[xUnit.net 00:00:02.16] SelectedIndexSetBeforeItemsSourceClampsAfterItemsSource [FAIL]
[xUnit.net 00:00:02.16] Assert.Equal() Failure: Values differ
[xUnit.net 00:00:02.16] Expected: 2
[xUnit.net 00:00:02.16] Actual: -1
[xUnit.net 00:00:02.16] Stack Trace:
[xUnit.net 00:00:02.16] /_/src/Controls/tests/Core.UnitTests/PickerTests.cs(229,0): at Microsoft.Maui.Controls.Core.UnitTests.PickerTests.SelectedIndexSetBeforeItemsSourceClampsAfterItemsSource()
[xUnit.net 00:00:02.16] at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
[xUnit.net 00:00:02.16] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Passed PickerPreservesSelectedItemAfterInsertingItemBeforeSelection [< 1 ms]
Failed SelectedIndexSetBeforeInlineItemsAppliesWhenIndexBecomesValid [< 1 ms]
Error Message:
Assert.Equal() Failure: Values differ
Expected: 2
Actual: -1
Stack Trace:
at Microsoft.Maui.Controls.Core.UnitTests.PickerTests.SelectedIndexSetBeforeInlineItemsAppliesWhenIndexBecomesValid() in /_/src/Controls/tests/Core.UnitTests/PickerTests.cs:line 156
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Passed TestItemsSourceCollectionChangedAppend [< 1 ms]
Passed SettingSelectedIndexUpdatesSelectedItem [2 ms]
Passed TestSelectedItemAssignedItemsSourceCollectionChangedRemove [< 1 ms]
Passed ThrowsWhenModifyingItemsIfItemsSourceIsSet [1 ms]
Failed SelectedIndexSetBeforeItemsSourceClampsAfterItemsSource [< 1 ms]
Error Message:
Assert.Equal() Failure: Values differ
Expected: 2
Actual: -1
Stack Trace:
at Microsoft.Maui.Controls.Core.UnitTests.PickerTests.SelectedIndexSetBeforeItemsSourceClampsAfterItemsSource() in /_/src/Controls/tests/Core.UnitTests/PickerTests.cs:line 229
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Passed SelectedItemSetAfterPendingSelectedIndexClearsPendingIndex [< 1 ms]
Passed TestItemsSourceEnums [4 ms]
[xUnit.net 00:00:02.28] SelectedIndexSetBeforeInlineItemsSurvivesHandlerAttachmentUntilIndexBecomesValid [FAIL]
[xUnit.net 00:00:02.28] Assert.Equal() Failure: Values differ
[xUnit.net 00:00:02.28] Expected: 2
[xUnit.net 00:00:02.28] Actual: -1
[xUnit.net 00:00:02.28] Stack Trace:
[xUnit.net 00:00:02.28] /_/src/Controls/tests/Core.UnitTests/PickerTests.cs(209,0): at Microsoft.Maui.Controls.Core.UnitTests.PickerTests.SelectedIndexSetBeforeInlineItemsSurvivesHandlerAttachmentUntilIndexBecomesValid()
[xUnit.net 00:00:02.28] at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
[xUnit.net 00:00:02.28] at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
[xUnit.net 00:00:02.29] Finished: Microsoft.Maui.Controls.Core.UnitTests
Passed TestEmptyCollectionResetItems [< 1 ms]
Failed SelectedIndexSetBeforeInlineItemsSurvivesHandlerAttachmentUntilIndexBecomesValid [115 ms]
Error Message:
Assert.Equal() Failure: Values differ
Expected: 2
Actual: -1
Stack Trace:
at Microsoft.Maui.Controls.Core.UnitTests.PickerTests.SelectedIndexSetBeforeInlineItemsSurvivesHandlerAttachmentUntilIndexBecomesValid() in /_/src/Controls/tests/Core.UnitTests/PickerTests.cs:line 209
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Passed TestSetSelectedIndexOnNullRows [< 1 ms]
Passed TestSelectedIndexAssignedItemsSourceCollectionChangedAppend [< 1 ms]
Passed TestSelectedItemDefault [< 1 ms]
Passed TestItemsSourceCollectionChangedInsert [< 1 ms]
Passed PendingSelectedIndexCanBeClearedBeforeItemsLoad [< 1 ms]
Passed TestUnsubscribeINotifyCollectionChanged [< 1 ms]
Passed TestItemsSourceCollectionChangedRemove [< 1 ms]
Test Run Failed.
Total tests: 54
Passed: 48
Failed: 6
Total time: 2.9308 Seconds
🟢 With fix — 🧪 PickerTests: PASS ✅ · 42s
Determining projects to restore...
All projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Graphics -> D:\a\1\s\artifacts\bin\Graphics\Debug\net10.0\Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Essentials -> D:\a\1\s\artifacts\bin\Essentials\Debug\net10.0\Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Core -> D:\a\1\s\artifacts\bin\Core\Debug\net10.0\Microsoft.Maui.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Maps -> D:\a\1\s\artifacts\bin\Maps\Debug\net10.0\Microsoft.Maui.Maps.dll
Controls.Core.Design -> D:\a\1\s\artifacts\bin\Controls.Core.Design\Debug\net472\Microsoft.Maui.Controls.DesignTools.dll
Controls.BindingSourceGen -> D:\a\1\s\artifacts\bin\Controls.BindingSourceGen\Debug\netstandard2.0\Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Controls.Core -> D:\a\1\s\artifacts\bin\Controls.Core\Debug\net10.0\Microsoft.Maui.Controls.dll
Controls.Xaml.Design -> D:\a\1\s\artifacts\bin\Controls.Xaml.Design\Debug\net472\Microsoft.Maui.Controls.Xaml.DesignTools.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Controls.Xaml -> D:\a\1\s\artifacts\bin\Controls.Xaml\Debug\net10.0\Microsoft.Maui.Controls.Xaml.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241020
Controls.Maps -> D:\a\1\s\artifacts\bin\Controls.Maps\Debug\net10.0\Microsoft.Maui.Controls.Maps.dll
TestUtils -> D:\a\1\s\artifacts\bin\TestUtils\Debug\netstandard2.0\Microsoft.Maui.TestUtils.dll
Controls.Core.UnitTests -> D:\a\1\s\artifacts\bin\Controls.Core.UnitTests\Debug\net10.0\Microsoft.Maui.Controls.Core.UnitTests.dll
Test run for D:\a\1\s\artifacts\bin\Controls.Core.UnitTests\Debug\net10.0\Microsoft.Maui.Controls.Core.UnitTests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.20] Discovering: Microsoft.Maui.Controls.Core.UnitTests
[xUnit.net 00:00:01.71] Discovered: Microsoft.Maui.Controls.Core.UnitTests
[xUnit.net 00:00:01.72] Starting: Microsoft.Maui.Controls.Core.UnitTests
Passed NullItemReturnsEmptyStringFromInterface [16 ms]
Passed SelectedIndexSetBeforeEmptyItemsSourceAppliesWhenIndexBecomesValid [15 ms]
Passed TestItemsSourceCollectionChangedInsertBeforeSelected(insertionIndex: 0, insertNames: ["George", "Pete"]) [11 ms]
Passed TestItemsSourceCollectionChangedInsertBeforeSelected(insertionIndex: 2, insertNames: ["George"]) [< 1 ms]
Passed TestItemsSourceCollectionChangedInsertBeforeSelected(insertionIndex: 1, insertNames: ["George"]) [< 1 ms]
Passed TestItemsSourceCollectionChangedInsertBeforeSelected(insertionIndex: 1, insertNames: ["George", "Pete"]) [< 1 ms]
Passed TestItemsSourceCollectionChangedInsertBeforeSelected(insertionIndex: 2, insertNames: ["George", "Pete"]) [< 1 ms]
Passed TestItemsSourceCollectionChangedInsertBeforeSelected(insertionIndex: 3, insertNames: ["George"]) [< 1 ms]
Passed TestItemsSourceCollectionChangedInsertBeforeSelected(insertionIndex: 0, insertNames: ["George"]) [< 1 ms]
Passed TestItemsSourceCollectionChangedInsertBeforeSelected(insertionIndex: 3, insertNames: ["George", "Pete"]) [< 1 ms]
Passed TestSelectedIndexAssignedItemsSourceCollectionChangedInsert [2 ms]
Passed TestItemsSourceCollectionChangedReAssign [7 ms]
Passed TestItemsSourceCollectionOfStrings [< 1 ms]
Passed TestItemsSourceCollectionChangedRemoveBeforeSelected(removeIndex: 1, removeCount: 2, selectedItemPreserved: False) [4 ms]
Passed TestItemsSourceCollectionChangedRemoveBeforeSelected(removeIndex: 2, removeCount: 1, selectedItemPreserved: True) [< 1 ms]
Passed TestItemsSourceCollectionChangedRemoveBeforeSelected(removeIndex: 0, removeCount: 2, selectedItemPreserved: False) [< 1 ms]
Passed TestItemsSourceCollectionChangedRemoveBeforeSelected(removeIndex: 1, removeCount: 1, selectedItemPreserved: False) [< 1 ms]
Passed TestItemsSourceCollectionChangedRemoveBeforeSelected(removeIndex: 0, removeCount: 1, selectedItemPreserved: True) [< 1 ms]
Passed TestItemsSourceCollectionChangedRemoveBeforeSelected(removeIndex: 2, removeCount: 2, selectedItemPreserved: True) [< 1 ms]
Passed TestSelectedIndexChangedOnCollectionShrink [1 ms]
Passed TestSelectedIndexOutOfRangeUpdatesSelectedItem [< 1 ms]
Passed TestDisplayConverter [1 ms]
Passed PickerPreservesSelectedItemAfterRemovingItemBeforeSelection [< 1 ms]
Passed TestSelectedIndexInRange [< 1 ms]
Passed TestSelectedItemSet [3 ms]
Passed TestSelectedIndexAssignedItemsSourceCollectionChangedReAssign [< 1 ms]
Passed TestSelectedIndexAssignedItemsSourceCollectionChangedClear [1 ms]
Passed SelectedIndexSetBeforeInlineItemsSurvivesParentSetUntilIndexBecomesValid [17 ms]
Passed TestItemsSourceCollectionChangedClear [< 1 ms]
Passed TestSelectedIndexInRangeDefaultSelectedIndex [< 1 ms]
Passed SelectedIndexSetBeforeItemsSourceAppliesAfterItemsSource [< 1 ms]
Passed TestItemsSourceCollectionChangedRemoveAtEndSelected(removeCount: 2) [< 1 ms]
Passed TestItemsSourceCollectionChangedRemoveAtEndSelected(removeCount: 1) [< 1 ms]
Passed TestSelectedItemChangeSelectedIndex [< 1 ms]
Passed TestNestedDisplayMemberPathExpression [< 1 ms]
Passed TestSetItemsSourceProperty [< 1 ms]
Passed PickerPreservesSelectedItemAfterInsertingItemBeforeSelection [< 1 ms]
Passed SelectedIndexSetBeforeInlineItemsAppliesWhenIndexBecomesValid [< 1 ms]
Passed TestItemsSourceCollectionChangedAppend [< 1 ms]
Passed SettingSelectedIndexUpdatesSelectedItem [1 ms]
Passed TestSelectedItemAssignedItemsSourceCollectionChangedRemove [< 1 ms]
Passed ThrowsWhenModifyingItemsIfItemsSourceIsSet [< 1 ms]
Passed SelectedIndexSetBeforeItemsSourceClampsAfterItemsSource [< 1 ms]
Passed SelectedItemSetAfterPendingSelectedIndexClearsPendingIndex [< 1 ms]
Passed TestItemsSourceEnums [4 ms]
[xUnit.net 00:00:02.02] Finished: Microsoft.Maui.Controls.Core.UnitTests
Passed TestEmptyCollectionResetItems [< 1 ms]
Passed SelectedIndexSetBeforeInlineItemsSurvivesHandlerAttachmentUntilIndexBecomesValid [118 ms]
Passed TestSetSelectedIndexOnNullRows [< 1 ms]
Passed TestSelectedIndexAssignedItemsSourceCollectionChangedAppend [< 1 ms]
Passed TestSelectedItemDefault [< 1 ms]
Passed TestItemsSourceCollectionChangedInsert [< 1 ms]
Passed PendingSelectedIndexCanBeClearedBeforeItemsLoad [< 1 ms]
Passed TestUnsubscribeINotifyCollectionChanged [< 1 ms]
Passed TestItemsSourceCollectionChangedRemove [< 1 ms]
Test Run Successful.
Total tests: 54
Passed: 54
Total time: 2.6941 Seconds
🔴 Without fix — 📄 Maui9150: FAIL ✅ · 122s
(truncated to last 15,000 chars)
i.Controls.Xaml.UnitTests.Maui33293Product". [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui33876.xaml(8,20): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui34490.xaml(12,25): XamlC warning XC0045: Binding: Property "BindingContext" not found on "Microsoft.Maui.Controls.Xaml.UnitTests.Maui34490ItemModel". [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui6367.xaml(10,50): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui8149.xaml(12,43): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\RefToXamlControl.xaml(7,33): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\SetValue.xaml(20,26): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\SetValue.xaml(52,27): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\SetValue.xaml(53,27): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\WarnOnObsolete.xaml(6,25): XamlC warning XC0618: Property, Property setter or BindableProperty "ObsoleteBP" is deprecated. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\WarnOnObsolete.xaml(6,42): XamlC warning XC0618: Property, Property setter or BindableProperty "ObsoleteProp" is deprecated. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\WarnOnObsolete.xaml(6,61): XamlC warning XC0618: Property, Property setter or BindableProperty "ObsoletePropSetter" is deprecated. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\XReference.xaml(16,4): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\XReference.xaml(21,26): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\XReference.xaml(21,77): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Gh2007.rtxc.xaml(3,9): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
Controls.Xaml.UnitTests -> D:\a\1\s\artifacts\bin\Controls.Xaml.UnitTests\Debug\net10.0\Microsoft.Maui.Controls.Xaml.UnitTests.dll
Test run for D:\a\1\s\artifacts\bin\Controls.Xaml.UnitTests\Debug\net10.0\Microsoft.Maui.Controls.Xaml.UnitTests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.27] Discovering: Microsoft.Maui.Controls.Xaml.UnitTests
[xUnit.net 00:00:03.96] Discovered: Microsoft.Maui.Controls.Xaml.UnitTests
[xUnit.net 00:00:03.97] Starting: Microsoft.Maui.Controls.Xaml.UnitTests
[xUnit.net 00:00:04.10] PickerSelectedIndexBeforeInlineItemsIsApplied(inflator: SourceGen) [FAIL]
[xUnit.net 00:00:04.10] Assert.Equal() Failure: Values differ
[xUnit.net 00:00:04.10] Expected: 2
[xUnit.net 00:00:04.10] Actual: -1
[xUnit.net 00:00:04.10] Stack Trace:
[xUnit.net 00:00:04.10] /_/src/Controls/tests/Xaml.UnitTests/Issues/Maui9150.xaml.cs(49,0): at Microsoft.Maui.Controls.Xaml.UnitTests.Maui9150.Test.PickerSelectedIndexBeforeInlineItemsIsApplied(XamlInflator inflator)
[xUnit.net 00:00:04.10] at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
[xUnit.net 00:00:04.10] at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
[xUnit.net 00:00:04.11] PickerSelectedIndexBeforeInlineItemsIsApplied(inflator: XamlC) [FAIL]
[xUnit.net 00:00:04.11] Assert.Equal() Failure: Values differ
[xUnit.net 00:00:04.11] Expected: 2
[xUnit.net 00:00:04.11] Actual: -1
[xUnit.net 00:00:04.11] Stack Trace:
[xUnit.net 00:00:04.11] /_/src/Controls/tests/Xaml.UnitTests/Issues/Maui9150.xaml.cs(49,0): at Microsoft.Maui.Controls.Xaml.UnitTests.Maui9150.Test.PickerSelectedIndexBeforeInlineItemsIsApplied(XamlInflator inflator)
[xUnit.net 00:00:04.11] at InvokeStub_Test.PickerSelectedIndexBeforeInlineItemsIsApplied(Object, Span`1)
[xUnit.net 00:00:04.11] at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
[xUnit.net 00:00:04.18] PickerSelectedIndexBeforeInlineItemsIsApplied(inflator: Runtime) [FAIL]
[xUnit.net 00:00:04.18] Assert.Equal() Failure: Values differ
[xUnit.net 00:00:04.18] Expected: 2
[xUnit.net 00:00:04.18] Actual: -1
[xUnit.net 00:00:04.18] Stack Trace:
[xUnit.net 00:00:04.18] /_/src/Controls/tests/Xaml.UnitTests/Issues/Maui9150.xaml.cs(49,0): at Microsoft.Maui.Controls.Xaml.UnitTests.Maui9150.Test.PickerSelectedIndexBeforeInlineItemsIsApplied(XamlInflator inflator)
[xUnit.net 00:00:04.18] at InvokeStub_Test.PickerSelectedIndexBeforeInlineItemsIsApplied(Object, Span`1)
[xUnit.net 00:00:04.18] at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
[xUnit.net 00:00:04.18] PickerSelectedIndexBeforeItemsSourceIsApplied(inflator: SourceGen) [FAIL]
[xUnit.net 00:00:04.18] Assert.Equal() Failure: Values differ
[xUnit.net 00:00:04.18] Expected: 1
[xUnit.net 00:00:04.18] Actual: -1
[xUnit.net 00:00:04.18] Stack Trace:
[xUnit.net 00:00:04.18] /_/src/Controls/tests/Xaml.UnitTests/Issues/Maui9150.xaml.cs(39,0): at Microsoft.Maui.Controls.Xaml.UnitTests.Maui9150.Test.PickerSelectedIndexBeforeItemsSourceIsApplied(XamlInflator inflator)
[xUnit.net 00:00:04.18] at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
[xUnit.net 00:00:04.18] at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
[xUnit.net 00:00:04.19] PickerSelectedIndexBeforeItemsSourceIsApplied(inflator: Runtime) [FAIL]
[xUnit.net 00:00:04.19] Assert.Equal() Failure: Values differ
[xUnit.net 00:00:04.19] Expected: 1
[xUnit.net 00:00:04.19] Actual: -1
[xUnit.net 00:00:04.19] Stack Trace:
[xUnit.net 00:00:04.19] /_/src/Controls/tests/Xaml.UnitTests/Issues/Maui9150.xaml.cs(39,0): at Microsoft.Maui.Controls.Xaml.UnitTests.Maui9150.Test.PickerSelectedIndexBeforeItemsSourceIsApplied(XamlInflator inflator)
[xUnit.net 00:00:04.19] at InvokeStub_Test.PickerSelectedIndexBeforeItemsSourceIsApplied(Object, Span`1)
[xUnit.net 00:00:04.19] at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
[xUnit.net 00:00:04.19] PickerSelectedIndexBeforeItemsSourceIsApplied(inflator: XamlC) [FAIL]
[xUnit.net 00:00:04.19] Assert.Equal() Failure: Values differ
[xUnit.net 00:00:04.19] Expected: 1
[xUnit.net 00:00:04.19] Actual: -1
[xUnit.net 00:00:04.19] Stack Trace:
[xUnit.net 00:00:04.19] /_/src/Controls/tests/Xaml.UnitTests/Issues/Maui9150.xaml.cs(39,0): at Microsoft.Maui.Controls.Xaml.UnitTests.Maui9150.Test.PickerSelectedIndexBeforeItemsSourceIsApplied(XamlInflator inflator)
[xUnit.net 00:00:04.19] at InvokeStub_Test.PickerSelectedIndexBeforeItemsSourceIsApplied(Object, Span`1)
[xUnit.net 00:00:04.19] at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
[xUnit.net 00:00:04.20] Finished: Microsoft.Maui.Controls.Xaml.UnitTests
Failed PickerSelectedIndexBeforeInlineItemsIsApplied(inflator: SourceGen) [54 ms]
Error Message:
Assert.Equal() Failure: Values differ
Expected: 2
Actual: -1
Stack Trace:
at Microsoft.Maui.Controls.Xaml.UnitTests.Maui9150.Test.PickerSelectedIndexBeforeInlineItemsIsApplied(XamlInflator inflator) in /_/src/Controls/tests/Xaml.UnitTests/Issues/Maui9150.xaml.cs:line 49
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
Failed PickerSelectedIndexBeforeInlineItemsIsApplied(inflator: XamlC) [1 ms]
Error Message:
Assert.Equal() Failure: Values differ
Expected: 2
Actual: -1
Stack Trace:
at Microsoft.Maui.Controls.Xaml.UnitTests.Maui9150.Test.PickerSelectedIndexBeforeInlineItemsIsApplied(XamlInflator inflator) in /_/src/Controls/tests/Xaml.UnitTests/Issues/Maui9150.xaml.cs:line 49
at InvokeStub_Test.PickerSelectedIndexBeforeInlineItemsIsApplied(Object, Span`1)
at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
Failed PickerSelectedIndexBeforeInlineItemsIsApplied(inflator: Runtime) [75 ms]
Error Message:
Assert.Equal() Failure: Values differ
Expected: 2
Actual: -1
Stack Trace:
at Microsoft.Maui.Controls.Xaml.UnitTests.Maui9150.Test.PickerSelectedIndexBeforeInlineItemsIsApplied(XamlInflator inflator) in /_/src/Controls/tests/Xaml.UnitTests/Issues/Maui9150.xaml.cs:line 49
at InvokeStub_Test.PickerSelectedIndexBeforeInlineItemsIsApplied(Object, Span`1)
at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
Failed PickerSelectedIndexBeforeItemsSourceIsApplied(inflator: SourceGen) [< 1 ms]
Error Message:
Assert.Equal() Failure: Values differ
Expected: 1
Actual: -1
Stack Trace:
at Microsoft.Maui.Controls.Xaml.UnitTests.Maui9150.Test.PickerSelectedIndexBeforeItemsSourceIsApplied(XamlInflator inflator) in /_/src/Controls/tests/Xaml.UnitTests/Issues/Maui9150.xaml.cs:line 39
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
Failed PickerSelectedIndexBeforeItemsSourceIsApplied(inflator: Runtime) [3 ms]
Error Message:
Assert.Equal() Failure: Values differ
Expected: 1
Actual: -1
Stack Trace:
at Microsoft.Maui.Controls.Xaml.UnitTests.Maui9150.Test.PickerSelectedIndexBeforeItemsSourceIsApplied(XamlInflator inflator) in /_/src/Controls/tests/Xaml.UnitTests/Issues/Maui9150.xaml.cs:line 39
at InvokeStub_Test.PickerSelectedIndexBeforeItemsSourceIsApplied(Object, Span`1)
at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
Failed PickerSelectedIndexBeforeItemsSourceIsApplied(inflator: XamlC) [< 1 ms]
Error Message:
Assert.Equal() Failure: Values differ
Expected: 1
Actual: -1
Stack Trace:
at Microsoft.Maui.Controls.Xaml.UnitTests.Maui9150.Test.PickerSelectedIndexBeforeItemsSourceIsApplied(XamlInflator inflator) in /_/src/Controls/tests/Xaml.UnitTests/Issues/Maui9150.xaml.cs:line 39
at InvokeStub_Test.PickerSelectedIndexBeforeItemsSourceIsApplied(Object, Span`1)
at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
Passed PickerSelectedIndexChangedDoesNotFireDuringConstruction(inflator: SourceGen) [1 ms]
Passed PickerSelectedIndexChangedDoesNotFireDuringConstruction(inflator: XamlC) [< 1 ms]
Passed PickerSelectedIndexChangedDoesNotFireDuringConstruction(inflator: Runtime) [2 ms]
Test Run Failed.
Total tests: 9
Passed: 3
Failed: 6
Total time: 4.8350 Seconds
🟢 With fix — 📄 Maui9150: PASS ✅ · 113s
(truncated to last 15,000 chars)
fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui24472.xaml(41,32): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui24500.xaml(6,28): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui25309.xaml(21,9): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui25871.xaml(14,24): XamlC warning XC0045: Binding: Property "UpdateProgress" not found on "Microsoft.Maui.Controls.Xaml.UnitTests.Maui25871ViewModel". [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui25935.xaml(8,13): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui31939.xaml(7,29): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui31939.xaml(14,29): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui31939.xaml(15,29): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui31995.xaml(7,26): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui31995.xaml(12,56): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui31995.xaml(18,84): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui31995.xaml(23,84): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui31995.xaml(30,56): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui31995.xaml(36,84): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui31995.xaml(44,28): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui32056.xaml(9,9): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui32837.xaml(13,18): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui32924.xaml(14,20): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui32924.xaml(18,20): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui32924.xaml(22,20): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui32924.xaml(27,20): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui33291.xaml(20,29): XamlC warning XC0045: Binding: Property "BindingContext" not found on "Microsoft.Maui.Controls.Xaml.UnitTests.Maui33291Item". [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui33293.xaml(14,29): XamlC warning XC0045: Binding: Property "BindingContext" not found on "Microsoft.Maui.Controls.Xaml.UnitTests.Maui33293Product". [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui33876.xaml(8,20): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui34490.xaml(12,25): XamlC warning XC0045: Binding: Property "BindingContext" not found on "Microsoft.Maui.Controls.Xaml.UnitTests.Maui34490ItemModel". [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui6367.xaml(10,50): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Maui8149.xaml(12,43): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\RefToXamlControl.xaml(7,33): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\SetValue.xaml(20,26): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\SetValue.xaml(52,27): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\SetValue.xaml(53,27): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\WarnOnObsolete.xaml(6,25): XamlC warning XC0618: Property, Property setter or BindableProperty "ObsoleteBP" is deprecated. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\WarnOnObsolete.xaml(6,42): XamlC warning XC0618: Property, Property setter or BindableProperty "ObsoleteProp" is deprecated. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\WarnOnObsolete.xaml(6,61): XamlC warning XC0618: Property, Property setter or BindableProperty "ObsoletePropSetter" is deprecated. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\XReference.xaml(16,4): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\XReference.xaml(21,26): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\XReference.xaml(21,77): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Issues\Gh2007.rtxc.xaml(3,9): XamlC warning XC0022: Binding could be compiled to improve runtime performance if x:DataType is specified. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information. [D:\a\1\s\src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj]
Controls.Xaml.UnitTests -> D:\a\1\s\artifacts\bin\Controls.Xaml.UnitTests\Debug\net10.0\Microsoft.Maui.Controls.Xaml.UnitTests.dll
Test run for D:\a\1\s\artifacts\bin\Controls.Xaml.UnitTests\Debug\net10.0\Microsoft.Maui.Controls.Xaml.UnitTests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.29] Discovering: Microsoft.Maui.Controls.Xaml.UnitTests
[xUnit.net 00:00:03.99] Discovered: Microsoft.Maui.Controls.Xaml.UnitTests
[xUnit.net 00:00:04.00] Starting: Microsoft.Maui.Controls.Xaml.UnitTests
[xUnit.net 00:00:04.22] Finished: Microsoft.Maui.Controls.Xaml.UnitTests
Passed PickerSelectedIndexBeforeInlineItemsIsApplied(inflator: SourceGen) [62 ms]
Passed PickerSelectedIndexBeforeInlineItemsIsApplied(inflator: XamlC) [< 1 ms]
Passed PickerSelectedIndexBeforeInlineItemsIsApplied(inflator: Runtime) [72 ms]
Passed PickerSelectedIndexBeforeItemsSourceIsApplied(inflator: SourceGen) [< 1 ms]
Passed PickerSelectedIndexBeforeItemsSourceIsApplied(inflator: Runtime) [5 ms]
Passed PickerSelectedIndexBeforeItemsSourceIsApplied(inflator: XamlC) [< 1 ms]
Passed PickerSelectedIndexChangedDoesNotFireDuringConstruction(inflator: SourceGen) [< 1 ms]
Passed PickerSelectedIndexChangedDoesNotFireDuringConstruction(inflator: XamlC) [< 1 ms]
Passed PickerSelectedIndexChangedDoesNotFireDuringConstruction(inflator: Runtime) [4 ms]
Test Run Successful.
Total tests: 9
Passed: 9
Total time: 4.9347 Seconds
📁 Fix files reverted (2 files)
eng/pipelines/ci-copilot.ymlsrc/Controls/src/Core/Picker/Picker.cs
UI Tests — Picker
Detected UI test categories: Picker
✅ Deep UI tests — 46 passed, 0 failed across 1 category on platform-pool agent (replaces in-process counts above).
🧪 UI Test Execution Results (deep, platform pool)
| Category | Tests | Snapshot diffs |
|---|---|---|
deep-uitests |
46/47 ✓ | — |
📎 Download drop-deep-uitests artifact (TRX + snapshot diffs) |
Pre-Flight — Context & Validation
Issue: #9150 - Picker SelectedIndex set before items should initialize selection
PR: #35629 - Fix Picker SelectedIndex deferred initialization
Platforms Affected: Android originally reported; PR changes shared Picker behavior affecting all platforms. Testing platform: Windows.
Files Changed: 1 implementation, 6 Picker test files (local branch also contains unrelated CI/copilot changes outside the Picker fix scope).
Key Findings
- Issue #9150 reports that
SelectedIndex="0"in XAML is lost when aPickerinitializes before its items are available; setting the index later in code-behind is the workaround. - PR fix changes
src/Controls/src/Core/Picker/Picker.csto remember a pending selected index whileItemsis empty, then apply it afterItemsSource/inline items populate. - Gate result supplied for Windows passed:
Issue9150,PickerTests, andMaui9150fail without the fix and pass with the PR fix. - Impacted UI category:
Picker.
Code Review Summary
Verdict: NEEDS_DISCUSSION
Confidence: medium
Errors: 0 | Warnings: 2 | Suggestions: 0
Key code review findings:
src/Controls/src/Core/Picker/Picker.cs:549-556suppressesSelectedIndexChangedfor deferred selection, including observable collections populated after a picker is already displayed; this may be intentional but changes event semantics.- Public PR context includes an earlier Android UI setup/navigation failure, while the provided local Windows gate passed.
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #35629 | Store pending selected index in Picker when coercion would otherwise clamp it while items are empty; apply after items populate. |
PASSED (Gate) | src/Controls/src/Core/Picker/Picker.cs |
Original PR fix; Windows gate passed. |
Code Review — Deep Analysis
Code Review PR #35629
Independent Assessment
What this changes: Picker defers a SelectedIndex assigned before items exist, then applies it when items load.
Inferred motivation: XAML sets SelectedIndex before ItemsSource/inline items are populated, losing default selection.
Reconciliation with PR Narrative
Author claims: Fixes #9150; deferred initialization updates SelectedItem but does not raise SelectedIndexChanged.
Agreement/disagreement: Implementation matches the claim. Event suppression is intentional but needs confirmation for runtime population scenarios. Local Windows gate artifacts passed; an earlier public Android session showed UI setup/navigation failures.
Findings
Warning Deferred selection suppresses SelectedIndexChanged outside construction
src/Controls/src/Core/Picker/Picker.cs:549-556 unconditionally suppresses SelectedIndexChanged while applying pending selection. For an already-displayed picker with empty observable ItemsSource, later collection population changes selection without notifying subscribers.
Warning CI/gate context differs by platform
The provided Windows gate passed. Public PR page contains a prior Android agent session where unit/XAML passed but the issue UI test failed during setup/navigation, so Android still merits separate human/CI confirmation.
Devil's Advocate
Suppression is explicitly claimed and tested, and previous behavior also did not produce a useful deferred-selection event. Still, the new behavior creates a real delayed selection transition, so event semantics merit human confirmation.
Verdict: NEEDS_DISCUSSION
Confidence: medium
Summary: Core fix looks plausible on Windows, but event semantics and platform-specific UI behavior should be discussed or explicitly accepted.
Fix — Analysis & Comparison
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| 1 | try-fix-1 | Capture pending index in public SelectedIndex CLR setter. |
FAIL | src/Controls/src/Core/Picker/Picker.cs |
Picker unit tests passed (54/54), but XAML Maui9150 failed (6/9) because XAML/direct bindable-property assignment bypasses the CLR setter. |
| 2 | try-fix-2 | Remove coercion; store raw requested index and expose a clamped effective getter. | FAIL | src/Controls/src/Core/Picker/Picker.cs |
Picker unit tests failed (7 failures); partial inline item population selected too early and collection removal semantics regressed. |
| 3 | try-fix-3 | Store raw requested index plus a deferred marker for pre-items assignment. | FAIL | src/Controls/src/Core/Picker/Picker.cs |
After one iteration, Picker unit tests still failed (4 failures); preserving raw values breaks existing clamped-property invariants. |
| PR | PR #35629 | Preserve existing coerced SelectedIndex behavior and store a separate pending selected index while items are empty; apply it after item population. |
PASSED (Gate) | src/Controls/src/Core/Picker/Picker.cs |
Original PR fix; provided Windows gate passed for Issue9150, PickerTests, and Maui9150. |
Iterative Learning
| Candidate | Expert-review/test lesson | Next-step impact |
|---|---|---|
| try-fix-1 | CLR setter capture is too narrow; XAML sets the bindable property directly. | Candidate 2 moved preservation to bindable-property storage. |
| try-fix-2 | Raw storage without deferred state exposes clamped selections too early and disrupts collection changes. | Candidate 3 added a deferred marker. |
| try-fix-3 | Raw storage plus marker still changes too many existing Picker invariants; restoring those invariants converges toward separate pending state. | Stop: no meaningfully better alternative remains. |
Cross-Pollination
| Model | Round | New Ideas? | Details |
|---|---|---|---|
| code-review + maui-expert-reviewer guidance | 1 | Yes | Explore event semantics and alternatives that avoid the PR's coerce-callback pending state. |
| try-fix loop | 2 | No better passing idea | Tested setter capture, raw storage, and raw storage with deferred marker; all failed targeted regression tests. |
Exhausted: Yes
Selected Fix: PR #35629 It is the only tested approach that preserves normal coerced SelectedIndex invariants while separately retaining a pre-items requested index. The alternatives either miss XAML direct assignment or regress established Picker collection behavior.
Report — Final Recommendation
Comparative Report — PR #35629
Candidates compared
| Candidate | Approach | Regression result | Ranking |
|---|---|---|---|
pr |
Store a separate pending selected index when SelectedIndex is assigned while Picker.Items is empty, then apply it once items populate. |
PASS | 1 |
pr-plus-reviewer |
Same as pr; expert reviewer produced no actionable findings, so no reviewer changes were applied. |
PASS | 1 |
try-fix-3 |
Store raw requested index plus a deferred marker to keep pending indices effectively unselected until enough items exist. | FAIL | 3 |
try-fix-2 |
Remove selected-index coercion, store the raw requested value, and expose a clamped effective getter. | FAIL | 4 |
try-fix-1 |
Capture pending index in the public CLR setter before bindable-property coercion. | FAIL | 5 |
Analysis
pr and pr-plus-reviewer are tied functionally because the expert reviewer returned no actionable inline findings ([]). Both retain the established public invariant that Picker.SelectedIndex is coerced to an available item index or -1, while using private pending state to remember the initial pre-items request. The supplied Windows gate passed: Issue9150, PickerTests, and Maui9150 all failed without the fix and passed with the PR fix.
try-fix-1 is not viable because it captures only assignments through the public CLR setter. The primary repro path uses XAML/bindable-property assignment, which bypasses that setter, so Maui9150 failed.
try-fix-2 is not viable because storing the raw requested index in the bindable property changes core Picker behavior. It regressed existing picker unit tests by selecting too early during partial inline item population and by changing collection-change semantics.
try-fix-3 improves on try-fix-2 with a deferred marker, but it still failed picker unit tests. It continued to disturb collection-removal and selected-item reconciliation invariants, and further repairs would converge toward the PR's separate pending-state design with more complexity.
Winner
Winner: pr
pr wins because it is the simplest passing candidate and preserves existing Picker.SelectedIndex invariants while fixing the XAML initialization path. pr-plus-reviewer is equivalent and also acceptable, but because the reviewer produced no changes, the raw PR fix is the canonical winning candidate.
Notes for inline review
The expert reviewer produced no actionable inline comments, so inline-findings.json contains an empty JSON array.
Future Action — review latest findings
No alternative fix was selected for this run. Review the session findings and CI results before merging.
Description of Change
Fixes
Picker.SelectedIndexinitialization whenSelectedIndexis set before picker items are available.The requested index is now preserved while the picker has no items, the public
SelectedIndexremains coerced to-1until a valid item list exists, and the pending value is applied once items are loaded. Deferred initialization updatesSelectedItembut does not raiseSelectedIndexChanged.Adds focused core, XAML, and UI regression coverage for
ItemsSourceand inlinePicker.Itemsinitialization paths.Issues Fixed
Fixes #9150