dotnet / maui

.NET MAUI is the .NET Multi-platform App UI, a framework for building native device applications spanning mobile, tablet, and desktop.
https://dot.net/maui
MIT License
22.02k stars 1.73k forks source link

CollectionView - Does not change the user interface when modifying an ObservableCollection element #22277

Closed DevRafael2 closed 3 months ago

DevRafael2 commented 4 months ago

Description - Translated

When having a CollectionView which has as ItemSource an ObservableCollection it does not reflect changes when modifying properties of any of its Items. The item if it is modified but it is not reflected in the user interface. I have tried with bidirectional Binding, with the Dispatch, with OnPropertyChange, but nothing works.

Description - Original

Al tener un CollectionView el cual tiene como ItemSource una ObservableCollection este no refleja cambios al modificar propiedades de alguno de sus Ítems. El item si se modifico más no se refleja en la interfaz de usuario. He intentado con Binding bidireccional, con el Dispatch, con OnPropertyChange, pero nada funciona

Steps to Reproduce - Translated

Create a list in your ViewModel (CollectionView) Create a CollectionView that uses it <CollectionView ItemSource=“{Binding MyCollection}”>... Modify some of its Items

Steps to Reproduce - Original

Crea una lista en tu ViewModel (CollectionView) Crea un CollectionView que la utilice ... Modifica alguno de sus Ítems

Link to public reproduction project repository

No response

Version with bug

8.0.21 SR4.1

Is this a regression from previous behavior?

Yes, this used to work in .NET MAUI

Last version that worked well

8.0.20 SR4

Affected platforms

Android

Affected platform versions

Solo he probado en Android

Did you find any workaround?

No response

Relevant log output

No response

github-actions[bot] commented 4 months ago

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 and thumbs upping the other issue to help us prioritize it. Thank you!

Open similar issues:

Closed similar issues:

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

drasticactions commented 4 months ago

I needed to translate your message to understand it, so I may have lost something in this, but I believe this is correct behavior.

An ObservableCollection, I believe, implements INotifyPropertyChanged for the items themselves. If you add a new item, ListView/CollectionView will add a new item to the list, based on the DataTemplate. If you're editing elements within that list, those properties would still need to implement some form of INotifyPropertyChanged for each property. Just having an ObservableCollection doesn't magically make that work.

Having an example of what you're doing would help see if you're implementing this incorrectly.

MSicc commented 4 months ago

I am running into similar issues. However, it is not only tied to CollectionView, but happens also with Syncfusion's ListView control. On top, it does not matter if the Itemsource is a List or an ObservableCollection.

In one of my scenarios, I have a boolean that controls the visibility of an ImageButton. This Binding works like it should.

The same boolean is used and runs through 2 converters, one converts the boolean to a Color (predefined Red and Green), the other loads text from the app's resx file. The Color is bound to the BackgroundColor of an Ellipse, while the text is bound to the ToolTipProperties.Text property. These two bindings work only one-time, but do not get changed after that.

If I add a breakpoint in the ctor of my ViewModel, the change gets propagated like it should.

I tested also binding to properties in the ViewModel instead of using the converters, but that does not change anything.

I tried to add Task.Delay between OnPropertyChanged calls with no success.

I also did a clean/rebuild between these changes.

It would be great if someone could take the problem seriosuly.

Tested these on MacCatalyst.

Edit 1: On SfListView, if I change the CachingStrategy property to CreateNewTemplate, the bindings work. Which just underlines that there seems to be some problem with the DataTemplating in MAUI.

dotnet-policy-service[bot] commented 3 months ago

Hi @DevRafael2. We have added the "s/needs-repro" label to this issue, which indicates that we require steps and sample code to reproduce the issue before we can take further action. Please try to create a minimal sample project/solution or code samples which reproduce the issue, ideally as a GitHub repo that we can clone. See more details about creating repros here: https://github.com/dotnet/maui/blob/main/.github/repro.md

This issue will be closed automatically in 7 days if we do not hear back from you by then - please feel free to re-open it if you come back to this issue after that time.

dotnet-policy-service[bot] commented 3 months ago

This issue has been automatically marked as stale because it has been marked as requiring author feedback to reproduce the issue but has not had any activity for 4 days. It will be closed if no further activity occurs within 3 days of this comment. If it is closed, feel free to comment when you are able to provide the additional information and we will re-investigate.