Silverlight'ta bir wp7 uygulaması yapıyorum. Uygulamamın tüm durumu NavigationContext.QueryString
'da saklanır. Bu uygulamanın devre dışı bırakılması üzerine kaydedilebilirse ve bu sayfa uygulama yeniden etkinleştirmeye yönlendirilirse, bu, taşlama gereksinimlerimi dikkate alırdı. Ancak, bunun nasıl yapılacağını tam olarak bilmiyorum. NavigationContext.QueryString
dosyasını App.xaml.cs::Application_Deactivated()
numaralı sözlükte kaydetmeyi düşünüyordum, ancak bu kod NavigationContext.QueryString
erişim hakkına sahip değil. Bunu yapmanın başka bir yolu var mı?Windows Phone 7: URI'lerle Tombstone?
Her gittiğimde sorgu dizesini her zaman State sözlüğüne kaydedebilirim, ardından uygulama yeniden etkinleştirildiğinde bunu geri yükleyebilirim. Ya da daha iyi bir yaklaşım var mı?
Güncelleme: 'ın indyfromoz cevap dayanarak, ben PhoneApplicationPage
devralan bir sınıfta bu uygulamaya düşündüm aşağıdaki
OnNavigatedToHandler()
{
// save NavigationContext.QueryString in the State dictionary
}
fazlalığını azaltmak için uygulamak istiyorum sonra sayfaların geri kalanı bu sınıftan miras kalıyor. Ancak, sonra tüm sayfa sınıfları partial
olduğu için sorun, çünkü bunlar da oluşturulan kodda tanımlanmıştır. Oluşturulan kodu değiştirmek istemiyorum, çünkü her yeniden yaratıldığında yeniden canlanması büyük bir acı olacaktır.
Bunu yapmanın daha iyi bir yolu var mı?
Güncelleme 2: (sorta) Çalışıyor
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;
}
// ...
ama çirkin: İşte benim app (başlangıçta için navigasyon olduğunu one) ana sayfasında şimdi birlikte hack am budur .
Güncelleştirme 3: Wp7'nin sayfa tabanlı bir uygulamada doğru sayfayı otomatik olarak yeniden yükleyeceği anlaşılıyor. Aslında sayfaları kullanıyorum, belki de burada yapmam gereken çok fazla iş yok. Bununla birlikte, çalışıyor gibi görünmüyor. Uygulamayı başlatıyorum, bir sayfaya gidin, "Başlat" a basın, sonra "Geri" ye basın. Ekranda "Devam ediyor ..." yazıyor ama orada asılı duruyor. Kodumun bu noktada bir şekilde yanıt vermesi gerekiyor mu? "Başlat" a basıldıktan sonra bile hata ayıklayıcısını ekleyebileceğim bir yol var mı?
Sağ. Her sayfa için, "OnNavigatedFrom" yönteminin aynı olmasını istiyorum - geçerli URI'yi "State" durumuna kaydedin. Bunu miras yoluyla yapmak istedim, ama yaratılan kodlara dayanarak yapamadım gibi görünüyor. Yapabileceğim başka bir yol var mı? –
Uygulamanızda MVVM kullanıyor musunuz? MVVMLight araç setini kullandım ve uygulamadan verileri etkin bir şekilde saklamak için mesaj filtreleriyle OnNavigatedFrom/OnNavigatedTo ile birlikte Messenger sınıfını kullandım. – indyfromoz
Uygulamamda açıkça MVVM kullanmıyorum. MVVMLight Windows Phone 7 için kullanılabilir mi? –