Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将一个元素添加到ObservableCollection/DataGrid(当它变为空时)_C#_Wpf_Datagrid_Observablecollection - Fatal编程技术网

C# 将一个元素添加到ObservableCollection/DataGrid(当它变为空时)

C# 将一个元素添加到ObservableCollection/DataGrid(当它变为空时),c#,wpf,datagrid,observablecollection,C#,Wpf,Datagrid,Observablecollection,我有一个名为MyObservableCollection的ObservableCollection。其项目显示在数据网格中。我需要的是,当所有行从DataGrid中删除时,应该添加一个带有默认值的MyItem 如果一次删除所有行,以下操作将不起作用。当我一个接一个地删除它们时,它会起作用 void DataGrid_UnloadingRow(object sender, DataGridRowEventArgs e) { myDataGrid.Items.Refresh(); i

我有一个名为MyObservableCollection的
ObservableCollection
。其项目显示在
数据网格中。我需要的是,当所有行从
DataGrid
中删除时,应该添加一个带有默认值的
MyItem

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

void DataGrid_UnloadingRow(object sender, DataGridRowEventArgs e)
{
    myDataGrid.Items.Refresh();
    if (0 == MyObservableCollection.Count)
    {
        MyObservableCollection.Add(new MyItem());
    }
}
此外,我不能使用
CollectionChanged
事件处理程序,因为不能从该处理程序操作集合(这将导致无限循环)


如何实现上述功能?

订阅
CollectionChanged
事件。由于无法在
CollectionChanged
事件中修改
集合
,因此可以使用
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);
            }
        }
    }

您能解释一下
的确切含义吗?另外,我不能使用CollectionChanged事件处理程序,因为不能从该处理程序操作集合(会导致无限循环
?您当前的代码有什么问题?不要像这样操纵UI事件来进行数据管理。数据就是数据。UI就是UI。了解MVVM。无限循环将在您无条件地添加
或删除时发生。在我看来,直接使用
CollectionChanged
事件是很简单的