Je n'arrive pas à mettre à jour le DataGrid lorsque je supprime des éléments de Mon ObservableCollection. Lorsque je les supprime, les éléments de ObservableCollection qui sont liés au DataGrid sont supprimés correctement mais ils apparaissent toujours dans le DataGrid.Élément non supprimé de DataGrid lors de la suppression de ObservableCollection
Ceci est mon point de vue:
<Grid>
<DataGrid x:Name="ContactsList" Margin="20" AutoGenerateColumns="False" IsReadOnly="True" CanUserResizeRows="False"
CanUserResizeColumns="True" ColumnWidth="*" ItemsSource="{Binding Contacts, UpdateSourceTrigger=PropertyChanged, diag:PresentationTraceSources.TraceLevel=High}">
</DataGrid>
</Grid>
(colonnes sont peuplées dans le code-behind).
C'est moi-modèle:
public class ContactsViewModel : BindableBase
{
private readonly IRegionManager regionManager;
private readonly IEventAggregator eventAggregator;
private readonly IConfigurationContactsService contactsService;
private readonly DelegateCommand<object> deleteContactCommand;
private ObservableCollection<Contact> contactsCollection;
private ICollectionView contactsView;
public ContactsViewModel(IEventAggregator eventAggregator, IConfigurationContactsService contactsService, IRegionManager regionManager)
{
this.regionManager = regionManager;
this.contactsService = contactsService;
this.eventAggregator = eventAggregator;
this.deleteContactCommand = new DelegateCommand<object>(this.DeleteContact, this.CanDeleteContact);
this.contactsCollection = new ObservableCollection<Contact>(contactsService.GetContacts());
this.contactsView = CollectionViewSource.GetDefaultView(this.contactsCollection);
}
public ICollectionView ContactsView
{
get { return this.contactsView; }
}
public ObservableCollection<Contact> Contacts
{
get { return this.contactsCollection; }
}
public ICommand DeleteContactCommand
{
get { return this.deleteContactCommand; }
}
private void DeleteContact(object ignore)
{
IList<Contact> selectedContacts = contactsService.GetSelectedContacts();
foreach (Contact contact in selectedContacts)
{
if (contact != null)
{
contactsService.DeleteContact(contact);
}
}
SetProperty<ObservableCollection<Contact>>(ref this.contactsCollection, new ObservableCollection<Contact>(contactsService.GetContacts()), "Contacts");
// After this, the observable collection is updated correctly, but the datagrid does not delete the items.
}
private bool CanDeleteContact(object ignored)
{
return contactsService.GetSelectedContacts().Any();
}
}
Je ne vois pas où l'erreur est. Quelqu'un peut-il repérer l'erreur? Merci d'avance.
EDIT
Il y a une particularité sur ce point de vue. Il y a une vue principale avec une barre d'outils (où se trouve le bouton de suppression) et une région ContentTab qui contient deux vues: Vue A, Vue B). Le DataGrid est situé dans la vue A, et toutes les vues (A, B et MainView) ont le même viewmodel: ContactsViewModel.
La mise à jour n'est toujours pas effectuée et le service contactsService.GetContacts() renvoie exactement les éléments attendus. :/ – chincheta73
Etes-vous sûr que vous liez à la propriété Contacts alors? Si vous définissez un point d'arrêt dans le getter Contacts, est-il frappé lorsque la vue est chargée et après l'exécution de la méthode DeleteContact? – mm8
Il est frappé lorsque la vue est chargée, mais il n'est pas touché après l'exécution de la méthode DeleteContacts. – chincheta73