我有一个使用PCL for Xamarin的简单应用程序,在我的视图中名为lvl1.xaml.cs我有一个方法从db中调用一个新问题
public lvl1()
{
ques = App.Database.GetQuest();
user = App.database.GetUser();
BindingContext = ques;
correctAns = ques.correctAns;
InitializeComponent();
}
问题是,我有一个DisplayAlert来说明答案是否正确,但我想在用户点击继续时加载一个新问题,所以我有这个功能(也在lvl1.xaml.cs里面) ),当我debbug时,我看到它转到构造函数,获取新问题,但视图仍然显示旧问题,如何刷新/正确绑定
async void GameContinue(bool continues)
{
if (continues)
{
var lvl = new lvl1();
}
else
{
await Navigation.PopToRootAsync();
}
}
谢谢!
答案 0 :(得分:2)
当您致电var lvl = new lvl1()
时,它会在应用程序的后台创建新页面,但您实际上并未实际导航到该页面。这就是为什么你没有看到一个新问题。您需要调用Navigation.PushAsnyc(lvl);
才能实际显示您创建的新页面。
您可能还想创建一个单独的方法来获取新问题,这样您就不必每次都创建新页面。
asnyc void getNewQuestion()
{
//Get question from db and set the binding context
ques = App.Database.GetQuest();
user = App.database.GetUser();
BindingContext = ques;
correctAns = ques.correctAns;
}
然后在你的构造函数中:
public lvl1()
{
getNewQuestion();
InitializeComponent();
}
并在DisplayAlert
之后:
async void GameContinue(bool continues)
{
if (continues)
{
getNewQuestion();
}
else
{
await Navigation.PopToRootAsync();
}
}