2012-02-22 6 views
6

कई ऑनलाइन उदाहरणों में मैं इस पाया:OnNavigatedTo लोड घटना बनाम

public partial class ForecastPage : PhoneApplicationPage 
{ 
    Forecast forecast; 

    public ForecastPage() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     // code here 
    } 
} 

लेकिन दूसरों में मैं जैसे

public partial class Person : PhoneApplicationPage 
{ 
    private PersonViewModel _ViewModel; 

    public Person() 
    { 
    InitializeComponent(); 
    this.Loaded += new RoutedEventHandler(SearchView_Loaded); 
    } 

    void SearchView_Loaded(object sender, RoutedEventArgs e) 
    { 
    // code here 
    } 
} 

मैं जानता हूँ कि Load घटना के उपयोग में पाया गया कि OnNavigatedTo आग Load घटना से पहले , लेकिन यूआई से पहले दोनों आग फोन में खींची गई हैं, इसलिए मेरा प्रश्न क्या कोई फायदा है दूसरे से एक विधि का उपयोग करने में?

+1

यदि आप बहुत प्रारंभिक कार्य कर रहे हैं, तो आप लोडेड का उपयोग OnNavigatedTo के विरोध में करना चाहते हैं या अन्यथा आपके पृष्ठ को लोड करने में कुछ समय लग सकता है। – brendan

उत्तर

7

OnNavigatedTo के बारे में दस्तावेज़ से पढ़ रहा है:

कहा जाता है जब एक पृष्ठ एक फ्रेम में सक्रिय पेज बन जाता है।

और जब हम Loaded के बारे में घटना को पढ़ने देखें:

तब होता है जब एक FrameworkElement निर्माण किया गया है और वस्तु पेड़ को जोड़ा गया।

वे पृष्ठ के रूप में, पूरी तरह से अलग कर रहे हैं, मुझे ठीक कर लें मैं गलत हूँ, आपके आवेदन के जीवनकाल के दौरान active एक से अधिक समय हो सकता है, लेकिन FrameworkElementकी constuction आमतौर पर एक बार होता है।

+0

कुछ एमएसएफटी उदाहरणों (उदाहरण के लिए http://msdn.microsoft.com/library/windows/apps/ff967547(v=vs.105).aspx) ने अपना कोड ऑननविगेटेड में रखा है और पेज कन्स्ट्रक्टर में एक बूल का उपयोग करें निर्धारित करें कि इसे निष्पादित करने की आवश्यकता है या नहीं। – Jedidja

23

मैं टिग्रान से असहमत हूं।

public View() 
{ 
    InitializeComponent(); 

    personList.ItemsSource = PersonDataSource.CreateList(100); 

    Loaded += (sender, args) => Debug.WriteLine("Loaded"); 
} 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     Debug.WriteLine("Navigated"); 
    } 

जबकि आगे-पीछे कूद, उत्पादन

नेविगेट लोडेड नेविगेट है लोडेड नेविगेट लोडेड

तो, OnNavigated जब पेज नेविगेशन किया जाता है कहा जाता है , लेकिन पहले (दौरान) पेज नियंत्रण हैं लोड किया गया, जबकि Loaded को पृष्ठ तैयार होने पर कहा जाता है और सभी नियंत्रण लोड होते हैं।

+0

हमम ... क्या तब टिग्रेन का जवाब स्वीकार कर लिया जाना चाहिए? मुझे आश्चर्य है कि यह अभी भी 8.1 में सच है – Jedidja

1

विंडोज रनटाइम में, लोडेड ईवेंट हमेशा ऑनवविगेटेड के बाद आग लग जाएगा (भले ही पृष्ठों को नेविगेशन कैशमोड सेट करके कैश किया जा रहा हो)। Vitalii इसके बारे में सही है।

MSDN के अनुसार:

विंडोज रनटाइम कार्यान्वयन में, लोडेड घटना की गारंटी है के बाद एक नियंत्रण टेम्पलेट लागू किया जाता है होते हैं, और आप वस्तुओं XAML लागू करने के द्वारा बनाई गई हैं कि करने के लिए संदर्भ प्राप्त कर सकते हैं टेम्पलेट।

ऐप कोड के लिए जो पृष्ठों के बीच नेविगेशन का उपयोग करता है, पृष्ठ का उपयोग न करें। तत्व मैनिपुलेशन या के गंतव्य परिवर्तन के लिए गंतव्य पृष्ठ पर नियंत्रण के लिए।ऑन -विगेटेड वर्चुअल विधि टेम्पलेट लोड होने से पहले लागू किया गया है, इस प्रकार टेम्पलेट्स से तत्व अभी तक उपलब्ध नहीं हैं। इसके बजाय, लोड किए गए ईवेंट हैंडलर को नए लोड किए गए पृष्ठ की सामग्री के रूट पर संलग्न करें, और मैनिपुलेशन, राज्य परिवर्तन, इवेंट वायरिंग और लोड किए गए ईवेंट हैंडलर में कोई भी तत्व निष्पादित करें।

लेकिन एक अच्छा कारण है कि आप OnNavigatedTo का उपयोग क्यों करना चाहते हैं: यह एकमात्र ऐसा स्थान है जहां आप नेविगेशन पैरामीटर प्राप्त कर सकते हैं। यदि आप नेविगेशन पैरामीटर का कभी भी उपयोग नहीं करते हैं, तो लोडेड ईवेंट का उपयोग करें।