在Xamarin BindingContext中刷新视图

时间:2017-03-24 23:16:55

标签: xaml xamarin view

我有一个使用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();
        }
    }

谢谢!

1 个答案:

答案 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();
    }
}