كيفية تنفيذ التنقل المشروط/إعادة التوجيه لتطبيق Windows Universal بطريقة MVVM

StackOverflow https://stackoverflow.com//questions/25053625

سؤال

لدي تطبيق Windows Universal والذي يتضمن تسجيل الدخول.السيناريو النموذجي لهذا النوع من التطبيقات هو الحالات المختلفة.على سبيل المثال، ما إذا كان المستخدم لم يسجل الدخول للمرة الأولى بعد أو أنه قام بالفعل بتسجيل الدخول من قبل وأعاد فتح التطبيق مرة أخرى.اعتمادا على الدولة هنا هي الإجراءات

ifloggedin - عرض الصفحة الرئيسية || ifnotloggedin - عرض تسجيل الدخول

الآن بناءً على الحالة (الحالة) يتعين علينا عرض صفحات مختلفة.

سؤالي مشابه ل هذا لكنني أردت أن أفهم كيفية تنفيذ الشيء نفسه في MVVM وما هو المكان المناسب لوضع هذا المنطق الشرطي.

سيؤدي وضعه في app.xaml.cs إلى حل المشكلة ولكنه يفسد app.xaml.cs وينتهك MVVM لأن ViewModel لا يتعامل مع منطق التفاعل.

الحل الذي جربته هو

  1. إنشاء صفحة وسيطة (Intermediate.xaml).
  2. قم بإنشاء ViewModel(IntermediateViewModel.cs) المطابق لما سبق.
  3. في مُنشئ ViewModel هذا، قم بتضمين العبارة الشرطية لتحديد الصفحة التي سيتم التنقل فيها.

لنفترض أن حالتي موجودة في المتغير المنطقي IsLoggedIn.أين تضع الشيك المشروط؟

الكود الموجود في IntermediateViewModel الخاص بي هو كما يلي

public bool IsLoggedIn {get; set;}
//IsLoggedIn contains the condition of whether the user is logged-in or not-logged-in

public IntermediateViewModel()
{
    if (IsLoggedIn == false) 
    {
        NavigationService.Navigate("LoginPage");
    }
    else if (IsLoggedIn == true)
    {
        NavigationService.Navigate("HomePage");
    }
}

المشكلة في هذا الحل هي أن لديك الآن صفحة أخرى (Intermediate.xaml) في مجموعتك الخلفية.هل هناك طريقة للتخلص من هذا؟

هذا ويبدو أن الحلول المماثلة لم تعد ذات صلة بتطبيقات Windows Universal Apps (Windows 8.1/Windows Phone 8.1) بعد الآن.

هل يعرف أحد كيفية تنفيذ ذلك بالطريقة الصحيحة باستخدام MVVM؟

هل كانت مفيدة؟

المحلول

حسنًا، في هذه الحالة، لا يتم الاحتفاظ بـ MVVM لأن هذا يجب أن يحدث قبل تحديد العرض.لماذا لا تقوم بإنشاء فصل دراسي ("Navigator'أو أيًا كان) الذي يحتوي على المنطق الخاص بك، ويوفر خاصية ('InitialPage') التي تستخدمها في التطبيق (بدلاً من الصفحة الأولية المرمزة) للانتقال إلى الصفحة الأولى؟بهذه الطريقة يمكنك الاحتفاظ بالمنطق الخاص بك خارج فئة التطبيق، ولا يوجد سوى القليل من التعديلات التي يمكنك إجراؤها عليه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top