2011-04-11 9 views
7

में किसी नए दृश्य पर नेविगेट करते समय किसी ऑब्जेक्ट को कैसे पास किया जाए, मैं एक PRISM एप्लिकेशन पर काम कर रहा हूं जहां हम डेटा में ड्रिल करते हैं (अधिक जानकारी प्राप्त करने के लिए)। मेरे कार्यान्वयन में मेरे पास एक नेस्टेड एमवीवीएम है और जब मैं पेड़ को नेविगेट करता हूं तो मैं अपने नए बनाए गए दृश्य में एक मॉडल पास करना चाहता हूं।PRISM 4

जहां तक ​​मुझे पता है, वर्तमान में PRISM स्ट्रिंग पास करने की अनुमति देता है, लेकिन ऑब्जेक्ट पास करने की अनुमति नहीं देता है। मैं जानना चाहता हूं कि इस मुद्दे पर काबू पाने के तरीके क्या हैं।

उत्तर

7

मैं आमतौर पर एक सेवा का उपयोग करता हूं जहां मैं उन वस्तुओं को पंजीकृत करता हूं जिन्हें मैं एक गाइड के साथ पास करना चाहता हूं। ये एक हैशटेबल में संग्रहीत हो जाते हैं और प्रिज्म में नेविगेट करते समय मैं ग्रिड को पैरामीटर के रूप में पास करता हूं जिसका उपयोग ऑब्जेक्ट को पुनर्प्राप्त करने के लिए किया जा सकता है।

आशा है कि यह आपको समझ में आता है!

+2

यह समझ में आता है। यह एक शर्म की बात है PRISM नेविगेशन के दौरान गुजरने वाली वस्तु का समर्थन नहीं करता है जिससे यह जीवन को इतना आसान बना देगा। – Vitalij

3

मैं NavigationContext का उपयोग कर ऑब्जेक्ट्स को पास करने के लिए OnNavigatedTo और OnNavigatedFrom विधियों का उपयोग करूंगा।

public class MyViewModel : INavigationAware 
{ ... 

फिर आप OnNavigatedFrom को लागू करने और वस्तु आप नेविगेशन संदर्भ के रूप में पारित करने के लिए इस प्रकार चाहते हैं निर्धारित कर सकते हैं - -

void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext) 
{ 
    SharedData data = new SharedData(); 
    ... 
    navigationContext.NavigationService.Region.Context = data; 
} 

और जब आप करना चाहते हैं

पहले INavigationAware इंटरफ़ेस से viewmodel निकाले जाते हैं , डेटा प्राप्त दूसरे दृश्य मॉडल में कोड का निम्न भाग को जोड़ने -

void INavigationAware.OnNavigatedTo(NavigationContext navigationContext) 
{ 
    if (navigationContext.NavigationService.Region.Context != null) 
    { 
       if (navigationContext.NavigationService.Region.Context is SharedData) 
       { 
        SharedData data = (SharedData)navigationContext.NavigationService.Region.Context; 
        ... 
       } 
    } 
} 

पीएस। अगर यह मदद करता है तो इसे उत्तर के रूप में चिह्नित करें।

+1

OnNavigatedFrom केवल तभी काम कर रहा है जब आप एक ही क्षेत्र में किसी दृश्य को नेविगेशन करते हैं। यदि आप किसी अन्य क्षेत्र में हैं तो आप यह कर सकते हैं: _regionManager.Regions [RegionNames.MainRegion] .Context = नई सूची {new DataItem()}; और फिर RequestNavigate कॉल करें –

1

प्रिज्म मानकों की आपूर्ति का समर्थन करता है:

var para = new NavigationParameters { { "SearchResult", result } }; 
_regionManager.RequestNavigate(ShellRegions.DockedRight, typeof(UI.SearchResultView).FullName, OnNavigationCompleted, para); 

और अपने दृश्य, ViewModel या दोनों पर INavigationAware इंटरफ़ेस को लागू।

आप यहां विवरण भी प्राप्त कर सकते हैं: https://msdn.microsoft.com/en-us/library/gg430861%28v=pandp.40%29.aspx