[英]Binding XML to the WPF DataGrid correctly (Round 2) And creating new DataGrid at Run-Time
我有一個 XML 文件,我將用作我的項目的數據庫,這是我擁有的 xml 文件:
我發現了這個問題並嘗試了一下: How to bind xml to the WPF DataGrid correctly?
of each , separately, one in each DataGrid.我想分別在每個 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 內),稍后我將不得不創建新的 TabItems(對於每個學期,帶有DataGrid 在運行時與相應學期的 Cadeiras 一起),沒有 XAML 綁定幫助。
第二個問題:在 XAML 中,這里的綁定有什么區別如何正確地將 xml 綁定到 WPF DataGrid? 並將此WPF Datagrid 綁定到 xml ?
提前致謝。
最好的祝福,
-N
您可以通過數據模板做很多事情,在 XAML-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。 (在您的示例中,Cadeiras 看起來並不復雜,因此它們中的每一個都只是 DataGrid 中的一行,如果每個 Cadeira 需要一個 DataGrid,您也可以通過創建一個ItemsControl
來實現,其ItemTemplate
是DataGrid
)
這些問題中的方法之間的區別在於它們使用不同的類來表示 XML,通常您不會使用XElement
,因為它不支持綁定中的XPath
。
LINQ 到 XML 對象XDocument和XElement不使用 XPath。有關詳細信息,請參見如何:綁定到 XDocument、XElement 或 LINQ 以獲取 XML 查詢結果。
沒有固有的正確方法來執行此操作,但由於對XmlDataProviders
和XmlDocuments
有本機綁定支持,我會使用它 go 除非我有重要的理由不這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.