注销后再次登录时,MvxObservableCollection不会初始化

时间:2017-07-15 22:08:19

标签: android xamarin xamarin.android async-await mvvmcross

我的HomeViewModel中的MvxObservableCollection存在问题。当我在我的应用程序中登录Demo用户HomeViewModel方法初始化时调用我的InitializeShops方法填充我的MvxObservableCollection商店列表(对于Demo用户,我有3个商店)。但问题是当我退出时(在菜单Logout按钮中)。注销后我再次登录,但现在为测试用户(对于测试用户,我有5个商店)。但是HomeViewModel调用Initialize并且它调用了我的InitializeShops但是我这里仍然有来自Demo用户的3个商店而不是测试用户的商店。只有当我使用Swipe刷新它时,调用相同的方法InitializeShops,我得到5个商店。我尝试在Appeared方法中调用方法InitializeShops,它可以工作,但这里很糟糕。一些提示如何解决这个问题?

我的测试项目位于github(HERE

我在LoginViewModel中的登录方法:

private async Task ExecuteLoginAsync(bool force)
        {
            UserDialogs.Instance.ShowLoading("SigningIn", MaskType.Black);

            bool isOk = false;
            bool isValidate = true;

            //if (string.IsNullOrEmpty(LoginName) || string.IsNullOrEmpty(Password))
            //{
            //    _infoMessageReporter.ShowInfoMessage("LoginAndPasswordRequired");
            //    isValidate = false;
            //}

            if (_rememberLogin && !force)
            {
                Settings.RememberLogin = _rememberLogin;
                Settings.UserLogin = _loginName;
                Settings.UserPassword = _password;
                Settings.RememberApiService = _selectedApiService;
            }

            if (!_rememberLogin && !force)
            {
                Settings.RememberLogin = false;
                Settings.UserLogin = string.Empty;
                Settings.UserPassword = string.Empty;
                Settings.RememberApiService = string.Empty;
            }

            if (isValidate)
            {
                if (_selectedApiService == ApiServiceTypes.Demo.ToString())
                {
                    if (LoginName == Constants.DemoUserLogin && Password == Constants.DemoUserPassword)
                    {
                        await Task.Delay(1000);

                        _session.LoginName = _loginName;
                        _session.Password = _password;
                        _session.ApiService = ApiServiceTypes.Demo;
                        _session.Id = new Guid();
                        isOk = true;
                    }
                    else
                    {
                        isOk = false;
                    }
                }
                else
                {
                    _session.LoginName = _loginName;
                    _session.Password = _password;
                    _session.ApiService = ApiServiceTypes.Test;
                    _session.Id = new Guid();
                    isOk = true;
                }
            }

            if (isOk)
            {
                UserDialogs.Instance.HideLoading();
                await Task.Delay(500);
                await Mvx.Resolve<IMvxNavigationService>().Navigate<HomeViewModel>();
            }
            else
            {
                UserDialogs.Instance.HideLoading();
            }
        }

我的HomeViewModel:

public HomeViewModel()
    {
        _session = Mvx.Resolve<ISessionInfo>();
    }

    //public void Init()
    //{
    //    Task.Run(InitializeTest);
    //}

    public override async Task Initialize()
    {
        await InitializeShops();
    }

    private async Task InitializeShops()
    {
        await Task.Delay(500);
        UserDialogs.Instance.ShowLoading("Loading...", MaskType.Black);

        if (_session.ApiService == ApiServiceTypes.Demo)
        {
            await Task.Delay(1000);
            //var demo = new DemoDataEngine();
            //var shops = demo.GetShops();
            var shops = new List<Shop>
            {
                new Shop() {Id = 1, Name = "Shop - 1", Text = "Shop Text 1"},
                new Shop() {Id = 2, Name = "Shop - 2", Text = "Shop Text 2"},
                new Shop() {Id = 3, Name = "Shop - 3", Text = "Shop Text 3"}
            };

            var tempList = new MvxObservableCollection<Shop>();
            foreach (var item in shops)
            {
                tempList.Add(item);
            }
            Shops.ReplaceWith(tempList);
        }
        else
        {
            //var shopService = new ShopService();
            //var shops = await shopService.GetShops();

            var shops = new List<Shop>
            {
                new Shop() {Id = 1, Name = "Shop - 1", Text = "Shop Text 1"},
                new Shop() {Id = 2, Name = "Shop - 2", Text = "Shop Text 2"},
                new Shop() {Id = 3, Name = "Shop - 3", Text = "Shop Text 3"},
                new Shop() {Id = 4, Name = "Shop - 4", Text = "Shop Text 4"},
                new Shop() {Id = 5, Name = "Shop - 5", Text = "Shop Text 5"}
            };

            var tempList = new MvxObservableCollection<Shop>();
            foreach (var item in shops)
            {
                tempList.Add(item);
            }
            Shops.ReplaceWith(tempList);
        }

        // Set First Shop Detail Visibility true
        //if (Shops.Any())
        //{
        //    var first = Shops.FirstOrDefault();
        //    if (first != null)
        //    {
        //        first.IsDetailVisible = true;
        //    }
        //}

        //LastUpdate = DateTime.Now;
        //InitializeTotalSales();

        UserDialogs.Instance.HideLoading();
    }

    private MvxObservableCollection<Shop> _shops = new MvxObservableCollection<Shop>();
    public MvxObservableCollection<Shop> Shops
    {
        get { return _shops; }
        set
        {
            _shops = value;
            RaisePropertyChanged(() => Shops);
        }
    }

0 个答案:

没有答案
相关问题