2012-09-10 8 views
19

मैं विंडोज 8 आरटीएम और सी # (वीएस 2012 आरटीएम) का उपयोग कर मेट्रो ऐप विकसित कर रहा हूं, मैं पेज रीलोड, के साथ फंस गया हूं क्या कोई मुझे बता सकता है कि पृष्ठ को फिर से लोड करने के तरीके को कैसे लोड करना है पेज फिर से। संक्षिप्त: मैं बहुभाषी समर्थन के साथ मेट्रो ऐप विकसित कर रहा हूं। उपयोगकर्ता भाषा का चयन जब मैं नीचे दिए गए कोडमेट्रो ऐप में पृष्ठ को फिर से लोड करें सी #

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "de"; 

द्वारा प्राथमिक भाषा अधिभावी कर रहा हूँ और इस कोड

this.Frame.Navigate(this.GetType()); 

भाषा बदल करने के लिए "डी" का उपयोग करके पृष्ठ पुनः लोड, लेकिन जब मैं प्रेस "वापस" पृष्ठ पर इसके पिछले पृष्ठ पर नेविगेट करने के बजाए एक ही पृष्ठ पर नेविगेट किया गया। क्या मुझे कुछ याद आया, क्या कोई मुझे बता सकता है कि यह कैसे करें। अग्रिम धन्यवाद

+1

क्या आपने कभी राजकुमार को हल या समाधान दिया है? – Nilzor

+0

सबसे अच्छा जवाब चिह्नित करने के लिए यह बहुत विनम्र होगा। –

उत्तर

15

यह आपके पृष्ठ ताज़ा होगी:

var _Frame = Window.Current.Content as Frame; 
_Frame.Navigate(_Frame.Content.GetType()); 
_Frame.GoBack(); // remove from BackStack 
  • हैंडलिंग OnNavigatingFrom() आप अपने पृष्ठ के डेटा और राज्य बचा सकता है।
  • ऑननविगेट करने के लिए हैंडलिंग() आप अपने पृष्ठ का डेटा और स्थिति लोड कर सकते हैं।

एक चेतावनी के रूप में, मेरा नमूना पेज पैरामीटर के लिए खाता नहीं है, आपको इसकी आवश्यकता हो सकती है। इसके अलावा, एक और चेतावनी, मेरा नमूना आपके पृष्ठ को दो बार पुनः लोड करता है। लेकिन बैकस्टैक से नई प्रविष्टि को निकालने के लिए गोबैक() आवश्यक है। WP के विपरीत, फ़्रेम में रीफ्रेश नहीं है()। इसके अलावा, बैकस्टैक में निकालें() नहीं है।

अद्यतन

मैं अब ऊपर दृष्टिकोण का उपयोग करें। मैं इसका उपयोग करता हूं:

public bool Reload() { return Reload(null); } 
private bool Reload(object param) 
{ 
    Type type = this.Frame.CurrentSourcePageType; 
    if (this.Frame.BackStack.Any()) 
    { 
     type = this.Frame.BackStack.Last().SourcePageType; 
     param = this.Frame.BackStack.Last().Parameter; 
    } 
    try { return this.Frame.Navigate(type, param); } 
    finally { this.Frame.BackStack.Remove(this.Frame.BackStack.Last()); } 
} 
+1

जो किसी परवाह करता है: जब (जटिल) पृष्ठ पैरामीटर का उपयोग करते समय, बस अपने पेज बेस क्लास में पैरामीटर स्टोर करें। तो आप इसे अभी पास करते हैं: _Frame.Navigate (..., सहेजे गए पैरामीटर)। दो बार लोडिंग को रोकने के लिए (अगर आपको नेविगेटेडो में भारी लोडिंग हो रही है तो चिंता करने के लिए कुछ) वैश्विक ध्वज "IsReloading" स्थापित कर रहा है। यदि सत्य पर सेट किया गया है, तो आगे लोडिंग रद्द करें और इसे गलत पर सेट करें। –

+0

नमूने पैराग्राफ से बहुत बेहतर हैं। –

+8

योगदान आलोचकों की तुलना में बहुत बेहतर हैं –

1

मुझे यकीन नहीं है कि मैं पूरी तरह से समझता हूं कि आप क्या करने की कोशिश कर रहे हैं, इसलिए यह गलत हो सकता है।

जब आप पृष्ठ को रीफ्रेश करते हैं तो कोड की उस पंक्ति को कॉल करके, आप वर्तमान प्रकार का एक नया ऑब्जेक्ट बना रहे हैं और इसमें नेविगेट कर रहे हैं, इसलिए यह वर्तमान पृष्ठ पर होने वाले परिवर्तनों को सहेजता नहीं है।

क्या आप किसी भी प्रकार के डिज़ाइन पैटर्न का उपयोग कर रहे हैं? इस तरह की चीजों के लिए मैं एमवीवीएम (एमवीवीएम लाइट लाइब्रेरी का उपयोग करके) का उपयोग करता हूं जो वास्तव में एक अच्छी नेविगेशन सेवा लागू करता है जो इस तरह की चीजों को चेक में रखेगा।

+0

धन्यवाद lookitskris, लेकिन मैं यहां एमवीवीएम पैटर्न का उपयोग नहीं कर रहा हूं, क्या कोई तरीका है कि मैं नई ऑब्जेक्ट बनाने के साथ पेज को फिर से लोड कर सकता हूं, कृपया मेरी मदद करें। –

+0

फ़्रेम ऑब्जेक्ट पर रीफ्रेश विधि देखें – lookitskris

+0

ऐसा लगता है कि WinRT में फ़्रेम पर रीफ्रेश उपलब्ध नहीं है। https://msdn.microsoft.com/en-us/library/system.windows.controls.frame.refresh%28v=vs.110%29.aspx –

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

  • कोई संबंधित समस्या नहीं^_^