MvvmCross - Как сделать навигационный вызов Mvx View из приложения UIA Xamarin.iOS - PullRequest
1 голос
/ 28 июня 2019

Моя цель - перенаправить пользователя обратно на экран входа в систему после истечения времени простоя. У меня есть этот код для обратного отсчета после каждого нажатия / касания. Это работает хорошо, но моя текущая проблема в том, что я понятия не имею, чтобы перенаправить пользователя обратно на экран входа. Поскольку это проект MvvmCross 4.4, документации для поиска не так много. Если бы я мог также получить пример кода для Android, это было бы очень полезно. Я буду признателен.

Ниже приведен код, который я положил в Main.cs

public class Application{  

    static void Main(string[] args){  
        //UIApplication.Main(args, null, "AppDelegate");  
        UIApplication.Main(args, "MyApplication", "AppDelegate");  
    }  

}  

//DELEGATE  
[Register("MyApplication")]  
public class MyApplication : UIApplication {  

    public override void SendEvent(UIEvent uievent) {  
        base.SendEvent(uievent);  
        var allTouches = uievent.AllTouches;  
        if (allTouches.Count > 0) {  
            var phase = ((UITouch)allTouches.AnyObject).Phase;  
            if (phase == UITouchPhase.Began || phase == UITouchPhase.Ended)  
                ResetIdleTimer();  
        }  
    }  

    NSTimer idleTimer;  
    void ResetIdleTimer() {  
        if (idleTimer != null) {  
            idleTimer.Invalidate();  
            idleTimer.Dispose();  
        }  

        idleTimer = NSTimer.CreateScheduledTimer(TimeSpan.FromMinutes(0.5), TimerExceeded);  
    }  

    void TimerExceeded(NSTimer obj) {  

        MvxiOSToastService toastService = new MvxiOSToastService();
        toastService.DisplayMessageAndDoSomething("You are going to be timed out.","Idle time exceeded.", RedirectToLogin);  

        Console.WriteLine("idle time exceeded");  
    }  

    void RedirectToLogin() {  

        var window = UIApplication.SharedApplication.KeyWindow;  
        var vc = window.RootViewController;  

        //ERROR HERE  
        var nextVC = new LoginView();   
        vc.ShowViewController(nextVC, this);  
        //----------
    }  
}  

1 Ответ

0 голосов
/ 28 июня 2019

Вам нужно будет разрешить экземпляр вашего представления представления и получить от него текущее представление представления. После этого вы можете получить доступ к объекту ViewModel и выполнить приведенные ниже вызовы для использования навигации MvvmCross.

Если у вас есть доступ к RootViewController, тогда

void RedirectToLogin() {  
    var window = UIApplication.SharedApplication.KeyWindow;  
    var vc = window.RootViewController;  

    var mvxView = vc as IMvxIosView;  
    var vm = mvxView.ViewModel;

    vm.ShowViewModel<TViewModel>();
}

MvvmCross до 5

https://www.mvvmcross.com/documentation/fundamentals/view-presenters

ShowViewModel<TViewModel>()

MvvmCross 5 +

Разрешите экземпляр вашей службы навигации и используйте его для вызова навигации на экране входа в систему.

Так что-то вроде:

Mvx.Resolve<IMvxNavigationService>().Navigate<LoginViewModel>();
...