你可以使用ItemTemplate屬性給控件({StaticResource RSSTemplate})應用一個模板。最后,當列表框控件中選擇的項發生改變的時候,會調用TitleChanged事件(它是在SelectionChanged屬性中指定的):
<StackPanel>
<TextBlock DockPanel.Dock="Left"
FontSize="18"
FontWeight="Bold" Margin="10"
HorizontalAlignment="Left">
Titles
</TextBlock>
<ListBox HorizontalAlignment="Left"
Margin="10,0,10,10"
Width="300"
Background="LightYellow"
ItemsSource="{Binding Source={StaticResource RSSData}, XPath=item}"
ItemTemplate="{StaticResource RSSTemplate}"
SelectionChanged="TitleChanged" />
</StackPanel>
當我們選中列表框控件中的數據項的時候,應用程序在頁面右邊顯式該數據項的描述信息。在下一步中,你希望顯示標題("Description"),它后面緊跟著<DockPanel>元素,這個元素又包含了一個綁定到描述元素({Binding XPath=description})的<TextBlock>元素。第二個<DockPanel>元素用于顯示與選中數據項相關的URL({Binding XPath=link}),如圖4所示:
<StackPanel>
<TextBlock DockPanel.Dock="Left"
FontSize="18"
FontWeight="Bold" Margin="10"
HorizontalAlignment="Left">
Description
</TextBlock>
<DockPanel HorizontalAlignment="Left" Name="dpDescription" Width="500">
<TextBlock Name="txtDescription"
DockPanel.Dock="Top"
FontSize="Small"
HorizontalAlignment="Left"
TextWrap="wrap"
Margin="10,0,10,10"
Background="Black"
Foreground="White"
TextContent="{Binding XPath=description}"
/>
</DockPanel>
<DockPanel HorizontalAlignment="Left"
Name="dpURL"
Width="500"
>
<TextBlock Name="txtURL"
DockPanel.Dock="Top"
FontSize="Small"
HorizontalAlignment="Left"
TextWrap="wrap"
TextContent="{Binding XPath=link}"
Margin="10,10,10,10"
Foreground="Blue"/>
</DockPanel>
</StackPanel>
</DockPanel>
</Page>

圖4:顯示具體描述信息。被選中的RSS項的描述信息和
鏈接被綁定到TextBlock控件。當用戶在列表框中選擇項目的時候它們會改變。
最后,你需要完善前面提到的TitleChanged()事件。在這個事件中,當用戶選擇列表框控件中的某個數據項的時候,你需要改變DataContext屬性的dpDescription和dpURL <DockPanel>元素:
Partial Public Class Page1
Inherits Page
Private Sub TitleChanged(ByVal sender As Object, _
ByVal args As SelectionChangedEventArgs)
Dim lstbox As ListBox = sender
If lstbox.SelectedItem IsNot Nothing Then
dpDescription.DataContext = lstbox.SelectedItem
dpURL.DataContext = lstbox.SelectedItem
End If
End Sub
End Class
我們已經完成了!按F5測試應用程序。RSS XML文檔中的數據項都顯示在列表框控件中。你可以點擊列表框控件中的數據項,相應的描述信息和URL就會顯示在頁面右側(圖1所示)。
綁定到外部的XML源
前面的例子演示了如何把XML數據島綁定到WPF應用程序的多個控件上。在應用程序內使用XML數據島引起的一個問題是,對XML數據的任何修改都要求修改/編譯應用程序。更好的方法是把XML數據存儲在外部文件中,在應用程序中引用該文件。例如,你可以把XML數據存儲在RSS.xml文件中,接著可以在應用程序中引用它:
<XmlDataSource x:Key="RSSData" Source="RSS.xml" XPath="/rss/channel" />
動態地載入XML源
盡管你可以引用外部的XML文件,但是更好的辦法可能是從URL動態地載入XML文檔。在這個例子中,你可以修改<XmlDataSource>元素:
<XmlDataSource x:Key="RSSData" Source="http://services.devx.com/outgoing/devxfeed.xml" XPath="/rss/channel" />
你可以使用下面一些URL試一試,可以發現每次都載入了不同的RSS數據項:
· http://services.devx.com/outgoing/dotnet.xml
· http://services.devx.com/outgoing/wirelessfeed.xml
· http://services.devx.com/outgoing/enterprisefeed.xml
· http://services.devx.com/outgoing/xmlfeed.xml
進一步改善
在本文中你看到了在WPF中數據綁定是如何進行的。假如你希望進一步改善示例應用程序,可以考慮修改應用程序,答應用戶從URL列表中選擇一個(代替手動地修改XML文檔源)。進入討論組討論。