正确地将XML绑定到WPF数据网格(第2轮),并在运行时创建新的数据网格
本文关键字:数据 数据网 网格 创建 运行时 绑定 XML WPF 正确地 2轮 | 更新日期: 2023-09-27 18:03:23
我有一个XML文件,我要用它作为我的项目数据库,这是我的XML文件:
http://pastebin.com/JgyYkn4E我发现了这个问题并尝试了一下:如何将xml绑定到WPF数据网格正确?
我想分别显示每个Semestre的Cadeiras,每个DataGrid中有一个。改变了一些次要的东西,以适应我的项目,但它没有工作,花了几个小时后,我设法把它的工作查询这个XElement:
XElement db = XElement.Load("db.xml");
var cadeira = from elem in db.Descendants("Semestre")
where elem.Element("Nome").Value == "Semestre 1"
select elem.Element("Cadeiras");
dataGrid1.DataContext = cadeira;
第一个问题:这是有效的,但我只是想知道如果这是最好的事情,因为,这个DataGrid是在TabItem(这是在TabControl内),以后我将不得不创建新的TabItem(每个学期,DataGrid内部与Cadeiras各自的学期)在运行时,没有XAML绑定援助。
第二个问题:在XAML中,这里的绑定有什么区别?如何正确地将xml绑定到WPF数据网格?和这个WPF数据网格绑定到xml ?
提前感谢。
最诚挚的问候,
- n
您可以通过数据模板做很多,在xml - parser中试试这个例子:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Page.Resources>
<XmlDataProvider x:Key="data" XPath="GPA/Semestre" Source="http://pastebin.com/raw.php?i=JgyYkn4E"/>
</Page.Resources>
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<TabControl ItemsSource="{Binding Source={StaticResource data}}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding XPath=Nome}"/>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding XPath=Cadeiras/Cadeira}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Activa" Binding="{Binding XPath=Activa}"/>
<DataGridTextColumn Header="Nome" Binding="{Binding XPath=Nome}"/>
<DataGridTextColumn Header="Nota" Binding="{Binding XPath=Nota}"/>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</ScrollViewer>
</Page>
这将为您创建TabControl和所有datagrid。(在您的示例中,Cadeira看起来并不复杂,因此每个Cadeira只是DataGrid中的一行,如果每个Cadeira需要一个DataGrid,您也可以通过创建ItemTemplate
为DataGrid
的ItemsControl
来实现)
这些问题中的方法之间的区别在于它们使用不同的类来表示XML,通常您不会使用XElement
,因为它在绑定中不支持XPath
。
LINQ到XML对象XDocument和XElement不使用XPath。具体操作请参见如何:绑定到XDocument、XElement或LINQ用于XML查询结果
没有固有的正确方法来做到这一点,但由于XmlDataProviders
和XmlDocuments
都有本地绑定支持,除非我有重要的理由不这样做。