簡體   English   中英

將 XML 正確綁定到 WPF DataGrid(第 2 輪)並在運行時創建新的 DataGrid

[英]Binding XML to the WPF DataGrid correctly (Round 2) And creating new DataGrid at Run-Time

我有一個 XML 文件,我將用作我的項目的數據庫,這是我擁有的 xml 文件:

http://pastebin.com/JgyYkn4E

我發現了這個問題並嘗試了一下: 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來實現,其ItemTemplateDataGrid


這些問題中的方法之間的區別在於它們使用不同的類來表示 XML,通常您不會使用XElement ,因為它不支持綁定中的XPath

LINQ 到 XML 對象XDocumentXElement不使用 XPath。有關詳細信息,請參見如何:綁定到 XDocument、XElement 或 LINQ 以獲取 XML 查詢結果。


沒有固有的正確方法來執行此操作,但由於對XmlDataProvidersXmlDocuments有本機綁定支持,我會使用它 go 除非我有重要的理由不這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM