2013-05-21 5 views
13

में गैर-व्यू/व्यूमोडेल से दृश्य दिखाएं गैर-दृश्य से mvvmcross में कोई दृश्य खोलने का सही तरीका क्या है? व्यूमोडेल के भीतर से हम ShowViewModel <> (..) का उपयोग करेंगे।mvvmcross

विशेष रूप से हम ऐप खोलने के लिए पुश अधिसूचना का जवाब दे रहे हैं (एक कस्टम पेलोड के साथ) जो एक दृश्य को निर्देशित करता है जिसे लोड किया जाना चाहिए।

हम सिर्फ अवधारणा के सबूत के लिए एक hackety वैकल्पिक हल है, बस सही MVX दृष्टिकोण की एक विचार प्राप्त करना चाहता था

उत्तर

16

मुझे नहीं लगता कि वहाँ एक 'सही तरीका' है - मैं इसे अपने अनुप्रयोग पर निर्भर करता है लगता है और आपको इसे करने की क्या ज़रूरत है।

कुछ विशिष्ट मामलों के लिए - उदा। ViewModel-> ViewModel और AppStart - MvvmCross कुछ सुविधाजनक तरीके प्रदान:

  • आप ShowViewModelMvxViewModel
  • एप्लिकेशन शुरू में कॉल कर सकते हैं एक संकेत वस्तु का उपयोग करने के अधिरोहित जा सकता है - देखना https://speakerdeck.com/cirrious/appstart-in-mvvmcross

लेकिन कुल मिलाकर , किसी भी वर्ग को फोन करके एक ShowViewModel अनुरोध कर सकते हैं:

  var viewDispatcher = Mvx.Resolve<IMvxViewDispatcher>(); 
     viewDispatcher.ShowViewModel(new MvxViewModelRequest(
                viewModelType, 
                parameterBundle, 
                presentationBundle, 
                requestedBy)); 

इसके अलावा, एक आधार सी है lass - MvxNavigatingObject.cs - जो इस के साथ मदद कर सकता है (यह MvxViewModel और MvxAppStart का आधार वर्ग है) - ताकि आप आसानी से INavigateMyselfService जैसे एक या अधिक सेवाएं प्रदान कर सकें जिनके कार्यान्वयन MvxNavigatingObject से प्राप्त होते हैं।

public interface INavigateMyselfService 
    { 
     void GoWild(string side); 
    } 

    public class NavigateMyselfService 
    : MvxNavigatingObject 
    , INavigateMyselfService 
    { 
     public void GoWild(string side) 
     { 
      ShowViewModel<WildViewModel>(new { side = side }); 
     } 
    } 
+1

Ah IMvxViewDispatcher बिल्कुल वही था जो मैं ढूंढ रहा था! INVigateMyselfService मेरे कार्यान्वयन को छोड़कर, मैंने जो किया था, उसके समान है .. सुंदर – geoffreys

+0

@ स्टुअर्ट आपके द्वारा किए गए सभी कार्यों के लिए धन्यवाद, खासकर Xamarin समुदाय में! यह सिर्फ सही है। मैं अपने ऐप के अनधिकृत अपवादों को संभालने के लिए इसका उपयोग कर रहा हूं। अगर मुझे ऐसा अपवाद मिलता है तो अब मैं साइन इन स्क्रीन पर आसान नेविगेशन के लिए इसका उपयोग कर सकता हूं। – dynamokaj

+0

@Stuart हम परिदृश्य में दृश्य मॉडल के बीच नेविगेट करने के लिए यादृच्छिक विफलताओं को देख रहे हैं जहां हम SplashScreenViewModel पर नेविगेट करते हैं और हमारे मेनव्यू मॉडेल में अंतराल के बाद। दोनों ShowViewModel () का उपयोग कर रहे हैं; एपीआई। हम "एमवीएक्स: डायग्नोस्टिक: 70.22 के एक लॉग के साथ समाप्त हो रहे हैं ViewModel MainViewModel दिखा रहा है" लेकिन एप्लिकेशन SplashScreenViewModel पर रहता है। यहां कोई संकेत है कि इसे कैसे डिबग करें? Thnx! – baraka

0

http://forums.xamarin.com/discussion/4694/conditionally-call-registerappstart-with-mvvmcross

ऊपर के लिंक की जाँच करें और आप विचार

मेरे मामले में मिल जाएगा, मैं इस tile.For माध्यमिक से एप्लिकेशन लॉन्च करना चाहते हैं, मैं माध्यमिक के लिए विशिष्ट पृष्ठ को लॉन्च करने के लिए है टाइल।

मेरा प्रारंभिक ऐप स्टार्ट व्यू मॉडल LoginViewModel है और मेरा कस्टम ऐप स्टार्ट व्यू मॉडल होम व्यू मॉडेल है।

मैंने इसे App.cs (Core) से MyCustomAppStart क्लास में नियंत्रित किया।

उपरोक्त लिंक

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