我正在做一个预订应用程序,当用户刷新ListView时,它应该连接到远程数据库以获取所有预订并更新ListView。
我的onAppearing
方法中有代码
我尝试将以下代码添加到刷新绑定中,但是没有运气:
ItemsPage ip = new ItemsPage();
ArrayList reservations = new ArrayList();
reservations = await ip.CheckReservations(ItemsPage.currentDate);
ItemsPage.reservations = reservations;
OnAppearing()
无效中用于连接到数据库的代码
protected async override void OnAppearing()
{
base.OnAppearing();
reservations = new ArrayList();
reservations = await CheckReservations(currentDate);
}
刷新绑定:
public class ItemsViewModel : BaseViewModel
{
public ObservableCollection<Termin> Items { get; set; }
public Command LoadItemsCommand { get; set; }
public ItemsViewModel()
{
Title = "Rezervácie";
Items = new ObservableCollection<Termin>();
LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommand());
}
async Task ExecuteLoadItemsCommand()
{
if (IsBusy)
return;
IsBusy = true;
try
{
var items = await DataStore.GetItemsAsync(true);
foreach (var item in items)
{
Items.Add(item);
}
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
finally
{
IsBusy = false;
}
}
}}
GetItemsAsync:
public async Task<IEnumerable<Termin>> GetItemsAsync(bool forceRefresh = false)
{
return await Task.FromResult(items);
}
ItemsPage是我的视图。
刷新方法在我的viewModel中调用。 导航到另一个页面并刷新工作。
预订后,我致电:
ItemsListView.BeginRefresh();
这确实有效,但是从refresh命令引用该行会使LV不填充。
XAML代码:
<ListView x:Name="ItemsListView"
ItemsSource="{Binding Items}"
VerticalOptions="FillAndExpand"
HasUnevenRows="true"
BackgroundColor="DarkGreen"
SeparatorColor="Black"
RefreshCommand="{Binding LoadItemsCommand}"
IsPullToRefreshEnabled="true"
IsRefreshing="{Binding IsBusy, Mode=OneWay}"
CachingStrategy="RecycleElement"
ItemSelected="OnItemSelected">
答案 0 :(得分:1)
您在ViewModel中的对象列表应该是ObservableCollection,以便该列表检测列表中的更改并相应地更新UI。
在您的模型中:
public ObservableCollection<YourModel> ListViewItems { get; set; }
在XAML中
<ListView ItemsSource="{Binding ListViewItems}" />