C# 将一个元素添加到ObservableCollection/DataGrid(当它变为空时)
我有一个名为MyObservableCollection的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
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
事件是很简单的