Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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添加可编辑行_C#_Wpf_Xaml_Datagrid - Fatal编程技术网

C# DataGrid添加可编辑行

C# DataGrid添加可编辑行,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,我有一个datagrid,有两列,没有初始数据,我需要让用户能够添加他想要的列 我所做的是添加一个DataGrid、一个用于添加行的按钮和一个表示该行的类: Xaml: FilterItem.cs: public class FilterItem { public string key { get; set; } public string value { get; set; } } 问题是添加的行不可编辑,双击单元格会引发异常: 此视图不允许使用“EditItem”。(未处理

我有一个datagrid,有两列,没有初始数据,我需要让用户能够添加他想要的列

我所做的是添加一个DataGrid、一个用于添加行的按钮和一个表示该行的类:

Xaml:

FilterItem.cs:

public class FilterItem
{
    public string key { get; set; }
    public string value { get; set; }
}
问题是添加的行不可编辑,双击单元格会引发异常:

此视图不允许使用“EditItem”。(未处理InvalidOperationException)


我做错了什么?

我想这是因为访问集合对象的属性是只读的。有关信息,请参见此处:

我将为以下项目创建一个商店:

private ObservableCollection<FilterItem> _data = new ObservableCollection<FilterItem>();

public ObservableCollection<FilterItem> Data
{
  get { return _data; }
}
最后是你的按钮:

_data.Add(new FilterItem());
这样,您就可以在窗口中创建一个存储,并将DataGrid绑定到此存储。每次更改项目集合时,
DataGrid
都会显示新值,您可以更改项目

我建议为您的FilterItem实现INotifyPropertyChanged。这样,每次更改项目时,都会通知
DataGrid

private ObservableCollection<FilterItem> _data = new ObservableCollection<FilterItem>();

public ObservableCollection<FilterItem> Data
{
  get { return _data; }
}
<DataGrid ... ItemsSource="{Binding Data, ElementName=window}">
_data.Add(new FilterItem());