मेरे पास यूडब्ल्यूपी में मेनपेज इस तरह है:

public sealed partial class MainPage : Page
{
    private MainViewModel _viewModel;

    public MainPage()
    {
        this.InitializeComponent();
        _viewModel = new MainViewModel(new MyDataService());
        DataContext = _viewModel;
        Loaded += MainWindow_Loaded;
    }

    private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        _viewModel.Load();
    }
}

मेरा विंडो ऐप बिना किसी समस्या के शुरू और चला।

अब, मैं MainViewModel को MainPage के पैरामीटर के रूप में पास करना चाहता हूं।

public sealed partial class MainPage : Page
{
    private MainViewModel _viewModel;

    public MainPage(MainViewWindow mvw)
    {
        this.InitializeComponent();
        _viewModel = mvw;
        DataContext = _viewModel;
        Loaded += MainWindow_Loaded;
    }

    private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        _viewModel.Load();
    }
}

मैं पैरामीटर को MainPage में इनिशियलाइज़ और पास कैसे करूँ? यूनिवर्सल विंडोज StartupUri को App.xaml में wpf की तरह नहीं पहचानता है।

0
user1205746 3 जिंदा 2020, 22:09

1 उत्तर

सबसे बढ़िया उत्तर

UWP में, Page को एक पैरामीटर रहित कंस्ट्रक्टर की आवश्यकता होती है। इसका कारण यह है कि Frame.Navigate विधि एक पैरामीटर के रूप में पृष्ठ का केवल एक Type लेती है, और इसकी तात्कालिकता को संभालती है। यह दुर्भाग्यपूर्ण है और विनयूआई के भविष्य के संस्करणों के लिए इसे सुधारने की योजना है (यह भी एक कारण है कि प्रिज्म को नए संस्करणों में यूडब्ल्यूपी के लिए समर्थन छोड़ना पड़ा)।

अभी के लिए, आपको कंस्ट्रक्टर को पैरामीटर रहित रखना होगा और कंस्ट्रक्टर के पूरा होने के बाद सेवाओं को इंजेक्ट करना होगा।

यदि आपको केवल साधारण पैरामीटर पास करने की आवश्यकता है, तो आप Frame.Navigate(Type, object) विधि का उपयोग कर सकते हैं। दूसरा पैरामीटर, ठीक है, आपका पैरामीटर है, जिसे आप तब प्राप्त कर सकते हैं जब आप Page.OnNavigatedTo विधि को ओवरराइड करते हैं। सावधान रहें कि पैरामीटर प्रकार केवल एक साधारण प्रकार (string, int, आदि) होना चाहिए क्योंकि ऐप के होने पर इसे Frame के नेविगेशन स्टैक में स्वचालित रूप से क्रमबद्ध करने की आवश्यकता होती है। निलंबित। यदि आवश्यक हो तो आप JSON स्ट्रिंग का उपयोग करके अधिक जटिल पैरामीटर बदल सकते हैं।

कई एमवीवीएम ढांचे आपके लिए यह भारी भारोत्तोलन कर सकते हैं - उदाहरण के लिए एमवीवीएमक्रॉस। इसमें एक अंतर्निर्मित आईओसी प्रदाता के साथ एक बहुत अच्छा सेटअप है जो आपके लिए बहुत सारे काम करता है, जिसमें दृश्य मॉडल जीवनकाल और मिलान करने वाले दृश्य और नामकरण सम्मेलन द्वारा मॉडल देखें।

1
Martin Zikmund 3 जिंदा 2020, 20:51