如何在WPF数据表格中删除所选行?

5
我正在使用WPF数据网格,需要删除选定的行,我的代码如下:
private void dataGridView1_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Delete)
    {
         this.dataGridView1.Items.Remove(this.dataGridView1.SelectedItem);
    }
} 

但是当我使用这段代码时,出现了错误

操作无效,因为ItemsSource正在使用中。请使用ItemsControl.ItemsSource访问和修改元素。

如何删除选定的行?


4
异常信息很清楚。你需要从“ItemsSource”(基础集合)中删除该项,而不是尝试从“dataGridView1.Items”集合中删除。 - Sriram Sakthivel
4个回答

6
您不必从WPF网格中删除行。您需要做的是:
1)定义一个类型,其中包含一个ObservableCollection属性,该属性包含呈现网格上的值的对象列表。
2)将该属性绑定到您的网格控件。
3)现在,如果您向绑定的集合中添加/删除对象,则相应的行将从控件UI中添加/删除。

我已经执行了1和2步骤,但我不知道如何从控件的UI中删除。 - Mahmoud Kassem
@MahmoudKassem:你需要从集合本身中移除,如果它与控件正确绑定,行将从控件本身消失。 - Tigran

2
我认为您正在使用itemSource来填充数据网格视图。 从数据源中删除该项,然后刷新绑定。
或者让您的数据源类继承自“INotifyPropertyChanged”,并引发“PropertyChanged”事件。在listbox XAML上将UpdateSourceTrigger设置为“PropertyChanged”事件,如下所示:
ItemsSource="{Binding MyListItems, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}

2

我猜测您的DataGrid是绑定到一个ItemsSource(例如ObservableCollection)上的。在这种情况下,从视图中操纵ItemsSource是不允许的,您应该在ViewModel中去除它(那里存储了您绑定的对象)。


1

正如错误描述中清楚提到的那样,对于绑定到数据源的 UI 控件,您应该操作数据源本身而不是 UI 控件(在这种情况下是数据网格)。

UI 控件只是一种在用户界面中呈现数据的方式,为了显示编辑或新的或修改后的数据(例如少 1 行),您应该简单地对分配给 DataGrid 的 ItemSource 属性的底层数据源进行操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接