国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

在Avalon中建立數據識別的應用程序

2019-11-17 04:41:19
字體:
來源:轉載
供稿:網友

  在WPF(Windows PResentation Foundation)中,可以將UI元素綁定在多種數據源上,其中包括xml數據、Web服務、數據庫等等。本文的示例項目使用XML數據源演示了在Windows顯示基礎(Presentation Foundation)中數據綁定是如何工作的。

  在WPF中你可以把UI(用戶界面)元素綁定到多種數據源,包括XML數據、Web服務、數據庫等等。數據綁定是WPF的一個很大的話題;討論數據綁定的細節和裂隙則超出了本文的范圍。為了簡單,我將演示如何把一個典型的WPF應用程序綁定到XML數據源,并解釋其后臺的細節信息。為了讓這個例子有實際用處,我將建立一個簡單的rss閱讀器,它接受RSS XML文檔,并使用數據綁定顯示文檔中的多個數據項。圖1顯式了完整的應用程序。

在Avalon中建立數據識別的應用程序
圖1:Avalon RSS閱讀器應用程序。

  在這個例子中,使用DevX新文章RSS資源生成示例應用程序的數據。

  綁定到靜態的XML源

  為了建立本文中的示例應用程序,你必須有Visual Studio 2005 Beta 2,并安裝WinFX SDK。請使用Visual Studio 2005 Beta 2建立一個新的AvalonNavigation應用程序(圖2所示),應用程序的名稱叫做DataBinding。

在Avalon中建立數據識別的應用程序
圖2:建立一個新的AvalonNavigation應用程序。

  像通常一樣新建Visual Studio項目,選擇AvalonNavigation類型。

  在默認的Page1.xaml中,首先需要用相關的XAML元素來填充頁面,建立應用程序UI。

  首先,給頁面添加一個<DockPanel>元素,把它的背景色設置為Cornsilk:

<Page x:Class="Page1"
 xmlns="http://schemas.microsoft.com/winfx/avalon/2005"
 xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005"

<DockPanel
 xmlns="http://schemas.microsoft.com/winfx/avalon/2005"
 xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005"
 Background="Cornsilk"

 給頁面添加一個<DockPanel.Resources>元素(見列表1)。<DockPanel.Resources>元素答應你定義XML數據源(就是大家所知道的XML數據島)供這個應用程序使用。在例子中,XML源是一個RSS文檔。其XPath屬性被設置為"/rss/channel",它是RSS文檔樹的起始節點,這樣你就可以簡單地使用相對路徑來引用子元素了。該XML數據源的鍵(key)是RSSData。代碼如列表1所示。

  列表 1: <DockPanel.Resources>

  <DockPanel.Resources>元素答應你定義一個XML數據源供這個應用程序使用。

<DockPanel.Resources>
 <XmlDataSource x:Key="RSSData" XPath="/rss/channel">
 <rss version="2.0" xmlns="">
 <channel>
  <title>DevX: Latest Published Articles</title>
  <link>http://www.devx.com</link>
  <description>Latest DevX Content</description>
  <language>en-us</language>
  <copyright>Copyright 2002 DevX</copyright>
  <docs>http://backend.userland.com/rss</docs>
  <lastBuildDate>Sun, 28 Aug 2005 23:36:13 PST</lastBuildDate>
  <image>
   <title>DevX</title>
   <url>http://services.devx.com/outgoing/devxwire.gif</url>
   <link>http://www.DevX.com</link>
  </image>
  <item>
   <title>Discover the Eclipse Modeling Framework (EMF) and Its Dynamic Capabilities</title>
   <description>Given a model, EMF can generate java source code that will allow
you to create, query, update, serialize, deserialize, validate, and track changes to instances of your
models. EMF provides an efficient reflective API and allows you to work with dynamic, non-generated,
models.</description>
   <link>http://www.devx.com/Java/Article/29093?trk=DXRSS_LATEST</link>
   <author> (Dave Steinberg) editorial@devx.com</author>
   <pubDate>Fri, 26 Aug 2005 19:43:34 PST</pubDate>
  </item>

  <item>
   <title>...</title>
   <description>...</description>
   <link>...</link>
   <author>...</author>
   <pubDate>...</pubDate>
  </item>

  <item>
   <title>...</title>
   <description>...</description>
   <link>...</link>
   <author>...</author>
   <pubDate>...</pubDate>
  </item>

 </channel>
</rss>
</XmlDataSource>
  下一步,給<DockPanel.Resources>元素添加一個<DataTemplate>元素。我們使用<DataTemplate>元素把XML數據島的內容綁定到一個控件(例子中是TextBlock控件)。TextBlock數據模板被綁定到(XML樹的)<title>元素,我們給它命名為RSSTemplate:


<DataTemplate x:Key="RSSTemplate">
 <TextBlock FontSize="Small">
 <TextBlock.TextContent>
 <Binding XPath="title"/>
</TextBlock.TextContent>
</TextBlock>
</DataTemplate>
</DockPanel.Resources>
  下一步,在頁面上添加一個標題("Titles"),同時在XML數據島(圖3所示)中建立一個列表框控件來顯示所有的標題(封裝在<title>元素內)。請注重,我們使用ItemsSource屬性來指定數據源(Binding Source={StaticResource RSSData}是簡潔的綁定表達式)和開始搜索的節點(XPath=item)。

在Avalon中建立數據識別的應用程序
圖3:給Data控件綁定XML數據

  在應用程序代碼中RSS資源的XML被綁定到Data控件。進入討論組討論。

  你可以使用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>
在Avalon中建立數據識別的應用程序
圖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文檔源)。進入討論組討論。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 元谋县| 阿鲁科尔沁旗| 南漳县| 甘泉县| 安义县| 安国市| 舟山市| 津市市| 温泉县| 海南省| 内丘县| 六枝特区| 会同县| 三都| 习水县| 正蓝旗| 舒城县| 福海县| 股票| 扎兰屯市| 开阳县| 本溪市| 勃利县| 平远县| 双牌县| 岳阳市| 丁青县| 岢岚县| 肥乡县| 太白县| 华安县| 绍兴县| 宁河县| 城市| 新源县| 静安区| 芦山县| 运城市| 宜春市| 福州市| 钟山县|