我在Silverlight中構建了一個wp7應用程序。我所有的應用程序狀態都存儲在NavigationContext.QueryString
中。如果這可以在應用程序停用時保存,並且該頁面導航到應用程序重新激活時,這將照顧我對墓碑的要求。Windows Phone 7:與URIs墓碑?
不過,我不太清楚如何做到這一點。我正在考慮將NavigationContext.QueryString
保存到State
字典App.xaml.cs::Application_Deactivated()
,但該代碼無權訪問NavigationContext.QueryString
。有另一種方法可以做到這一點嗎?
我想我可以只查詢字符串每次我瀏覽時保存到State字典,然後還原應用程序時,被重新激活。還是有更好的方法?
更新:基於indyfromoz的回答,我想實現以下
OnNavigatedToHandler()
{
// save NavigationContext.QueryString in the State dictionary
}
以減少冗餘,我想我會在從PhoneApplicationPage
繼承的類實現此,然後讓我的所有其他頁面繼承該類。但是,然後我得到所有頁面類別爲partial
的問題,因爲它們也是在生成的代碼中定義的。我不想更改生成的代碼,因爲每次重新生成代碼時都會產生巨大的痛苦。
有沒有更好的方法來做到這一點?
更新2:這裏是我現在黑客一起在我的應用程序(也就是導航到啓動時的一個)的主頁:
public partial class MainPivot : PhoneApplicationPage
{
public MainPivot()
{
InitializeComponent();
Loaded += new RoutedEventHandler(MainPivot_Loaded);
PhoneApplicationService.Current.Deactivated += new EventHandler<DeactivatedEventArgs>(App_Deactivated);
MessageBox.Show("launching main pivot (state count: " + PhoneApplicationService.Current.State.Count + ")");
if (PhoneApplicationService.Current.State.Count != 0)
{
Debug.Assert(PhoneApplicationService.Current.State.ContainsKey(QueryStringKey),
"State is initialized, but contains no value for the query string");
string oldQueryString = (string)PhoneApplicationService.Current.State[QueryStringKey];
MessageBox.Show("Old query string: " + oldQueryString);
NavigationService.Navigate(new Uri(oldQueryString));
}
}
public readonly string QueryStringKey = "queryString";
void App_Deactivated(object sender, DeactivatedEventArgs e)
{
PhoneApplicationService.Current.State[QueryStringKey] = NavigationService.Source;
}
// ...
它的工作原理(八九不離十),但它的醜陋。
更新3:看起來像wp7操作系統將自動重新加載頁面應用程序中的正確頁面。實際上我使用的是頁面,所以在這裏可能沒有太多工作要做。
但是,它似乎並不奏效。我啓動應用程序,進入一個頁面,點擊「開始」,然後點擊「返回」。屏幕上顯示「恢復...」,但似乎掛在那裏。我的代碼是否應該以某種方式迴應?即使在點擊「開始」之後,是否可以保持調試器的連接?
權。對於每個頁面,我希望'OnNavigatedFrom'方法相同 - 將當前URI保存到'State'中。我想通過繼承來做到這一點,但看起來我不能,基於生成的代碼。有另一種方法可以做到嗎? – 2010-11-12 04:55:11
你在應用程序中使用MVVM嗎?我使用了MVVMLight工具包,並使用帶有OnNavigatedFrom/OnNavigatedTo消息過濾器的Messenger類來有效地存儲應用程序中的數據。 – indyfromoz 2010-11-12 07:32:30
我沒有在我的應用程序中明確使用MVVM。 MV Phone是否可用於Windows Phone 7? – 2010-11-12 14:44:57