| WPF中綁定XML數據源本實例最終執(zhí)行效果: 
 左邊是一個ListBox,用來顯示用戶的主要信息;右邊是4個TextBox,用來顯示左邊ListBox中被選中用戶的詳細信息。 本實例中,存在一個XML格式的數據源,XML文件格式如下: <?xml version="1.0"?> <Company> <Employee> <ID>372401</ID> <Name>徐棟</Name> <Age>26</Age> <Sex>男</Sex> </Employee>   …… </Company>  接下來,使用WPF的XAML語言來創(chuàng)建界面,訪問該數據源。 對數據源的調用我放在<Window.Resources>中。通過<XmlDataProvider>標記,實現對XML數據源的調用,x:Key是資源的引用的ID,Source是XML資源文件路徑,XPath指出XML文件內部數據存放的路徑。 在<Window.Resources>還有另外兩個標記,分別是DataTemplate和Style。 DataTemplate是ListBox的ListBoxItem中顯示的數據內容,在DataTemplate中放置一個TextBlock用來,將TextBlock的Text屬性與XML數據源中的Name標記綁定,也就說用來顯示XML文件中的Name。 Style是WPF的樣式。在這里,我們指定了本Window中,所有的TextBlock都采用Style中定義的樣式。 整個Source中代碼如下:   <Window.Resources> <XmlDataProvider x:Key="employeeSource" Source="Employees.xml" XPath="/Company/*"/> <DataTemplate x:Key="showName"> <TextBlock Text="{Binding XPath=Name}" /> </DataTemplate> <Style TargetType="{x:Type TextBlock}" > <Setter Property="FontStyle" Value="Italic" /> <Setter Property="FontFamily" Value="Trebuchet MS" /> <Setter Property="FontSize" Value="12" /> </Style> </Window.Resources> 資源文件已經定義號,然后在Windows中放置Grid布局控件來規(guī)劃窗口。在Grid上分別放置用來顯示名稱的ListBox和用來顯示相信用戶信息的TextBlock。在ListBox和TextBlock中顯示的數據,來自上面定義的資源,這里通過綁定功能實現。 首先綁定ListBox。 首先將ListBox的ItemSource屬性與資源中的XmlDataProvider綁定,說明ListBox中Item的數據源。 ItemsSource="{Binding Source={StaticResource employeeSource}}" 然后將ListBox的ItemTemplate屬性與資源中的DataTemplate 綁定,說明ListBox中Item的數據顯示內容。 ItemTemplate="{StaticResource showName}" 最后,非常重要的一點,我們需要將ListBox與數據源設置為同步,這樣數據源中的游標才會隨著選中ListBox中不同Item而移用。 IsSynchronizedWithCurrentItem="True" 這個ListBox的代碼如下:     <ListBox Grid.Column="0" Grid.Row="0" Margin="5,5,5,5" ItemsSource="{Binding Source={StaticResource employeeSource}}" ItemTemplate="{StaticResource showName}" IsSynchronizedWithCurrentItem="True"/> 通過以上設置,ListBox與數據源綁定結束,已經在ListBox中列出XML中的Name數據,接下來需要使用TextBlock顯示用戶詳細信息。 實現這個功能,我們需要定義四個TextBlock分別顯示XML中的ID、Name、Age 和Sex 四項數據,然后將這個四個TextBlock的Text分別綁定XML中四項數據。這四個TextBlock實現方式基本相同,以顯示ID的TextBlock為例,說明TextBlock的綁定方式。 TextBlock的數據源綁定ListBox不同,是采用DataContext來綁定。TextBlock的Text屬性與ID綁定。實現代碼如下:       <TextBlock> ID: <TextBlock Margin="10,0,0,0" DataContext="{Binding Source={StaticResource employeeSource}}" Text="{Binding XPath=ID}"/> </TextBlock> 至此,一個最簡單的WPF與XML綁定的程序就已經完成,可以實現文章開頭處描寫的功能。 同時,WPF還能夠與SQL數據源綁定,自定義的對象綁定,可見WPF的數據綁定功能非常強大;在這個XML綁定的程序,沒有一行C#的代碼,通過對XAML這種聲明式語言的修改,就能實現以前實現非常復雜的數據綁定功能,也體現了WPF簡單之處。(徐棟) 本文附帶Demo的全部代碼如下: XML文件(Employees.xml): <?xml version="1.0"?> <Company> <Employee> <ID>372401</ID> <Name>徐棟</Name> <Age>26</Age> <Sex>男</Sex> </Employee> <Employee> <ID>151806</ID> <Name>呂布</Name> <Age>36</Age> <Sex>男</Sex> </Employee> <Employee> <ID>108208</ID> <Name>貂蟬</Name> <Age>19</Age> <Sex>女</Sex> </Employee> <Employee> <ID>051806</ID> <Name>關羽</Name> <Age>36</Age> <Sex>男</Sex> </Employee> </Company> XAML文件(Windows1.XAML): <Window x:Class="WPFDataBindingXML.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="WPFDataBindingXML" Height="300" Width="300" > <Window.Resources> <XmlDataProvider x:Key="employeeSource" Source="Employees.xml" XPath="/Company/*"/> <DataTemplate x:Key="showName"> <TextBlock Text="{Binding XPath=Name}" /> </DataTemplate> <Style TargetType="{x:Type TextBlock}" > <Setter Property="FontStyle" Value="Italic" /> <Setter Property="FontFamily" Value="Trebuchet MS" /> <Setter Property="FontSize" Value="12" /> </Style> </Window.Resources> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition/> </Grid.RowDefinitions> <ListBox Grid.Column="0" Grid.Row="0" Margin="5,5,5,5" ItemsSource="{Binding Source={StaticResource employeeSource}}" ItemTemplate="{StaticResource showName}" IsSynchronizedWithCurrentItem="True"/>     <StackPanel Margin="5,5,5,5" Grid.Column="1" Grid.Row="0"> <TextBlock> ID: <TextBlock Margin="10,0,0,0" DataContext="{Binding Source={StaticResource employeeSource}}" Text="{Binding XPath=ID}"/> </TextBlock> <TextBlock> Name: <TextBlock Margin="10,0,0,0" DataContext="{Binding Source={StaticResource employeeSource}}" Text="{Binding XPath=Name}"/> </TextBlock> <TextBlock> Age: <TextBlock Margin="10,0,0,0" DataContext="{Binding Source={StaticResource employeeSource}}" Text="{Binding XPath=Age}"/> </TextBlock> <TextBlock> Sex: <TextBlock Margin="10,0,0,0" DataContext="{Binding Source={StaticResource employeeSource}}" Text="{Binding XPath=Sex}"/> </TextBlock> </StackPanel> </Grid> </Window> | 
|  |