2016-09-22 49 views
0

在我的應用程序中第三個左右的頁面包含一個ListView,但由於某種原因,列表不會顯示直到我切換視圖(將視圖切換到另一個列表ItemSource)或旋轉屏幕。Listview不會馬上出現xamarin表格

如果我做兩次切換(所以回到原來的起始狀態),listview仍然存在。這看起來像一個錯誤,但我一直無法找到任何東西。

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; 
    } 

是否還有別的我應該打電話或做這樣的事情,一旦我設置了ItemSource就會出現ListView?它沒有意義,爲什麼它不會已經。也沒有什麼是失敗的,一切都按預期工作,除此之外

回答

1

構造函數不會設置ItemsSource,至少不會立即。它調用LoadRequestLists,啓動一個異步任務,最終將設置ItemsSource,因此在將來的某個時間點,將設置ItemsSource(每當收到Rest響應並且UI線程正好運行時)。

由於構造函數無法等待異步任務,因此您需要重構代碼,以便Rest客戶端在構造函數之前運行(並完成),因此ReviewRequestsPage將以列表形式作爲參數。然後構造函數可以構建openRequestCells和closedRequestCells並分配給ItemsSource。

+0

好的,我明白你在說什麼了。但爲什麼要切換列表使其顯示?或旋轉屏幕?此外,我將我的列表更改爲「ObservableCollection」,現在它可以工作 – John

相關問題