Я пытаюсь обновить datagrid при удалении элементов из моего ObservableCollection. Когда я их удаляю, элементы в ObservableCollection, привязанные к DataGrid, удаляются правильно, но они все еще отображаются в DataGrid.Элемент, который не удаляется из DataGrid при удалении из ObservableCollection
Это мое мнение:
<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>
(столбцы заполняются в коде-позади).
Это мое мнение-модель:
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();
}
}
Я не могу видеть, где ошибка. Может ли кто-нибудь обнаружить ошибку? Заранее спасибо.
EDIT
Существует одна особенность этой точки зрения. Существует Основной вид с панелью инструментов (где кнопка удаления) и область ContentTab, которая содержит два вида: View A, View B). DataGrid находится в представлении A, и все представления th (A, B и MainView) имеют одну и ту же модель просмотра: ContactsViewModel.
Все еще не обновляется, а контактыService.GetContacts() возвращает именно те элементы, которые я ожидаю. :/ – chincheta73
Вы уверены, что привязываетесь к свойству "Контакты"? Если вы установите контрольную точку в приемнике контактов, будет ли она ударяться при загрузке представления и после выполнения метода DeleteContact? – mm8
Он попадает при загрузке представления, но он не получает удар после того, как метод DeleteContacts был вызван. – chincheta73