2016-09-22 21 views
0

私のアプリの3番目のページにはListViewが含まれていますが、ビューを切り替える(表示をItemSourceを別のリストに切り替える)まで、または何らかの理由でリストが表示されないスクリーン。リストビューがすぐに表示されないxamarinフォーム

トグルを2回実行すると(元の開始状態に戻るため)、リストビューはまだ存在します。それはバグのようですが、私はそれで何かを見つけることができませんでした。

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を設定すると、リストビューが表示されるように他のものが呼び出されたり、実行されたりしていますか?なぜそれがまだではないのかは分かりません。また、何も失敗していて、すべてが期待どおりに動作しています。

答えて

1

コンストラクタは少なくともすぐにはItemsSourceを設定しません。これは、最終的にItemsSourceを設定する非同期タスクを開始するLoadRequestListsを呼び出すので、将来のある時点でItemsSourceが設定されます(Restレスポンスが受信され、UIスレッドが実行されるたびにItemsSourceが設定されます)。

コンストラクタは非同期タスクを待つことができないので、コンストラクタの前にRestクライアントが実行され、完了するようにコードをリファクタリングする必要があるため、ReviewRequestsPageはパラメータとしてListを受け取ります。次に、コンストラクタはopenRequestCellsとclosedRequestCellsを構築してItemsSourceに割り当てることができます。

+0

私はあなたの言いたいことを見ています。しかし、なぜこのリストをトグルして表示するのでしょうか?または画面を回転させますか?また、私はリストを 'ObservableCollection'に変更しました。 – John

関連する問題