【问题标题】:Xamarin Forms: how not reload ListView when pop backXamarin Forms:弹出时如何不重新加载 ListView
【发布时间】:2017-03-08 17:15:34
【问题描述】:

在 Xamarin Forms 中,我有一个 ListView 和 Code Behind 中的以下方法:

    protected async override void OnAppearing()
    {
        base.OnAppearing();

        events.ItemsSource = await App.ServiceManager.GetStream();
    }

在哪里

events

是我的 ListView 并从 rest webservice 获取数据。

当我在 ListView 中选择一个项目时,我会推送一个详细信息页面。问题是当我弹回 ListView 时,会调用 OnAppearing() 方法并再次进行远程调用。

相反,我希望滚动从上一个位置开始(在此之前我推送一个新页面):怎么做?

【问题讨论】:

  • 将逻辑移动到 ViewModel 并创建它的单个实例 - 例如。

标签: xamarin xamarin.forms


【解决方案1】:

我认为你可以简单地使用一个

bool isFirstAppearing = true;

protected async override void OnAppearing()
{
    base.OnAppearing();

    if(isFirstAppearing) {
         isFirstAppearing = false;
         events.ItemsSource = await App.ServiceManager.GetStream();
    }
}

【讨论】:

  • 如果您有返回该页面的命令,这将不起作用。 @亚历山德罗·卡利亚罗
【解决方案2】:

您可以检查它是否已经加载,正如 alessandro Caliaros 的回答所建议的那样,或者如果您想获取新数据但仍滚动到同一位置,您可以在 onappearing 中添加代码以设置滚动位置与之前相同:

var currentYPosition = _scrollView.ScrollY;
await _scrollView.ScrollToAsync(_scrollView.ScrollX, currentYPosition, true);

【讨论】:

    猜你喜欢
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2018-08-31
    • 1970-01-01
    • 2018-10-16
    相关资源
    最近更新 更多