WPF 将行添加到 XML 绑定数据网格
本文关键字:绑定 数据 数据网 网格 XML 添加 WPF | 更新日期: 2023-09-27 18:36:23
调试时,无法向数据网格添加行。
设置:我有一个 XML 文件 (C:''test.xml),用作 DataGrid 的 XmlDataProvider
XAML:
<Window x:Class="iDraft.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="185" Width="176">
<Grid>
<Grid.DataContext>
<XmlDataProvider x:Name="myData" XPath="Table/ENTRY" />
</Grid.DataContext>
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" CanUserAddRows="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Text" Binding="{Binding XPath=text, Mode=TwoWay}"/>
<DataGridTemplateColumn Header="Combobox">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Text="{Binding XPath=combo, Mode=TwoWay}">
<ComboBoxItem>0</ComboBoxItem>
<ComboBoxItem>1</ComboBoxItem>
<ComboBoxItem>2</ComboBoxItem>
<ComboBoxItem>3</ComboBoxItem>
<ComboBoxItem>4</ComboBoxItem>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml;
namespace iDraft
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
myData.Source = new Uri(@"C:'test.xml");
}
}
}
XML(测试.xml):
<?xml version="1.0" encoding="utf-8" ?>
<Table>
<ENTRY>
<text>1</text>
<combo>1</combo>
</ENTRY>
<ENTRY>
<text>2</text>
<combo>1</combo>
</ENTRY>
</Table>
我挖掘了一些旧的 vb.net 代码,发现了以下内容:
Imports System.Xml
Imports System.Data
Class MainWindow
Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
Dim xmlFile As XmlReader
Dim ds As New DataSet
xmlFile = XmlReader.Create("C:'test.xml", New XmlReaderSettings())
ds.ReadXml(xmlFile)
xmlFile.Close()
myData.Source = ds.Tables(0)
End Sub
End Class
由于myData.Source
是 URI,因此它始终是只读的。您将需要将XML中的数据放入另一种介质(类/数据表)中,并处理添加/更新并将数据保存回XML格式。
分辨率:我摆脱了 XmlDataProvider,并在 XAML 中将 XPath 更改为 Path。除此之外,我的后端代码保持不变(vb.net 不是 C# 代码)。
唯一需要注意的是,绑定路径必须引用 XML 节点名称。