我可以';从DataGrid中删除无效行后,无法更新行

本文关键字:更新 无效 删除 DataGrid 我可以 | 更新日期: 2023-09-27 18:25:15

当我从ObservableCollection中删除一个包含无效数据的项时,datagrid不会清除它有错误的事实,所以一旦我删除它,它就好像DataGrid仍然有错误一样,不允许我编辑/添加和编辑数据。

我正在使用MVVM,所以我不能只执行datagrid.refresh:''

有什么想法吗?

我可以';从DataGrid中删除无效行后,无法更新行

我不知道这是否有效,但您可以尝试告诉数据网格整个集合已经更改:

两种选择:

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));
    }
}

我是用Phil的答案得出的:

    protected override void RemoveItem(int index)
    {
        this[index] = new EngineStatusUserFilter();
        base.RemoveItem(index);
        Refresh();
    }
    public void Refresh() {
        OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); } 

在删除旧对象之前,我将其设置为新对象,这样它将有效。

从ObservableCollection中删除项(存在验证错误)后,重新创建ObservableCollections并引发OnPropertyChanged。

通过刷新DataGrid,删除前创建的行仍然可以编辑,因为删除的项/行的验证错误已经消失。

像这样:

public ObservableCollection<Person> Persons { get; private set; }
...
private void DeleteRowCommand_Method()
{
    Persons.Remove(SelectedPerson);
    Persons = new ObservableCollection<Person>(Persons);
    OnPropertyChanged("Persons");
}
...