我的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);
}
}