列表视图不会立即出现在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?但为什么还没到,这说不通。也没有什么是失败的,一切都如预期的那样工作,除了
构造函数没有设置ItemsSource,至少没有立即设置。它调用LoadRequestLists,启动一个async Task,该Task将最终设置ItemsSource,因此在将来的某个时候,ItemsSource将被设置(无论何时收到Rest响应并且UI线程碰巧运行)。
由于构造函数不能等待异步任务,您将需要重构您的代码,以便Rest客户端在构造函数之前运行(并完成),因此reviewrequestpage将接受List作为参数。然后构造函数可以构建openRequestCells和closedRequestCells,并分配给ItemsSource。