从DataGrid中删除无效行后,我无法更新行

时间:2012-02-21 17:07:04

标签: c# wpf mvvm datagrid

当我从ObservableCollection中删除包含无效数据的项目时,datagrid将无法清除它有错误的事实,因此一旦删除它就会像{{1}一样仍有错误,不允许我编辑/添加和编辑数据。

我正在使用 MVVM ,所以我不能只做DataGrid:\

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

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

两个选项:

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 :(得分:1)

我用菲尔的回答想出了这个:

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

    }

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

我将旧对象设置为新对象,然后将其删除,以使其有效。

答案 2 :(得分:0)

从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");
}
...