#xamarin #xamarin.forms #mvvm #cross-platform #nullreferenceexception
#xamarin #xamarin.forms #mvvm #кроссплатформенный #nullreferenceexception
Вопрос:
Я новичок в Xamarin.Формы, и я разрабатываю приложение для кроссплатформенности. В приложении пользователям необходимо войти в Facebook и Twitter, чтобы принять участие в каком-то конкретном событии. Поэтому я установил статическую функцию входа в систему на странице настроек и присоединился к странице событий. Мне нужно проверить, был ли вход в систему успешным, и показывать имя пользователя на странице каждый раз, когда пользователь открывает страницу настроек. поэтому я решил вызвать метод проверки в коде, в методе OnAppearing . Но это вызвало бы NullReferenceException . если бы я просто переместил весь код из метода проверки, на странице настроек ничего не изменилось.
Вот мой код:
public SettingAct()
{
InitializeComponent();
}
protected override void OnAppearing()
{
(BindingContext as SettingViewModel).CekLogin();
}
Метод проверки в моей ViewModel:
internal void CekLogin()
{
Console.WriteLine("LoginCheck");
if (SessionManager.FacebookLogin())
{
FacebookName = SessionManager.FacebookName();
FbImage = "fb_sett_active.png";
Console.WriteLine("Facebook logged in");
}
else
{
FacebookName = "Facebook";
FbImage = "fb_sett.png";
Console.WriteLine("Facebook not logged in");
}
if (SessionManager.TwitterLogin())
{
TwitterName = SessionManager.TwitterName();
TwitImage = "twitter_sett_active.png";
Console.WriteLine("Twitter logged in");
}
else
{
TwitterName = "Twitter";
TwitImage = "twitter_sett.png";
Console.WriteLine("Twitter not logged in");
}
}
Я не понимаю, почему это не сработало, потому что я делаю то же самое на своей главной странице, где я обновляю пользовательские точки каждый раз, когда появляется главная страница.
(BindingContext as MainViewModel).RefreshKuliahLogPoint();
Пожалуйста, дайте мне знать в комментарии о любых деталях, которые вам нужны, и я надеюсь, что вы сможете понять мой вопрос даже с моим плохим английским.
Комментарии:
1. Вы установили код
BindingContext
in или xaml?2. в моем xaml тег ContentPage.BindingContext .
3. Не могли бы вы поделиться образцом с github, чтобы я мог протестировать его на своей стороне
Ответ №1:
Свойство BindingContext будет возвращать значение null, пока вы на самом деле не установите для него значение something .
public SettingAct()
{
InitializeComponent();
BindingContext = new SettingViewModel();
}
protected override void OnAppearing()
{
(BindingContext as SettingViewModel).CekLogin();
}
Комментарии:
1. Я установил BindingContext в моем файле XAML. это нехорошо? Кстати, в вашем коде есть две точки с запятой. Редактировать: после реализации вашего предложения я все равно получил исключение NullReferenceException (ОШИБКА: пойманное исключение в OnAfterSave на 290), но мой код все равно работает. это нормально?