專利名稱:用以執(zhí)行命令綁定的數(shù)據(jù)綁定機制的應(yīng)用的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機處理,尤其涉及使用用于命令綁定的數(shù)據(jù)綁定機制。
背景技術(shù):
用于應(yīng)用程序的代碼常常被分成用于用戶交互(一組“視圖”或者用戶界面(UI))的層,以及用于實現(xiàn)內(nèi)部應(yīng)用程序邏輯和數(shù)據(jù)管理(常通過一組“模型”實現(xiàn))的層。通常用戶界面包括菜單項和其它調(diào)用在模型上實現(xiàn)的功能的UI元素。
通常,圖形設(shè)計者設(shè)計用戶界面的外觀,而開發(fā)者編寫實現(xiàn)用戶界面和/或底層模型的代碼。圖形設(shè)計和軟件開發(fā)是兩種很不相同的學(xué)科,而且設(shè)計者和開發(fā)者要一起頗有成果地工作常常是困難的。通常,設(shè)計者使用諸如Adobe Photoshop和Adobe Illustrator的圖形工具來創(chuàng)建用戶界面(UI)的樣板,然后開發(fā)者用代碼來重新實現(xiàn)UI。通常在最后的實現(xiàn)中并不使用原始的圖形設(shè)計元素,而且有時部分的設(shè)計會在過程中丟失,因為開發(fā)者不能在代碼中輕易地重建該設(shè)計或者沒有完全理解該設(shè)計。如果改動了設(shè)計,就需要設(shè)計者重畫UI而開發(fā)者可能不得不重寫部分代碼以匹配設(shè)計。簡言之,過程是笨拙的。
在構(gòu)建這種應(yīng)用程序時遇到的另一問題是如何展現(xiàn)功能(命令)以及如何把該功能映射或綁定到UI中的元素中。例如,文本處理應(yīng)用程序可展現(xiàn)用于剪切選定文本的功能??砂言摴δ苷宫F(xiàn)為“命令”(例如,文檔展現(xiàn)了一種調(diào)用“剪切”命令的方法)。需要程序代碼在UI上與底層數(shù)據(jù)上所發(fā)生的事件之間作連接,即確定命令如何綁定于菜單項。
通常,采用事件處理器或命令路由來執(zhí)行該任務(wù)。事件處理器提供綁定代碼和UI元素的直接方法。UI元素可展現(xiàn)事件的聲明(例如菜單項上的“點擊”),而模型可實現(xiàn)匹配事件聲明的簽名的方法(例如事件處理器)。然而,該機制并不是很靈活?;顒訑?shù)據(jù)模型(例如上例中的活動文檔)或命令狀態(tài)(例如“剪切”命令變成不活動或禁用)中的變化通常需要開發(fā)者編寫其它代碼以連接和斷開事件處理器并更新用戶界面的狀態(tài)。
在命令處理中需要靈活性的先進應(yīng)用程序通常把標(biāo)識符(ID)分配給每個關(guān)聯(lián)于UI元素的命令。這種系統(tǒng)常常具有把命令I(lǐng)D映射到該命令的當(dāng)前活動實現(xiàn)的中央服務(wù)(有時稱為命令管理器)。該命令管理器處理一組活動命令目標(biāo)(即一組展現(xiàn)命令的模型)。為了執(zhí)行命令,從UI把標(biāo)識符發(fā)送給命令管理器,且該命令服務(wù)器找到用收到的ID處理命令的命令目標(biāo)并調(diào)用該目標(biāo)上的命令。不幸的是,該機制相當(dāng)復(fù)雜,且難以掌握。
如果有把UI元素連接到在應(yīng)用程序模型上所展現(xiàn)命令的簡便、靈活方法,這將是有幫助的。此外,如果能使設(shè)計者和開發(fā)者的軟件開發(fā)過程更簡便成為可能,也將是有幫助的。
發(fā)明內(nèi)容
使用數(shù)據(jù)綁定引擎來執(zhí)行命令綁定。數(shù)據(jù)綁定引擎把用戶界面控件,諸如按鍵、菜單、列表框等等綁定到在應(yīng)用程序模型上展現(xiàn)的命令。在本發(fā)明的某些實施例中,命令綁定用標(biāo)記語言來進行聲明性的指定??稍诙x命令如何綁定于UI元素的標(biāo)記中指定數(shù)據(jù)綁定路徑和數(shù)據(jù)源。
結(jié)合附圖閱讀前面的發(fā)明內(nèi)容和以下說明性實施例的詳細(xì)描述,能得到更好的理解。為了說明本發(fā)明,在附圖中示出本發(fā)明的示例性構(gòu)架;然而,本發(fā)明并不限于所揭示的特定方法和裝置。在附圖中圖1是示出本發(fā)明的諸方面可在其中實現(xiàn)的示例性計算環(huán)境的框圖;圖2是根據(jù)本發(fā)明一實施例用于命令綁定的示例性系統(tǒng)的框圖;圖3是根據(jù)本發(fā)明一實施例圖2的更詳細(xì)框圖;圖4是根據(jù)本發(fā)明一實施例圖3的命令綁定系統(tǒng)的示例性使用的框圖;圖5是根據(jù)本發(fā)明一實施例命令綁定的示例性方法的流程圖;以及圖6是根據(jù)本發(fā)明一方面對象的框圖。
具體實施例方式
縱覽假設(shè)文本處理應(yīng)用程序處理眾多展現(xiàn)用于剪切選定文本的功能的文檔對象。應(yīng)用程序可提供“編輯”菜單上標(biāo)有“剪切”的菜單項。應(yīng)用程序需要定義“剪切”命令如何綁定于菜單項和活動文檔。命令綁定的傳統(tǒng)方法是復(fù)雜的,且增加了設(shè)計者/開發(fā)者交互中固有的困難。根據(jù)本發(fā)明的某些實施例,通過使數(shù)據(jù)綁定命令路徑聲明性地與用戶界面的元素或組件相關(guān)聯(lián)、當(dāng)命令屬性改變時發(fā)送改變通知、以及通過對象綁定機制自動更新對象,從而降低命令綁定和路由中專門技術(shù)的復(fù)雜度和需要程度,命令綁定得以完成。
示例性計算環(huán)境圖1和以下討論旨在提供一種本發(fā)明在其中實現(xiàn)的適當(dāng)計算環(huán)境的簡要一般說明。然而,可以理解,手持式、便攜式、以及所有種類的其它計算裝置可預(yù)期在本發(fā)明中使用。盡管以下所述是通用計算機,但這僅僅是一個示例,且本發(fā)明僅需要具有網(wǎng)絡(luò)服務(wù)器互操作性和交互的瘦客戶機。因而,本發(fā)明可在其中包含很少或最少客戶機資源的包容網(wǎng)絡(luò)化服務(wù)的環(huán)境中實現(xiàn),例如其中客戶機裝置僅作為瀏覽器或萬維網(wǎng)接口的網(wǎng)絡(luò)化環(huán)境。
盡管不是必需的,本發(fā)明將通過由開發(fā)者使用和/或包括在網(wǎng)絡(luò)瀏覽軟件中的應(yīng)用編程接口(API)來實現(xiàn),該瀏覽軟件在由一臺或多臺諸如客戶機工作站、服務(wù)器或其它裝置的計算機執(zhí)行的諸如程序模塊的計算機可執(zhí)行指令的一般上下文中進行說明。一般,程序模塊包括執(zhí)行具體任務(wù)或?qū)崿F(xiàn)具體抽象數(shù)據(jù)結(jié)構(gòu)的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。通常,在各種實施例中可按需組合或分配程序模塊的功能。另外,本領(lǐng)域技術(shù)人員會理解,本發(fā)明在其它計算機系統(tǒng)配置中也是可以實踐的。其它適用于本發(fā)明的眾所周知的計算系統(tǒng)、環(huán)境、和/或配置包括,但不限于,個人計算機(PC)、自動取款機、服務(wù)器計算機、手持式或膝上型裝置、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程電器消費品、網(wǎng)絡(luò)PC、迷你計算機、大型機等等。本發(fā)明還可在分布式計算環(huán)境中實踐,其中任務(wù)由經(jīng)通信網(wǎng)絡(luò)或其它數(shù)據(jù)傳輸介質(zhì)連接的遠(yuǎn)程處理裝置執(zhí)行。在分布式計算環(huán)境中,程序模塊可被置于包括存儲器存儲裝置的本地和遠(yuǎn)程存儲器存儲介質(zhì)中。
盡管如上所述圖1示出了本發(fā)明可在其中實現(xiàn)的適當(dāng)計算系統(tǒng)環(huán)境100的示例,該計算系統(tǒng)環(huán)境100僅是適當(dāng)計算環(huán)境的一個示例,并非旨在提出本發(fā)明使用或功能性范圍的任何限制。計算環(huán)境100也不應(yīng)被解釋為對示例性操作環(huán)境100中所示的任一組件或其組合有任何依賴性或任何需求。
參照圖1,實現(xiàn)本發(fā)明的示例性系統(tǒng)包括計算機110形式的通用計算裝置。計算機110的組件可包括,但不限于,處理單元120、系統(tǒng)存儲器130以及把包括系統(tǒng)存儲器在內(nèi)的各種系統(tǒng)組件耦合到處理單元120的系統(tǒng)總線121。系統(tǒng)總線121可能是若干總線結(jié)構(gòu)類型中的任何一種,包括存儲器總線或存儲器控制器、外圍總線、以及使用多種總線架構(gòu)的任一種的本地總線。作為示例,而非限制,這些架構(gòu)包括工業(yè)標(biāo)準(zhǔn)架構(gòu)(ISA)總線、微信道架構(gòu)(MSA)總線、擴展ISA(EISA)總線、視頻電子技術(shù)標(biāo)準(zhǔn)協(xié)會(VESA)局部總線和也稱為Mezzanine總線的外圍部件互連(PCI)總線。
計算機110通常包括各種計算機可讀介質(zhì)。計算機可讀介質(zhì)可以是能被計算機110訪問的任何可用介質(zhì),并包括易失和非易失介質(zhì)、可移動和不可移動介質(zhì)。作為示例,而非限制,計算機可讀介質(zhì)可包括計算機存儲介質(zhì)和通信介質(zhì)。計算機存儲介質(zhì)包括以任何方法或技術(shù)實現(xiàn)、用于存儲諸如計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息的易失和非易失介質(zhì)、可移動和不可移動介質(zhì)。計算機存儲介質(zhì)包括但不限于RAM、ROM、EEPROM、閃存或其它存儲器技術(shù)、CD-ROM、數(shù)字多功能光盤(DVD)或其它光學(xué)存儲技術(shù)、磁盒、磁帶、磁盤存儲或其它磁性存儲裝置、或任何其它可用于存儲所需信息并可由計算機110訪問的介質(zhì)。通信介質(zhì)通常包括諸如載波或其它傳輸機制的調(diào)制數(shù)據(jù)信號中的計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊、或其它數(shù)據(jù),且包括任何信息輸送介質(zhì)。術(shù)語“調(diào)制數(shù)據(jù)信號”意指以在信號中信息編碼的方式設(shè)置或改變其一個或多個特征的信號。作為示例,而非限制,通信介質(zhì)包括諸如有線網(wǎng)絡(luò)或直線連接的有線介質(zhì),和諸如聲學(xué)、射頻、紅外線和其它無線介質(zhì)的無線介質(zhì)。以上任何介質(zhì)的組合也應(yīng)包括在計算機可讀介質(zhì)的范圍中。
系統(tǒng)存儲器130包括諸如只讀存儲器(ROM)131和隨機存取存儲器(RAM)132的易失和/或非易失存儲器形式的計算機可讀介質(zhì)。包含幫助計算機110如起動時在元件間傳送信息的基本例程的基本輸入/輸出系統(tǒng)(BIOS)133通常存儲在ROM 131中。RAM 132通常包含可被處理單元120立即訪問和/或現(xiàn)時操作的數(shù)據(jù)和/或程序模塊。作為示例,而非限制,圖1示出了操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136、和程序數(shù)據(jù)137。
計算機110還可包括其它可移動/不可移動、易失/非易失計算機存儲介質(zhì)。作為示例,圖1圖示了讀取和寫入不可移動、非易失性介質(zhì)的硬盤驅(qū)動器141,讀取和寫入可移動、非易失磁盤152的磁盤驅(qū)動器151,讀取和寫入可移動、非易失光盤156,諸如CD-ROM或其它光學(xué)介質(zhì)的光盤驅(qū)動器155。其它也可用在示例性計算環(huán)境中的可移動/不可移動、易失/非易失計算機存儲介質(zhì)包括,但不限于,如盒式磁帶、閃存卡、數(shù)字多功能光盤、數(shù)字視頻帶、固態(tài)RAM、固態(tài)ROM等等。硬盤驅(qū)動器141通常通過諸如接口140的不可移動存儲器接口與系統(tǒng)總線121連接,而磁盤驅(qū)動器151和光盤驅(qū)動器155通常通過諸如接口150的可移動存儲器接口與系統(tǒng)總線121連接。
如上所述并如圖1所示的盤驅(qū)動器及其相關(guān)聯(lián)的計算機存儲介質(zhì)為計算機110提供計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊、和其它數(shù)據(jù)的存儲。在圖1中,例如,硬盤驅(qū)動器141被示為存儲操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146、和程序數(shù)據(jù)147。注意這些組件可以與操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136、和程序數(shù)據(jù)137相同或不同。在此給予操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146、和程序數(shù)據(jù)147的不同序號至少說明他們是不同的副本。用戶可通過輸入裝置如鍵盤162和諸如鼠標(biāo)、跟蹤球或觸摸板等定位裝置161向計算機110輸入命令和信息。其它輸入裝置(未示出)可包括話筒、游戲桿、游戲墊、衛(wèi)星接收器、掃描儀等等。這些和其它輸入裝置常常通過與系統(tǒng)總線121耦合的用戶輸入接口160與處理單元120相連,但也可通過諸如并行端口、游戲端口或通用串行總線(USB)的其它接口連接。
監(jiān)視器191或其它類型的顯示裝置也可通過諸如視頻接口190的接口與系統(tǒng)總線121相連。諸如Northbridge的圖形接口182也可連接到系統(tǒng)總線121。Northbridge是與CPU或主處理單元120通信的芯片集,并承擔(dān)加速圖形端口(AGP)通信的責(zé)任。一個或多個圖形處理單元(GPU)184可與圖形接口182通信。在這點上,GPU 184通常包括諸如寄存器存儲的片內(nèi)存儲器存儲,且GPU 184與視頻存儲器186進行通信。然而,GPU 184僅是協(xié)處理器的一個示例,且因而在計算機110中了包括各種協(xié)處理裝置。監(jiān)視器191或其它類型的顯示裝置也可通過諸如視頻接口190的接口連接到系統(tǒng)總線121,而該接口可與視頻存儲器186通信。除了監(jiān)視器,計算機還可包括諸如揚聲器197和打印機196的其它輸出裝置,它們通過輸出外圍接口195相連。
計算機110可以在使用與一臺或多臺遠(yuǎn)程計算機,諸如遠(yuǎn)程計算機180的邏輯連接的網(wǎng)絡(luò)化環(huán)境中運行。遠(yuǎn)程計算機180可以是個人計算機、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對等裝置或其它公共網(wǎng)絡(luò)節(jié)點,而且通常包括上述與個人計算機110相關(guān)的許多或全部組件,盡管在圖1中僅圖示了存儲器存儲裝置181。圖1中所描繪的邏輯連接包括局域網(wǎng)(LAN)171和廣域網(wǎng)(WAN)173,但也可包括其它網(wǎng)絡(luò)。這樣的網(wǎng)絡(luò)化環(huán)境在辦公室、企業(yè)范圍計算機網(wǎng)絡(luò)、企業(yè)內(nèi)部互聯(lián)網(wǎng)和因特網(wǎng)上是常見的。
當(dāng)用于LAN網(wǎng)絡(luò)化環(huán)境中時,計算機110通過網(wǎng)絡(luò)接口或適配器170與局域網(wǎng)171連接。當(dāng)用于WAN網(wǎng)絡(luò)化環(huán)境中時,計算機110通常包括調(diào)制解調(diào)器172或其它用于在廣域網(wǎng)173,諸如因特網(wǎng)中建立通信的裝置。可以是內(nèi)置式或外置式的調(diào)制解調(diào)器172與系統(tǒng)總線121通過用戶輸入接口160或其它適當(dāng)機制連接。在網(wǎng)絡(luò)化環(huán)境中,與計算機110相關(guān)的程序模塊或其一部分可存儲在遠(yuǎn)程存儲器存儲裝置中。作為示例,而非限制,圖1示出了駐留于遠(yuǎn)程計算機180中的遠(yuǎn)程應(yīng)用程序185。應(yīng)當(dāng)理解,所示網(wǎng)絡(luò)連接是示例性的,且也可以使用其它用于在計算機間建立通信連接的技術(shù)。
本領(lǐng)域普通技術(shù)人員能理解計算機110或其它客戶機裝置可被配置為計算機網(wǎng)絡(luò)的一部分。在這點上,本發(fā)明適合具有任何數(shù)量存儲器或存儲單元的任何計算機系統(tǒng),以及發(fā)生在任何數(shù)量的存儲單元或存儲體上的任何數(shù)量的應(yīng)用程序和過程。本發(fā)明可應(yīng)用于帶有在網(wǎng)絡(luò)環(huán)境中配置的具有遠(yuǎn)程或本地存儲器的服務(wù)器計算機和客戶機計算機的環(huán)境。本發(fā)明也可應(yīng)用于具有編程語言功能、解釋和執(zhí)行能力的單機計算裝置。
使用用于命令綁定的數(shù)據(jù)綁定機制的系統(tǒng)和方法圖2示出了根據(jù)本發(fā)明某些實施例用于使用數(shù)據(jù)綁定機制以執(zhí)行命令綁定的示例性系統(tǒng)。這樣的系統(tǒng)可整個地或部分地駐留于諸如圖2示例性計算機202的一臺或多臺計算機中。計算機202可包括諸如參照圖1所述計算機110的計算機。使用數(shù)據(jù)綁定引擎以路由命令的系統(tǒng)可包括以下元素的一個或多個數(shù)據(jù)綁定組件208、來源206、以及目標(biāo)203。
在本發(fā)明的某些實施例中,數(shù)據(jù)綁定組件208是使源對象(例如示例性源對象210a、210b等等)的命令對象212a能夠動態(tài)綁定于目標(biāo)對象(例如示例性目標(biāo)對象204a、204b等等)的數(shù)據(jù)綁定引擎208。數(shù)據(jù)綁定引擎可收聽對象上的屬性改變通知,從而對源對象命令屬性的改變自動地反射在相關(guān)聯(lián)的目標(biāo)對象屬性上,反之亦然。目標(biāo)對象可與標(biāo)識目標(biāo)對象所綁定的源相關(guān)聯(lián)。數(shù)據(jù)綁定引擎可支持屬性路徑的估算以使目標(biāo)的特定部分能綁定到源的特定部分上。在本發(fā)明的某些實施例中,說明性地可用諸如HTML(超文本鏈接標(biāo)記語言)、XML(可擴展標(biāo)記語言)、XAML(可擴展應(yīng)用標(biāo)記語言)或其它適當(dāng)標(biāo)記語言的標(biāo)記語言來完成目標(biāo)對象屬性對源對象命令屬性的綁定。數(shù)據(jù)綁定引擎可搜索目標(biāo)對象數(shù)據(jù)源上的源對象命令屬性,并執(zhí)行適當(dāng)?shù)母隆?br>
在本發(fā)明的某些實施例中,產(chǎn)生面向?qū)ο髮ο蟮膱D表,其中一個、某些、或全部對象指向其它對象從而形成其中每個從一個對象指向另一個對象的箭頭代表一個屬性的圖表。面向?qū)ο髮ο蟮氖纠詧D表如圖6所示。在圖6中,對象602代表文檔管理器對象,對象604和606代表文檔對象,而對象608代表“剪切”命令(CutCommand)。圖6中,活動文檔是文檔對象606(由實線603標(biāo)注表示活動文檔Active Document屬性)??梢岳斫猓景l(fā)明所期望的并不限于這些對象和命令??勺饔糜谌魏芜m當(dāng)對象和命令。當(dāng)然,本發(fā)明所期望的并不限于面向?qū)ο缶幊陶Z言環(huán)境中的對象,且可同樣地應(yīng)用于任何數(shù)據(jù)源和屬性的分層結(jié)構(gòu)。在本發(fā)明的某些實施例中,數(shù)據(jù)綁定引擎208使能數(shù)據(jù)源(對象602)和屬性路徑的指定,諸如表示從對象602到對象606到對象608的路徑的“ActiveDocument.CutCommand”(活動文檔.剪切命令)。數(shù)據(jù)綁定引擎208可查詢表示運行程序中“活動”對象的對象圖表,以動態(tài)地確定哪個對象由路徑“ActiveDocument.CutCommand”(在此情形中為對象608)表示。
再看圖2,源206可包括如源對象210a、210b等等所表示的一個或多個源對象。源對象210a、210b等等可與圖2中源命令對象212a等表示的一個或多個源命令對象相關(guān)聯(lián)。在本發(fā)明某些實施例中,源206可表示一個模型。本發(fā)明某些實施例中的模型是代表底層狀態(tài)集合的底層應(yīng)用邏輯。例如,考慮使用戶能對用戶系統(tǒng)進行資源管理的應(yīng)用程序。在此情形中該應(yīng)用程序的模型可能是文件系統(tǒng)選定目錄的文件夾中的文件夾和文件集。可把眾多視圖綁定到一個模型上。這些綁定到模型的視圖可取決于該模型。然而,在本發(fā)明某些實施例中,模型與視圖無關(guān)。如果一個對象上的屬性改變或者狀態(tài)改變發(fā)生,模型可發(fā)送改變通知。例如,如果把新文件添加到文件夾中,可發(fā)送改變通知。
源對象210a、210b等等可與源命令對象212a等表示的一個或多個源命令對象相關(guān)聯(lián)。在本發(fā)明某些實施例中,命令對象是關(guān)聯(lián)于執(zhí)行方法的對象(即命令對象是可執(zhí)行對象)并具有狀態(tài)。在本發(fā)明某些實施例中關(guān)聯(lián)于命令對象的狀態(tài)是表示是否執(zhí)行該命令的,即該命令是活動(使能)的還是不活動(禁止)的布爾值。命令的示例包括但不限于“打開文檔”、“剪切選定文檔”等等。
目標(biāo)203可包括如圖2目標(biāo)對象204a、204b等等所表示的一個或多個目標(biāo)對象。在本發(fā)明某些實施例中,目標(biāo)可以是視圖或用戶界面。一個或多個視圖可綁定于模型上,并顯示底層模型的狀態(tài)。在本發(fā)明某些實施例中,視圖或用戶界面可用諸如HTML(超文本鏈接標(biāo)記語言)、XML(可擴展標(biāo)記語言)、XAML(可擴展應(yīng)用標(biāo)記語言)或其它適當(dāng)標(biāo)記語言的標(biāo)記語言來定義,在標(biāo)記語言中定義用戶界面的視圖并定義用戶界面的元素或組件。目標(biāo)對象可以是用戶界面元素或控件,諸如但不限于菜單項、按鈕或列表框。在上述的文件系統(tǒng)示例中,示例性用戶界面可顯示選定目錄的文件夾中的當(dāng)前文件列表。
在本發(fā)明某些實施例中,為了把用戶界面綁定到底層模型,不是通過分配ID和調(diào)用目錄管理器來使用事件處理器對綁定進行顯式定義或者間接地把用戶界面組件關(guān)聯(lián)到底層模型,而是通過參照圖6如上所述地指定數(shù)據(jù)源對象和查詢路徑,將代表用戶界面組件的對象綁定于底層模型對象。如果查詢的任何部分改變,由對象發(fā)送改變通知,而數(shù)據(jù)綁定引擎檢測改變通知并更新適當(dāng)對象??梢岳斫獗徊樵兊闹黝}是運行程序中的活動對象。
圖3是圖2系統(tǒng)的更詳細(xì)框圖。在圖3中,數(shù)據(jù)綁定引擎320可把源對象(模型324的一部分)上的命令屬性322綁定到目標(biāo)對象(例如UI組件330)上的屬性中。數(shù)據(jù)綁定引擎320可收聽屬性改變通知(模型屬性322的通知326、UI屬性334的通知328)并自動使源324和目標(biāo)330同步。目標(biāo)330(例如UI組件)可關(guān)聯(lián)于用作目標(biāo)330綁定源的數(shù)據(jù)源332。
在本發(fā)明某些實施例中,要綁定的UI屬性334是命令對象的信宿或目標(biāo)屬性,而要綁定的命令屬性322是模型上的命令屬性。示例的非限制目標(biāo)屬性可以是例如“ClickCommand”(點擊命令)。在本發(fā)明某些實施例中,通過把模型324分配為數(shù)據(jù)源并把UI組件上的屬性334數(shù)據(jù)綁定到模型上的命令屬性322,來完成命令綁定。在某些實施例中不需要任何程序代碼,綁定就可以說明性地完成。示例性說明語句可以是<MenuItem ClickCommand=″*Bind(DataSource=model,Path=DocumentManager.ActiveDocument.CutCommand)″/>
該語句意思是關(guān)聯(lián)于菜單項“ClickCommand”的數(shù)據(jù)源是對象“模型”,且要關(guān)聯(lián)于ClickCommand的對象是活動文檔上的CutCommand屬性。UI無需編寫代碼就可在標(biāo)記的UI設(shè)計工具中或在設(shè)計工具之外創(chuàng)建。或者,可通過編寫代碼來獲得同樣的結(jié)果。
在本發(fā)明某些實施例中,命令對象可與展現(xiàn)為屬性的附加狀態(tài)相關(guān)聯(lián)。示例包括但不限于IsEnabled、要顯示給用戶的文本名、關(guān)鍵綁定或圖標(biāo)。狀態(tài)可由開發(fā)者顯式提供或從應(yīng)用的其它屬性計算或推導(dǎo)而來。在本發(fā)明某些實施例中,目標(biāo)對象知道如何處理這些屬性(例如,菜單項對命令對象的IsEnabled屬性設(shè)定其激活狀態(tài)并更新其視覺顯示、菜單項把顯示給用戶的文本更新為命令對象上的Text文本屬性)。命令對象提供對這些屬性的改變通知。目標(biāo)對象收聽改變通知,并在有改變通知情形中更新其屬性和顯示。不是命令對象上的所有屬性需要是目標(biāo)對象已知的。
在本發(fā)明某些實施例中,目標(biāo)對象沒有隱式地處理某些狀態(tài)屬性。在此情形中,數(shù)據(jù)綁定被用以把命令對象上的已知屬性綁定到目標(biāo)對象上的已知屬性上<MenuItem Text=”*Bind(Path=DocumentManager.ActiveDocument.CutCommand.Text”/>。
在本發(fā)明某些實施例中,命令對象是無狀態(tài)的且完全不提供屬性。狀態(tài)屬性仍能由模型提供,并使用數(shù)據(jù)綁定綁定到目標(biāo)元素上。
在本發(fā)明某些實施例中,無狀態(tài)命令可通過提供模型上的方法并綁定于該方法(而不是命令對象)來實現(xiàn)。
<MenuItem Click=”*Bind(Path=ActiveDocument.Copy)”Enabled=”*Bind(Path=ActiveDocument.CanCopy”)/>
在此情形中不需要命令對象。Cancopy狀態(tài)由模型提供并使用數(shù)據(jù)綁定來綁定Copy()方法。
圖4示出了根據(jù)本發(fā)明某些實施例其中可采用用于命令綁定的系統(tǒng)的典型情景??紤]處理多個文檔408、410等等(其中之一為活動文檔,即文檔410)的應(yīng)用程序。文檔管理器404(模型的一部分)可展現(xiàn)活動文檔的屬性。文檔對象408、410等等(模型的一部分)可把編輯命令(例如命令對象412)展現(xiàn)為可選擇的屬性。在某些實施例中使用通過用戶界面上的按鈕402先處理活動文檔410再選擇活動文檔上編輯命令的屬性路徑來完成說明性綁定。示例性說明性綁定語句可以是<MenuItem ClickCommand=″*Bind(Path=DocumentManager.ActiveDocument.CutCommand)″/>
或者<MenuItem ClickCommand=″*Bind(Path=DocumentManager.ActiveDocument.CopyCommand)″/>
或者
<MenuItem ClickCommand=″*Bind(Path=DocumentManager.ActiveDocument.PasteCommand)″/>
在某些實施例中文檔管理器404可提供對活動文檔410屬性的任何改變的改變通知(例如用戶改變了活動文檔)。改變通知由數(shù)據(jù)綁定引擎406檢測,且把命令重新綁定到活動文檔中。要注意的是,在本發(fā)明某些實施例中,無需編寫程序代碼就可說明性地獲得以上結(jié)果。不需要對命令管理的服務(wù)。
在本發(fā)明某些實施例中,可將不是命令屬性的任意屬性綁定到菜單項中。例如,可把模型上的布爾屬性綁定到復(fù)選框菜單項上。在本發(fā)明某些實施例中,復(fù)選框UI組件可展現(xiàn)用作目標(biāo)屬性的諸如“IsChecked”的屬性。類似地,可將對象列表綁定到特定的列表框菜單項以處理諸如但不限于“最近使用的”文件列表的情景。
圖5示出了根據(jù)本發(fā)明一實施例指定并執(zhí)行命令綁定的方法的示例性流程圖。該方法的一個或多個步驟是可選的。在圖5中,在步驟502接收源定義。這可涉及模型或應(yīng)用的編碼和/或例示。例如,開發(fā)者可實現(xiàn)模型,展現(xiàn)要綁定的一個或多個屬性。在步驟504,接收目標(biāo)定義。這可涉及在諸如用戶界面的目標(biāo)的代碼或標(biāo)記中的指定和/或用戶界面的例示。例如,設(shè)計者可用標(biāo)記語言來創(chuàng)建用戶界面或者開發(fā)者可用代碼來創(chuàng)建用戶界面。在步驟506可接收命令綁定語句。這可涉及如上所述目標(biāo)和源之間數(shù)據(jù)連接的編碼(例如由開發(fā)者)或者標(biāo)記中命令綁定語句的指定(例如由設(shè)計者)。在本發(fā)明某些實施例中,可把命令綁定語句的指定結(jié)合到目標(biāo)的定義中去(步驟504)。
在步驟508,可產(chǎn)生和/或例示包括模型和用戶界面的應(yīng)用程序。綁定引擎可在模型的路徑上收聽,并估算命令綁定語句。如果命令綁定語句估算成功,可如上所述使目標(biāo)和模型同步。在本發(fā)明某些實施例中,可提供一個或多個命令綁定語句。通過如上所述說明性地向源分配一個或多個數(shù)據(jù)綁定命令路徑和數(shù)據(jù)源,可完成命令綁定。在本發(fā)明某些實施例中,命令路徑和數(shù)據(jù)源可用諸如HTML、XML、XAML、或另一適當(dāng)標(biāo)記語言的標(biāo)記語言進行說明性的定義。可對模型的路徑進行連續(xù)監(jiān)視以發(fā)現(xiàn)改變通知。可從指示命令屬性已改變的命令對象接收改變通知。在本發(fā)明某些實施例中,改變通知由命令對象發(fā)送并由數(shù)據(jù)綁定引擎檢測。如果收到改變通知,可重新估算命令綁定語句且使源和目標(biāo)同步,如上所述。在某些實施例中,數(shù)據(jù)綁定引擎查詢對象圖表以找到由數(shù)據(jù)源和數(shù)據(jù)路徑指示的對象,且數(shù)據(jù)綁定引擎通過一般對象綁定機制來自動更新目標(biāo)。
在此所述的各種技術(shù)可結(jié)合硬件或軟件,或在適當(dāng)時結(jié)合兩者的組合來實現(xiàn)。因而,本發(fā)明的方法和裝置,或者其中的某些方面和部分,可取諸如軟盤、CD-ROM、硬盤驅(qū)動器、或任何其它機器可讀存儲介質(zhì)的有形介質(zhì)中包含程序代碼(即指令)形式,其中當(dāng)程序代碼由諸如計算機的機器載入并執(zhí)行時,該機器成為用于實踐本發(fā)明的裝置。在可編程計算機上的程序代碼執(zhí)行情形中,計算裝置通常包括處理器、處理器可讀的存儲介質(zhì)(包括易失性和非易失性存儲器和/或存儲元素)、至少一個輸入設(shè)備、和至少一個輸出設(shè)備。可利用本發(fā)明的領(lǐng)域?qū)S镁幊棠P头矫娴膭?chuàng)建和/或?qū)崿F(xiàn)的一個或多個程序,例如通過使用數(shù)據(jù)處理API等等,更適宜用高級過程化或面向?qū)ο蟮木幊陶Z言來實現(xiàn)以與計算機系統(tǒng)進行通信。然而,如果需要,也可用匯編或機器語言來實現(xiàn)程序。在任何情形中,語言可以是編譯或解釋語言,并與硬件實現(xiàn)相結(jié)合。
盡管本發(fā)明已結(jié)合各種情形的優(yōu)選實施例進行了描述,要理解可使用其它類似實施例,或者可對所述實施例作更改和添加用于執(zhí)行本發(fā)明的系統(tǒng)功能,而沒有偏離本發(fā)明。因此,不應(yīng)把本發(fā)明限制在任一單個實施例中,而應(yīng)當(dāng)根據(jù)所附權(quán)利要求在廣度和范圍中進行解釋。
權(quán)利要求
1.一種用于在源和目標(biāo)之間綁定命令的系統(tǒng),其特征在于,包括數(shù)據(jù)綁定引擎,所述數(shù)據(jù)綁定引擎接收把命令映射到所述目標(biāo)的元素上的至少一個綁定語句、估算所述至少一個綁定語句、并把所述目標(biāo)元素更新為關(guān)聯(lián)于所述命令的值。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述命令是命令對象。
3.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述命令與狀態(tài)相關(guān)聯(lián)。
4.如權(quán)利要求3所述的系統(tǒng),其特征在于,所述命令狀態(tài)從所述源導(dǎo)出。
5.如權(quán)利要求3所述的系統(tǒng),其特征在于,所述命令狀態(tài)與能夠執(zhí)行相關(guān)聯(lián)。
6.如權(quán)利要求3所述的系統(tǒng),其特征在于,所述命令狀態(tài)與不能執(zhí)行相關(guān)聯(lián)。
7.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述命令是無狀態(tài)的。
8.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述命令是方法。
9.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述至少一個綁定語句包括說明性標(biāo)記語言的語句。
10.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述說明性標(biāo)記語言包括HTML、XML、或者XAML。
11.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述至少一個綁定語句包括數(shù)據(jù)源的指示。
12.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述至少一個綁定語句包括綁定路徑。
13.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述數(shù)據(jù)綁定引擎查詢包括至少第一對象和第二對象的對象圖表,其中所述第一對象指向所述第二對象。
14.如權(quán)利要求13所述的系統(tǒng),其特征在于,所述第二對象是命令對象。
15.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述命令包括關(guān)聯(lián)于可執(zhí)行方法的對象,以及與關(guān)聯(lián)于所述命令對象的執(zhí)行方法能執(zhí)行或不能執(zhí)行相關(guān)聯(lián)的布爾狀態(tài)。
16.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述目標(biāo)是用戶界面。
17.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述源包括底層應(yīng)用程序的狀態(tài)集合。
18.一種用于把命令映射到目標(biāo)的方法,其特征在于,包括接收定義所述命令和所述目標(biāo)之間映射的至少一個綁定語句;確定所述命令的值;以及把所述目標(biāo)更新為所述命令的值。
19.如權(quán)利要求18所述的方法,其特征在于,響應(yīng)于對所述至少一個綁定語句估算失敗的確定,將命令的值設(shè)定為無效。
20.如權(quán)利要求18所述的方法,其特征在于,響應(yīng)于對所述至少一個綁定語句估算失敗的確定,將命令的值設(shè)定為缺省值。
21.如權(quán)利要求18所述的方法,其特征在于,響應(yīng)于對所述命令值為無效的確定,所述目標(biāo)被禁止。
22.如權(quán)利要求18所述的方法,其特征在于,所述命令是關(guān)聯(lián)于狀態(tài)的對象。
23.如權(quán)利要求18所述的方法,其特征在于,所述命令狀態(tài)從數(shù)據(jù)源導(dǎo)出。
24.如權(quán)利要求22所述的方法,其特征在于,所述命令狀態(tài)與執(zhí)行的能力相關(guān)聯(lián)。
25.如權(quán)利要求18所述的方法,其特征在于,所述命令是無狀態(tài)的。
26.如權(quán)利要求18所述的方法,其特征在于,所述命令是方法。
27.如權(quán)利要求18所述的方法,其特征在于,還包括監(jiān)視包括數(shù)據(jù)源的對象集以發(fā)現(xiàn)改變通知。
28.如權(quán)利要求27所述的方法,其特征在于,還包括響應(yīng)于檢測所述改變通知,查詢所述數(shù)據(jù)源的對象的圖表以確定所述命令的經(jīng)更新值。
29.如權(quán)利要求28所述的方法,其特征在于,還包括把所述命令映射的目標(biāo)更新為所述命令更新值。
30.如權(quán)利要求18所述的方法,其特征在于,所述至少一個綁定語句包括標(biāo)記語言的說明性語句。
31.如權(quán)利要求30所述的方法,其特征在于,所述標(biāo)記語言是HTML。
32.如權(quán)利要求30所述的方法,其特征在于,所述標(biāo)記語言是XML。
33.如權(quán)利要求30所述的方法,其特征在于,所述標(biāo)記語言是XAML。
34.如權(quán)利要求18所述的方法,其特征在于,所述目標(biāo)是用戶界面的元素。
35.一種包括計算機可執(zhí)行指令的計算機可讀介質(zhì),其特征在于,所述可執(zhí)行指令用于接收定義在數(shù)據(jù)源命令與用戶界面元素之間映射的至少一個綁定語句;確定所述命令的值;以及把所述用戶界面的元素更新為所述命令的值。
36.如權(quán)利要求35所述的計算機可讀介質(zhì),其特征在于,還包括用于監(jiān)視包括所述數(shù)據(jù)源的對象集的計算機可執(zhí)行指令以發(fā)現(xiàn)改變通知。
37.如權(quán)利要求36所述的計算機可讀介質(zhì),其特征在于,還包括計算機可執(zhí)行指令,用于檢測所述改變通知;以及查詢所述數(shù)據(jù)源的對象的圖表以確定所述命令的經(jīng)更新值。
38.如權(quán)利要求37所述的計算機可讀介質(zhì),其特征在于,還包括用于把關(guān)聯(lián)于所述命令的所述用戶界面元素更新為所述命令的經(jīng)更新值的計算機可執(zhí)行指令。
全文摘要
使用數(shù)據(jù)綁定引擎來執(zhí)行命令綁定。數(shù)據(jù)綁定引擎把用戶界面控件,諸如按鍵、菜單、列表框等等綁定到在應(yīng)用程序模型上展現(xiàn)的命令??稍诙x命令如何綁定于UI元素的標(biāo)記語言中指定數(shù)據(jù)源和數(shù)據(jù)綁定路徑。
文檔編號G06F9/445GK1684034SQ20051005509
公開日2005年10月19日 申請日期2005年3月11日 優(yōu)先權(quán)日2004年4月13日
發(fā)明者D·J·詹尼, K·B·庫珀, L·羅德, N·古塔, S·W·本特, T·A·彼得斯 申請人:微軟公司