首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 資料來源深度解析:ObjectDataSource、XmlDataSource 與自訂 IDataSource

     編輯:關於.NET

資料來源的多樣性與間接層需求

資料不僅來源於物件,XML 和關聯式資料庫同樣常見。由於這些來源不直接儲存 .NET 物件,資料繫結需要間接層來轉換與載入資料。WPF 提供 IDataSource 介面實作作為這層中介,主要有三類:ObjectDataSource、XmlDataSource、自訂資料來源。

ObjectDataSource:物件資料的非同步載入與參數傳遞

基本用法(範例 4-34、4-35)

public class RemotePeopleLoader : People {
  public RemotePeopleLoader() { /* 從遠端載入資料 */ }
}

// XAML
<ObjectDataSource x:Key="Family" 
    TypeName="PersonBinding.RemotePeopleLoader" 
    Asynchronous="True" />

TypeName 指定集合類別完整名稱。Asynchronous="True" 將建立物件的工作交給背景執行緒,避免長時間載入阻塞 UI 執行緒。

參數傳遞(範例 4-37、4-38)

<ObjectDataSource ... Parameters="https://url1, https://url2" />

// 對應建構函式
public RemotePeopleLoader(string url1, string url2) { ... }

Parameters 以逗號分隔字串傳遞給建構函式。注意:僅支援字串參數,其他型別需自行在建構函式中轉換。

程式碼存取資料(範例 4-36)

IDataSource ds = (IDataSource)this.FindResource("Family");
People people = (People)ds.Data; // 透過 Data 屬性取得集合

雖然資料來源透露 Data 屬性,但 XAML 繫結時仍直接 ItemsSource="{Binding}",WPF 內建支援 IDataSource 會自動解析。

XmlDataSource:XML 資料島與 XPath 繫結

外部 XML 檔案(範例 4-39、4-40)

<XmlDataSource x:Key="Family" Source="family.xml" XPath="/Family/Person" />

// 繫結使用 XPath 而非 Path
<TextBlock TextContent="{Binding XPath=@Name}" />

XML 資料島(範例 4-41)

直接在 XAML 中內嵌 XML 內容,移除 Source 屬性保留 XPath。

XML 資料操作:存取、新增、排序、篩選(範例 4-42 至 4-45)

  • 資料項為 XmlElement,使用 GetAttribute/SetAttribute 操作屬性
  • 新增項目需透過 XmlDataSource.Document.CreateElement 建立並加入 XML 樹狀結構
  • 排序實作 IComparer 比較 XmlElement 屬性值
  • 篩選使用匿名委託轉型為 XmlElement 後判斷條件

關聯式資料庫與自訂 IDataSource

WPF 目前無直接支援關聯式資料庫繫結,建議參考 WinFX SDK 範例。若內建資料來源無法滿足需求,可自訂實作 IDataSource(範例 4-46),在建構函式載入資料後觸發 DataChanged 事件通知繫結系統,支援非同步載入與 Refresh 方法重新整理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved