сборка мусора для моделей просмотра на формах Xamarin Выход из оболочки - PullRequest
0 голосов
/ 27 мая 2020

Мне было интересно, есть ли способ обнулить контексты привязки всех моделей просмотра, а затем собрать мусор при выходе из системы? В моем приложении

async void OnLogoutClicked(object sender, EventArgs args)
        {
            try
            {
                var result = await UserLogoutRequest.Logout();

                if (result.responseCode == ResponseCodes.SUCCESS)
                {
                    DialogService.ShowSuccessToast("Logout successful");
                }
                else
                {
                    DialogService.ShowErrorToast("A server error occurred during logout");
                }
            }
            catch (Exception ex)
            {
                DialogService.ShowErrorToast("A client error occurred during logout");
            }
            finally
            {
                await DataManager.Instance.SetLoggedInUser(null);
                await DataManager.Instance.SetToken(string.Empty);
                GC.Collect(); // TODO: Figure out how to GC the ViewModels so that when user logs in again it's not using the same instance of the VM
                await AppShell.Current.GoToAsync("//Welcome");
            }
        }
    }

G C .Collect (), похоже, мало что делает, поскольку страницы все еще связаны с их моделями просмотра. Думаю, я мог бы использовать BindingContext = null в OnDisappearing страниц, но мне кажется, что OnDisappearing вызывается слишком часто. Я бы предпочел просто обнулить BindingContext всех страниц при выходе из системы, а затем собрать мусор, но, похоже, у меня нет никакого крючка для этого.

Заранее спасибо.

...