我的问题
我正在尝试防止用户在使用内置的.NET DataGrid
AddNewItem功能时添加空的DataGrid
行。因此,当用户试图提交DataGrid
的AddNew事务并将PageItemViewModel.Text
留空时,它应该从DataGrid
中消失。
代码
ViewModels
public class PageItemViewModel
{
public string Text { get; set; }
}
public class PageViewModel
{
public ObservableCollection<PageItemViewModel> PageItems { get; } = new ObservableCollection<PageItemViewModel>();
}
视图
<DataGrid AutoGenerateColumns="True"
CanUserAddRows="True"
ItemsSource="{Binding PageItems}" />
我已经尝试过
...在处理以下内容时,从DataGrid
的ItemsSource
中删除自动创建的对象:
DataGrid.AddingNewItem
PageViewModel.PageItems
的INotifyCollectionChanged.CollectionChanged
IEditableCollectionView.CancelNew
DataGrid.OnItemsChanged
...但总是收到异常,例如:
- "System.InvalidOperationException: 'Removing' is not allowed during an AddNew or EditItem transaction."
- "System.InvalidOperationException: 在 CollectionChanged 事件期间不允许更改 ObservableCollection。"
- "System.InvalidOperationException: ItemsSource 正在使用时无法进行操作。请改用 ItemsControl.ItemsSource 访问和修改元素。"
我的问题
当给定条件为真(在本例中为:String.IsNullOrWhiteSpace(PageItemViewModel.Text) == true
)时,如何防止新创建的 PageItemViewModel
被添加到 ObservableCollection<PageItemViewModel>
中。
编辑:
@picnic8: AddingNewItem
事件不提供任何形式的RoutedEventArgs
,因此没有Handled
属性。相反,它是AddingNewItemEventArgs
。你的代码无效。
private void DataGrid_AddingNewItem(object sender, AddingNewItemEventArgs e)
{
var viewModel = (PageItemViewModel)e.NewItem;
bool cancelAddingNewItem = String.IsNullOrWhiteSpace(viewModel.Text) == true;
// ??? How can i actually stop it from here?
}
OnItemsChanged
。 - MariaSystem.InvalidOperationException: 'Removing' is not allowed during an AddNew or EditItem transaction.
异常。 - ˈvɔlə