列表视图不会立即出现在xamarin表单中

本文关键字:xamarin 表单 视图 列表 | 更新日期: 2023-09-27 18:08:24

我的应用程序中的第三个左右页面包含一个ListView,但由于某种原因,该列表不显示,直到我切换视图(将视图ItemSource切换到另一个列表)或旋转屏幕。

如果我做切换两次(所以回到原来的开始状态),listview仍然在那里。看起来像个bug,但我没能在上面找到任何东西。

public partial class ReviewRequestsPage : ContentPage
{
    private readonly List<RequestCell> closedRequestCells = new List<RequestCell>();
    private readonly List<RequestCell> openRequestCells = new List<RequestCell>();
    public ReviewRequestsPage()
    {
        InitializeComponent();
        NavigationPage.SetHasNavigationBar(this, false);
        BindingContext = new SvgImagesViewModels();
        new Footer().SetGestureRecognizers(null, Notifications, Help, Home, this);
        LoadRequestLists();
        ToggleSwitch.PropertyChanged += (o, ea) => { HandleToggle(((Switch) o).IsToggled); };
    }
    ....
    private void LoadRequestLists()
    {
        UserDialogs.Instance.ShowLoading("Loading Requests...", MaskType.Black);
        var client = new RestService().Client;
        var request =
            new RequestService().GetAllRequests();
        client.ExecuteAsync(request, response =>
        {
            var myList = JsonConvert.DeserializeObject<List<Request>>(response.Content, new DateTimeConverter());
            myList.ForEach(r =>
            {
                if (r.status.type == StatusType.CLOSED) closedRequestCells.Add(new RequestCell(r));
                else if (r.status.type != StatusType.DELETED) openRequestCells.Add(new RequestCell(r));
            });
            UserDialogs.Instance.HideLoading();
            RequestsList.ItemSource = openRequestCells; 
        });
    }
    private void HandleToggle(bool isToggled)
    {
        Switchlabel.Text = isToggled ? Constants.Closed : Constants.Open;
        RequestsList.ItemsSource = isToggled ? closedRequestCells : openRequestCells;
    }

是否有别的东西我应该调用或做,以便listview出现一旦我设置ItemSource?但为什么还没到,这说不通。也没有什么是失败的,一切都如预期的那样工作,除了

列表视图不会立即出现在xamarin表单中

构造函数没有设置ItemsSource,至少没有立即设置。它调用LoadRequestLists,启动一个async Task,该Task将最终设置ItemsSource,因此在将来的某个时候,ItemsSource将被设置(无论何时收到Rest响应并且UI线程碰巧运行)。

由于构造函数不能等待异步任务,您将需要重构您的代码,以便Rest客户端在构造函数之前运行(并完成),因此reviewrequestpage将接受List作为参数。然后构造函数可以构建openRequestCells和closedRequestCells,并分配给ItemsSource。