1. 程式人生 > >數據綁定(六)使用XML數據作為Binding的Source

數據綁定(六)使用XML數據作為Binding的Source

encoding 分享 article emp spa element HA isp class

原文:數據綁定(六)使用XML數據作為Binding的Source

.NET Framework提供了兩套處理XML數據的類庫

1. 符合DOM標準的類庫:包括XmlDocument、XmlElement、XmlNode、XmlAttribute等類,這套類庫的特定是中規中矩、功能強大,但也背負了太多XML的傳統和復雜

2. 已LINQ為基礎的類庫:包括XDocument、XElement、XNode、XAttribute等類,這套類庫的特點是可以使用LINQ進行查詢和操作,方便快捷

xml文件內容如下:

<?xml version="1.0" encoding="utf-8" ?>
<StudentList>
  <Student id="1">
    <Name>Tim</Name>
  </Student>
  <Student id="2">
    <Name>Tom</Name>
  </Student>
  <Student id="3">
    <Name>Vina</Name>
  </Student>
  <Student id="4">
    <Name>Emily</Name>
  </Student>
</StudentList>

界面代碼如下:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="244" Width="412">
    <StackPanel Background="LightBlue">
        <ListView x:Name="listViewStudents" Height="130" Margin="5">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Id" Width="80" DisplayMemberBinding="{Binding XPath=@id}" />
                    <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding XPath=Name}" />
                </GridView>
            </ListView.View>
        </ListView>
        <Button Content="Load" Click="Button_Click" Height="25" Margin="5, 0" />
    </StackPanel>
</Window>

其中,兩列分別綁定到XPath上

按鈕的點擊處理代碼如下:

            XmlDocument doc = new XmlDocument();
            doc.Load("Students.xml");

            XmlDataProvider xdp = new XmlDataProvider();
            xdp.Document = doc;
            xdp.XPath = @"/StudentList/Student";

            listViewStudents.DataContext = xdp;
            listViewStudents.SetBinding(ListView.ItemsSourceProperty, new Binding());

代碼定義了一個XmlDataProvider對象,使用XmlDataProvider對象讀取一個xml文件,可以通過load方法加載一個xml,也可以通過對它的Source屬性賦一個Uri來加載一個網絡上的xml,例如:

xdp.Source = new Uri(@"d:\Students.xml")
XmlDataProvider對象的XPath屬性通過一個XPath指定了所有目標元素的路徑

運行效果如圖:

技術分享圖片


xml數據可以作為線性數據的數據源,也可以用於展現樹形數據結構,界面代碼如下:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="244" Width="412">
    <Window.Resources>
        <XmlDataProvider x:Key="xdp" XPath="FileSystem/Folder">
            <x:XData>
                <FileSystem xmlns="">
                    <Folder Name="Books">
                        <Folder Name="Programming">
                            <Folder Name="Windows">
                                <Folder Name="WPF" />
                                <Folder Name="MFC" />
                                <Folder Name="Delphi" />
                            </Folder>
                        </Folder>
                        <Folder Name="Tools">
                            <Folder Name="Development" />
                            <Folder Name="Designment" />
                            <Folder Name="Players" />
                        </Folder>
                    </Folder>
                </FileSystem>
            </x:XData>
        </XmlDataProvider>
    </Window.Resources>
    <Grid>
        <TreeView ItemsSource="{Binding Source={StaticResource ResourceKey=xdp}}">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding XPath=Folder}">
                    <TextBlock Text="{Binding XPath=@Name}" />
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>
    </Grid>
</Window>

運行效果如圖:

技術分享圖片


數據綁定(六)使用XML數據作為Binding的Source