我正在開發一個Silverlight LoB應用程序,設計人員希望有一個標籤界面,類似於Visual Studio的界面(我們可能會使用Telerik Rad控件作爲對接標籤)。完成原型之後,界面運行良好,但我在考慮如何在MVVM項目中實現撤銷/重做功能時遇到問題。如何在MVVM應用程序中實現撤銷/重做?
撤消/恢復功能有:
- 上的撤消/重做,UI狀態,即 返回焦點,選擇等恢復到 控制(一個或多個)(例如一個文本框) 這個變化源於。
- 擁有按次撤銷/重做堆棧
通常情況下,我會用命令的模式,但我不知道如何應用與MVVM。
我已經使用了命令&綁定來獲得理想化的視圖模型的鬆散耦合,但它使撤銷/重做變得更加棘手,因爲視圖模型沒有任何視圖的概念以及接收到命令或綁定屬性發生變化時的視圖狀態。似乎我需要某種服務跟蹤,無論何時用戶執行一些可撤銷操作並獲取狀態以供以後恢復時,該視圖都處於活動狀態。
對於在MVVM中實現撤消/重做的最佳實踐有什麼共識嗎?我非常關心丹尼爾沃恩如何在他的鈣項目中做到這一點; Blend顯然是使用MVVM模式編寫的,它的行爲與我想要的應用程序一樣,如果MS解釋他們是如何做到的,那就太棒了!
我現在也將根據你提到的調查鈣項目。感謝那。 – 2010-08-25 18:02:44
感謝您的回答,HiTech。當你說「撤銷僅在單個控件中」時,你的意思是,例如,在一個帶有幾個文本框的窗體(視圖)上,用戶必須關注一個文本框,在該文本框中爲他進行更改以撤銷/重做他通過TextBox所做的任何更改?將操作與接口完全分開 - 是否意味着禁止視圖中的控件與視圖模型中的屬性之間的雙向綁定?不幸的是,我們的應用程序具有交互式繪圖表面(畫布)和Blend/VS等形式;這很複雜。 絕對感謝您的想法! – JamesCo 2010-08-26 13:26:56