当ObservableCollection/DataGrid变为空时,向其添加一个元素

本文关键字:添加 元素 一个 DataGrid ObservableCollection | 更新日期: 2023-09-27 18:26:50

我有一个名为MyObservableCollectionObservableCollection<MyItem>。其项目显示在DataGrid中。我需要的是,当从DataGrid中删除所有行时,应该添加回一个具有默认值的MyItem

如果我一次删除所有行,以下操作将不起作用。当我一个接一个地删除它们时,它就会起作用。

void DataGrid_UnloadingRow(object sender, DataGridRowEventArgs e)
{
    myDataGrid.Items.Refresh();
    if (0 == MyObservableCollection.Count)
    {
        MyObservableCollection.Add(new MyItem());
    }
}

此外,我不能使用CollectionChanged事件处理程序,因为不能从该事件处理程序操作集合(这将导致无限循环)。

我如何实现上述功能

当ObservableCollection/DataGrid变为空时,向其添加一个元素

订阅CollectionChanged事件。由于CollectionChanged事件中无法修改Collection,因此可以使用Dispatcher类对其进行修改。请参阅下面的示例代码。

    void MyObservableCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        if (e.Action == NotifyCollectionChangedAction.Remove || e.Action == NotifyCollectionChangedAction.Reset)
        {
            if (MyObservableCollection.Count == 0)
            {
                Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                    {
                        MyObservableCollection.Add(new MyItem());
                    }), null);
            }
        }
    }