2010-11-04 12 views
5

मैं सिल्वरलाइट में एक wp7 ऐप बना रहा हूं। मेरे सभी ऐप की स्थिति NavigationContext.QueryString में संग्रहीत है। यदि इसे एप्लिकेशन निष्क्रिय करने पर सहेजा जा सकता है, और वह पृष्ठ एप्लिकेशन पुनर्सक्रियण पर नेविगेट किया गया है, जो कि टॉम्बस्टनिंग के लिए मेरी आवश्यकताओं का ख्याल रखेगा।विंडोज फोन 7: यूआरआई के साथ टॉम्बस्टनिंग?

हालांकि, मुझे पूरा यकीन नहीं है कि यह कैसे करें। मैं को में State शब्दकोश में सहेजने के बारे में सोच रहा था, लेकिन उस कोड के पास NavigationContext.QueryString तक पहुंच नहीं है। क्या मैं ऐसा कर सकता हूं?

मुझे लगता है कि जब भी मैं नेविगेट करता हूं तो मैं सिर्फ क्वेरी स्ट्रिंग को स्टेट डिक्शनरी में सहेज सकता हूं, फिर ऐप फिर से सक्रिय होने पर उसे पुनर्स्थापित कर सकता है। या क्या एक बेहतर दृष्टिकोण है?

अद्यतन: 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; 
    } 

    // ... 

यह काम करता है (sorta) लेकिन यह बदसूरत है: यहाँ है कि मैं क्या एक साथ मेरे ऐप (एक है कि स्टार्टअप पर पर भेज रहा है) के मुख्य पृष्ठ में अब हैकिंग कर रहा हूँ ।

अपडेट 3: ऐसा लगता है कि wp7 ओएस स्वचालित रूप से पृष्ठ-आधारित ऐप में सही पृष्ठ को पुनः लोड कर देगा। मैं वास्तव में पृष्ठों का उपयोग कर रहा हूं, इसलिए शायद मुझे ऐसा करने की ज़रूरत नहीं है।

हालांकि, यह काम नहीं कर रहा प्रतीत होता है। मैं ऐप लॉन्च करता हूं, एक पेज पर जाता हूं, "स्टार्ट" हिट करता हूं, फिर "बैक" दबाता हूं। स्क्रीन कहती है "फिर से शुरू हो रहा है ..." लेकिन वहां लटका लगता है। क्या मेरा कोड इस बिंदु पर किसी तरह से प्रतिक्रिया दे रहा है? क्या कोई तरीका है कि मैं "स्टार्ट" मारने के बाद भी डीबगर संलग्न कर सकता हूं?

उत्तर

5

क्षणिक डेटा आमतौर पर State dictionary provided by the PhoneApplicationService class में संग्रहीत किया जाता है। डेटा को पृष्ठ के OnNavigatedFrom ईवेंट में संग्रहीत किया जाता है और पृष्ठ के OnNavigatedTo ईवेंट से पुनर्स्थापित किया जाता है। यदि आपने ऑन -विगेटेड फ्रॉम इवेंट के भीतर राज्य के शब्दकोश में पृष्ठ के यूआरआई से पैरामीटर को संग्रहीत किया है जो आपके एप्लिकेशन के प्रत्येक पृष्ठ में उपलब्ध है, तो आप ऑन नविगेटेड टॉ इवेंट में पैरामीटर पढ़ने के लिए तर्क लागू कर सकते हैं, इस प्रकार टॉम्बस्टनिंग

का ख्याल रखना

एचटीएच, indyfromoz

+0

दाएं। प्रत्येक पृष्ठ के लिए, मैं चाहता हूं कि 'OnNavigatedFrom' विधि समान हो - वर्तमान यूआरआई को' राज्य 'में सहेजें। मैं विरासत के माध्यम से ऐसा करना चाहता था, लेकिन ऐसा लगता है कि जेनरेट कोड के आधार पर मैं नहीं कर सकता। क्या मैं ऐसा कर सकता हूं? –

+0

क्या आप अपने आवेदन में एमवीवीएम का उपयोग कर रहे हैं? मैंने एमवीवीएमलाइट टूलकिट का उपयोग किया है और एप्लिकेशन से डेटा को प्रभावी ढंग से स्टोर करने के लिए संदेश फ़िल्टर के साथ ऑननविगेटेड फ्रॉम/ऑन नविगेटेड के साथ मेसेंजर क्लास का उपयोग किया है। – indyfromoz

+0

मैं स्पष्ट रूप से अपने ऐप में एमवीवीएम का उपयोग नहीं कर रहा हूं। क्या विंडोज फोन 7 के लिए एमवीवीएमएलटी उपलब्ध है? –

संबंधित मुद्दे