2010-02-18 119 views
2

在過去的WinForms中,如果您的用戶在DialogBox中創建/編輯某些信息,則很容易檢測到窗口關閉,並且如果數據很髒,請詢問他們是否想要保存。Silverlight在保存之前關閉頁面

我的問題是,你如何在Silverlight中處理這種情況,其中一切似乎都在UserControls中完成,它沒有明顯的方式知道頁面何時關閉,即切換到Silverlight應用程序中的另一個頁面只需打開一個不同的用戶控件而不檢查以前的用戶控件需要保存。

必須有一些標準的方法來實現這一點?

+0

你想在頁面關閉時做什麼? – 2010-02-18 20:49:30

+0

嗨邁克爾,我需要檢查關閉頁面上是否有髒數據,並給用戶一個保存它的機會。真的只需要阻止用戶填寫數據並切換到另一頁並忘記保存。 – Mitch 2010-02-18 21:57:48

回答

2

如果你需要詢問用戶是否要保存或不那麼你就需要在瀏覽器來處理這個onbeforeunload(而不是一個標準的事件是由在其Silverlight是正式支持這些瀏覽器支持)問題。當onbeforeunload觸發時,可能會設置一個小小的JavaScript來回撥您的應用程序。

這就是說,我不是「你確定,你想失去剛剛完成的所有工作」類型的問題。 「當然,我不想失去它,只要我能夠在必要時撤銷它,我就會很快樂」。

+0

嗨安東尼,謝謝你的回覆。當然,如果你有一種「已經保存」的方式,你也可以有一種方式來問「你想不要」保存它「。」如果用戶點擊應用程序關閉按鈕,我就不那麼吝嗇,如果用戶只是在不保存的情況下從應用程序菜單中選擇不同的頁面,那麼更多。 – Mitch 2010-02-18 22:57:14

+1

我的觀點是不是你是否會問的__way__,我的觀點是,我寧願計劃__not__問的。 – AnthonyWJones 2010-02-19 08:26:12

+0

我同意,但我寫的最後一個應用程序,我從用戶那裏得到的第一個評論是爲什麼它讓我退出而不保存!我認爲用戶需要自行保存! – Mitch 2010-02-19 09:51:30

2

您可以處理Application.Exit事件以在應用程序關閉時執行代碼。要警告的是,此時網絡堆棧已經關閉,因此您無法從Application.Exit發送任何消息。您無法取消該活動。

1

+1 Michael。這是SL的當前侷限性。但是,您可以堅持從應用程序退出事件中隔離存儲,在您的應用程序中檢查是否髒,如果是這樣,則保存到iso存儲。然後下次你的應用程序加載時,你可以從ISO存儲裝載髒數據,以進行編輯..?

+0

嗨Jason,你知道這是否已在Silverlight 4中糾正?當然,如果我們不能阻止我們的用戶愚蠢地點擊錯誤的按鈕並在沒有提示的情況下拋棄他們的更改,那麼這是一個落後的步驟。 – Mitch 2010-02-18 22:49:49

+0

嗨米奇,抱歉不知道 - 還沒有機會看看任何測試版4的東西 - 我們可以花在beta的一生! ,我已經看到書面的另一種選擇是有其自動保存(以Web服務)每隔幾分鐘後臺計時器 - 同樣不理想...... – 2010-02-19 08:27:41

+0

感謝您的反饋賈森,我希望MS使Silverlight 4中更適合LOB應用程序。當用戶控件關閉時,確實不難察覺! – Mitch 2010-02-19 09:54:23