Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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# 如何删除datagrid wpf中的选定行?_C#_Wpf_Datagrid - Fatal编程技术网

C# 如何删除datagrid wpf中的选定行?

C# 如何删除datagrid wpf中的选定行?,c#,wpf,datagrid,C#,Wpf,Datagrid,我正在使用WPF datagrid,我需要删除选中的行,我的代码是 private void dataGridView1_PreviewKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Delete) { this.dataGridView1.Items.Remove(this.dataGridView1.SelectedItem); } } 但当我使用此代码时,会显示错误 Items

我正在使用WPF datagrid,我需要删除选中的行,我的代码是

private void dataGridView1_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Delete)
    {
         this.dataGridView1.Items.Remove(this.dataGridView1.SelectedItem);
    }
} 
但当我使用此代码时,会显示错误

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


如何删除所选行?

正如绑定到数据源的UI控件的错误描述中明确提到的,您应该操作数据源本身,而不是UI控件(在本例中是数据网格)


UI控件只是在用户界面中显示数据的一种方式,要显示编辑的、新的或修改的数据(例如,少1行),您只需对分配给DataGrid的ItemSource属性的基础数据源执行操作。

您永远不必从WPF网格中删除该行。你要做的是:

1) 使用
ObservableCollection
属性定义类型,该属性包含表示网格上值的对象列表

2) 将该属性绑定到网格控件


3) 现在,如果从绑定集合中添加/删除对象,相应的行将分别从控件的ui中添加/删除。

我认为您正在使用itemSource填充dataGridview。 从数据源中删除该项,然后刷新绑定

或者让您的数据源类继承自
INotifyPropertyChanged
并引发
PropertyChanged
事件,然后在列表框XAML上将UpdateSourceRigger设置为
PropertyChanged
事件,如下所示:

ItemsSource="{Binding MyListItems, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}

猜测您的数据网格绑定到ItemsSource(例如,ObservableCollection)。在这种情况下,不允许从视图中操作ItemsSource,而必须在ViewModel(即存储绑定对象的位置)中删除它。

异常非常明显。您需要从
ItemsSource
(基础集合)中删除项,而不是尝试从
dataGridView1.Items
集合中删除项。我执行了1和2个步骤,但不知道如何从控件的ui@MahmoudKassem:您需要从集合本身移除,如果它已正确绑定到控件,该行将从控件本身消失。