Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 当WPF DataGrid绑定到XmlDataProvider时,如何在WPF DataGrid中创建新行?_C#_Wpf_Wpftoolkit_Xmldataprovider - Fatal编程技术网

C# 当WPF DataGrid绑定到XmlDataProvider时,如何在WPF DataGrid中创建新行?

C# 当WPF DataGrid绑定到XmlDataProvider时,如何在WPF DataGrid中创建新行?,c#,wpf,wpftoolkit,xmldataprovider,C#,Wpf,Wpftoolkit,Xmldataprovider,我有一个XmlDataProvider绑定到WPF DataGrid控件的项目。我将DataGrid上的绑定设置如下: <dg:DataGrid ItemsSource="{Binding Source={StaticResource XmlData}, XPath=Root/People/Person}" AutoGenerateColumns="False"> <dg:DataGrid.Columns> <dg:

我有一个XmlDataProvider绑定到WPF DataGrid控件的项目。我将DataGrid上的绑定设置如下:

<dg:DataGrid ItemsSource="{Binding Source={StaticResource XmlData}, XPath=Root/People/Person}"
             AutoGenerateColumns="False">
    <dg:DataGrid.Columns>
        <dg:DataGridTextColumn Header="ID" Binding="{Binding XPath=ID}"/>
        <dg:DataGridTextColumn Header="Name" Binding="{Binding XPath=Name}"/>
    </dg:DataGrid.Columns>
</dg:DataGrid>


用户可以使用DataGrid编辑条目,而不会出现任何问题。我无法做到的是允许用户使用DataGrid添加一个新行(即,一个新的人)。如何允许此操作?

您是否尝试过在DataGrid上设置CanUserAddRows=“True”

问题在于用户无法添加行,或者当用户添加行时,它没有保存到备份XML存储中?我可以轻松地将带有CanUserAddRows=“True”的datagrid添加到WPF应用程序,将网格绑定到内存列表,然后让用户添加反映在内存列表中的行。这让我觉得你的问题是把钱存到后备商店


当我绑定到文件系统上的XML时,我不能再向数据网格添加记录。我认为您需要一个小的解决方法,将文件读入内存集合,绑定到该集合,然后在用户添加行时相应地更新文件

确保设置:
CanUserAddRows=“True”
并且绑定类的默认构造函数可用。

要向绑定到XmlDataSource的WPF数据网格添加行,需要直接修改备份数据存储。您可以使用DataGrid从用户收集新行信息,然后在RowEditEnding事件中,您可以将行的信息添加到备份存储中,并防止DataGrid实际尝试使用其内部逻辑提交编辑。由于DataGrid绑定到XmlDataSource,它将显示您对备份存储所做的更改

以下是总体思路:

private void MyDataGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
  if (e.EditAction == DataGridEditAction.Cancel)
  {
    e.Cancel = false;
    return;
  }

  if (e.EditAction == DataGridEditAction.Commit)
  {
    DataGridRow dgr = e.Row;
    XmlElement xe = myXmlDataProvider.Document.CreateElement("NewRowElement");
    foreach(DataGridCell cell in dgr.Cells)
    {
      xe.SetAttribute(cell.Name, cell.Value);
    }
    dataProvider.Document.DocumentElement.AppendChild(xe);
    e.Cancel = true;
  }
}

我今天遇到了同样的问题。我已经显式地设置了CanUserAddRows=true,但当我在即时窗口中发现时,它立即变为false。原因是绑定类没有默认构造函数。添加默认构造函数后,我在末尾得到了新行。我无法从
dgr
DataGridRow
中找到
Cells
属性这是4.0之前的WPF信息--我想行和单元格集合可能不再是公共的了?检查项目集合。我回答的要点是,您需要修改备份数据存储,我认为这仍然是正确的。太棒了!我从来没有意识到默认构造函数是必要的,你能详细说明一下你对默认构造函数的意思吗?如何使用XmlDataSource实现这一点?