[英]CollectionView not loading Xamarin.Forms on load
需要有關 CollectionView 在加載時不從 API 加載數據的幫助。 在數據顯示之前,我需要先下拉刷新。 我正在做MVVM。
下面是我的 XAML:
<RefreshView x:DataType="local:MainPageViewModel" Command="{Binding LoadReleaseDocuments}"
IsRefreshing="{Binding IsRefreshing ,Mode=OneWay}"
RefreshColor="#FFFF7F50">
<CollectionView x:Name="SuccessList"
ItemsSource="{Binding ReleasedDocuments}"
SelectionMode="Single" >
...
</CollectionView>
</RefreshView>
這是我背后的代碼:
public ObservableCollection<Release> ReleasedDocuments { get; }
public MainPageViewModel()
{
// collection
ReleasedDocuments = new ObservableCollection<Release>();
DeliveredDocuments = new ObservableCollection<Deliver>();
CallNow = new Command<Deliver>(Call_Now);
//Load
LoadDocuments = new Command(ExecuteLoadItemsCommand);
LoadReleaseDocuments = new Command(ExecuteCommand);
}
下面的代碼是我通過 API 調用獲取數據的地方
void ExecuteCommand()
{
bool forceRefresh = true;
if (IsRefreshing)
return;
IsRefreshing = true;
Device.BeginInvokeOnMainThread(async () =>
{
try
{
ReleasedDocuments.Clear();
switch (Application.Current.Properties["Position"])
{
case string a when a.Contains("Courier"):
var items = await DataStore.GetItemsAsync(forceRefresh, Application.Current.Properties["Position"].ToString(), "tmdm");
items = items.Where(ab => ab.TMNo != null).Where(ac => ac.TMNo.Contains("DM"));
var sortedItems = items.OrderByDescending(c => c.OrderDate);
CourierDMData(sortedItems);
break;
}
}
catch (Exception ex)
{
IsBusy = false;
IsRefreshing = false;
...
}
finally
{
IsBusy = false;
IsRefreshing = false;
}
});
IsRefreshing = false;
}
並將其插入 ObservableCollection
void CourierDMData(IOrderedEnumerable<Summary> sortedItems)
{
ReleasedDocuments.Clear();
foreach (var itemx in sortedItems)
{
if (itemx.statusId == 0)
{
ReleasedDocuments.Add(new Release()
{
Id = itemx.Id,
....
});
}
}
CountRelease = ReleasedDocuments.Count;
}
調試時,我可以得到CountRelease = ReleasedDocuments.Count; value (count) 它正確顯示了該值,但 CollectionView 在我刷新之前沒有顯示任何內容。
我通常在做一個工作並使用PageAppearingEvent調用刷新,並使用Xamarin 社區工具包 EventToCommandBehavior調用一個函數,該函數調用刷新函數,如有必要,會稍有延遲。 這樣我就不必每次打開頁面時都手動刷新。
XAML 示例:
<ContentPage.Behaviors>
<xct:EventToCommandBehavior
EventName="Appearing"
Command="{Binding AppearingCommand}"/>
</ContentPage.Behaviors>
MVVM 示例:
public MyViewModel() //constructor
{
AppearingCommand = new Command(OnAppearing);
}
public ICommand AppearingCommand { get; }
private void OnAppearing()
{
await System.Threading.Tasks.Task.Delay(int delay); //only if necessary because of initialization
Refresh(); //Or else set your public properties
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.