Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

x:Bind and DataTemplates updating two way bindings incorrectly for selector based controls #10232

Open
tkillingerAlro opened this issue Dec 12, 2024 · 1 comment
Labels
area-ComboBox area-Lists ListView, GridView, ListBox, etc bug Something isn't working team-Controls Issue for the Controls team team-Markup Issue for the Markup team

Comments

@tkillingerAlro
Copy link

Describe the bug

When using x:Bind with DataTemplates collection based controls are resetting selected items to null. This has been happening since I started using the Windows App SDK around version 1.0 and is becoming increasingly hard to code around.

Ones I have noticed are Combobox and ListView (I'm sure there are others). This seems to be related to the Selector Base Class.

https://learn.microsoft.com/en-us/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.controls.primitives.selector?view=windows-app-sdk-1.6

I have tried to look into the generated code and it seems like the following is happening.

  1. A DataTemplates base binding object is set to another object due to the reuse of cached DataTemplates.
  2. Selector based sub template controls check if the selected item is in the base binding object's new collection.
  3. It's not due to the change of the whole binding object changing.
  4. Selected Item is set to null

I have attached a sample project to demonstrate this.
This issue exists in standard WinUI controls and the Windows Community Toolkit ListDetailsView

Steps to reproduce the bug

  1. Open up example project
  2. Go to "x:Bind Control INotifyPropertyChanged" page
  3. Click on the different list items change
  4. You should notice the sub lists "Selected ***: value" TextBlocks are changing to Null
  5. Go to "x:Bind Data Template" page
  6. Click on the different list items change.
  7. You should notice the sub lists "Selected ***: value" TextBlocks are changing to Null

Expected behavior

When using x:Bind in a DataTemplate the selected items should not be set to null. DataTemplates may contain a multitude of selector based sub controls. Leads to a mess in the ViewModel when trying to determine if the user changed something on the screen.

Screenshots

Image
Image
Image
ItemSourceBindingIssues.zip

NuGet package version

None

Packaging type

No response

Windows version

No response

IDE

Visual Studio 2022

Additional context

No response

@microsoft-github-policy-service microsoft-github-policy-service bot added the needs-triage Issue needs to be triaged by the area owners label Dec 12, 2024
@RDMacLachlan RDMacLachlan transferred this issue from microsoft/WindowsAppSDK Dec 12, 2024
Copy link

Hi I'm an AI powered bot that finds similar issues based off the issue title.

Please view the issues below to see if they solve your problem, and if the issue describes your problem please consider closing this one. Thank you!

Open similar issues:

Note: You can give me feedback by thumbs upping or thumbs downing this comment.

@karkarl karkarl added bug Something isn't working area-ComboBox area-Lists ListView, GridView, ListBox, etc team-Controls Issue for the Controls team team-Markup Issue for the Markup team and removed needs-triage Issue needs to be triaged by the area owners labels Dec 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-ComboBox area-Lists ListView, GridView, ListBox, etc bug Something isn't working team-Controls Issue for the Controls team team-Markup Issue for the Markup team
Projects
None yet
Development

No branches or pull requests

2 participants