簡體   English   中英

CollectionView 在加載時未加載 Xamarin.Forms

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM