Я не могу обновить строки после удаления неверной строки из DataGrid - PullRequest
2 голосов
/ 21 февраля 2012

Когда я удаляю элемент из ObservableCollection, в котором есть недопустимые данные, datagrid не очищает тот факт, что в нем есть ошибки, поэтому после удаления он действует так, как если бы DataGrid все еще имел ошибки и выиграл не позволяет мне редактировать / добавлять и редактировать данные.

Я использую MVVM , поэтому я не могу просто сделать datagrid.refresh: \

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 21 февраля 2012

Я не знаю, будет ли это работать, но вы можете попытаться сообщить сетке данных, что вся коллекция изменилась:

Два варианта:

1) Поднять уведомление об изменении свойства дляколлекционная собственность.

public class MyViewModel : ViewModelBase
{
    private void RefreshItems()
    {
        RaisePropertyChanged("Items");
    }

    private ObservableCollection<DataItem> Items { ... }
}

2) Получите из ObservableCollection, чтобы вы могли вызвать событие NotifyCollectionChanged

public class MyCollection : ObservableCollection<DataItem>
{
    public void Refresh()
    {
        OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
    }
}
1 голос
/ 22 февраля 2012

Я придумал это, используя ответ Фила:

    protected override void RemoveItem(int index)
    {
        this[index] = new EngineStatusUserFilter();
        base.RemoveItem(index);
        Refresh();

    }

    public void Refresh() {
        OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); } 

Я установил старый объект на новый, прежде чем удалить его, чтобы он действовал.

0 голосов
/ 08 ноября 2013

После удаления элемента (с ошибкой проверки) из ObservableCollection воссоздайте ObservableCollection и поднимите OnPropertyChanged.

Это обновление DataGrid, строки, созданные до удаления, остаются и доступны для редактирования, поскольку ошибка проверки удаленного элемента / строки исчезла.

Как это:

public ObservableCollection<Person> Persons { get; private set; }
...
private void DeleteRowCommand_Method()
{
    Persons.Remove(SelectedPerson);
    Persons = new ObservableCollection<Person>(Persons);
    OnPropertyChanged("Persons");
}
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...