2016-09-10 79 views
0

我有Xamarin.Forms应用程序。目前我正在Android上测试我的应用程序,现在我遇到了未显示下一个视图(页面)的问题。我开始调试它,当我导航到我的页面,然后实例构造函数正在调用它自己,并且在此构造函数的主体中时,我停止了其中我有另一个具有静态字段和静态方法的类的另一个初始化。当这个静态构造函数正在初始化我的字段,然后它跳过实例构造函数,并且因为它,我认为它没有完成初始化所有的事情,而是在没有实际导航的情况下完成操作。 这里是一切的起点:静态构造函数以某种方式阻止实例构造函数

private void OnCreateNewUserButtonTapped() 
    { 
     _navigationService.NavigateAsync($"{nameof(NavigationBarPage)}/{nameof(LoginingPage)}"); 
    } 

然后在这里:

public LoginingPageViewModel(INavigationService navigationService, IKeyboardHelper keyboardHelper, ISecuredDataProvider securedDataProvider) 
    { 
     _navigationService = navigationService; 
     _keyboardHelper = keyboardHelper; 
     _checkBox = new ShowPasswordCheckBoxModel(); 
     _entries = new LogInPageEntriesModel(); 

     _accountManager = new AccountManager(new ClientAuthorization(), securedDataProvider); 

     Func<bool> isLogInCommandEnable =() => 
      StringService.CheckForNullOrEmpty(_entries.LoginText, _entries.PasswordText); 

     CheckedCommand = new DelegateCommand(OnCheckBoxTapped); 
     LogInCommand = new DelegateCommand(OnLogInTapped, isLogInCommandEnable); 
     //_keyboardHelper.ShowKeyboard(); 
    } 

这里是的AccountManager类的地方工作不正确:

private readonly ClientAuthorization _clientAuthorization; 
    private readonly ISecuredDataProvider _securedDataProvider; 
    private static string _lastUser = GetLastUserFromStorage(); 
    private readonly List<string> _users; 

    public AccountManager(ClientAuthorization clientAuthorization, ISecuredDataProvider securedDataProvider) 
    { 
     _clientAuthorization = clientAuthorization; 
     _securedDataProvider = securedDataProvider; 
     _users = _securedDataProvider.RetreiveAll(ConstantsService.ProviderName).Select(acc => acc.Username) as List<string>; 
    } 
... 
public static string GetLastUserFromStorage() 
    { 

     if (Application.Current.Properties.ContainsKey("_lastUser")) 
      return Application.Current.Properties[_lastUser] as string; 

     return string.Empty; 
    } 

如果推出它没有初始化 “_lastUser”那么它的工作完美。

回答

0

您想在将值拉出时将_lastUser放在引号中。

if (Application.Current.Properties.ContainsKey("_lastUser")) 
    return Application.Current.Properties["_lastUser"] as string; 

如果没有,你会得到一个堆栈溢出我说。

+0

它的工作原理!谢谢。 –