Можно ли показать EmptyView после загрузчика (ActivityIndicator) в CarouselView с использованием форм Xamarin? - PullRequest
0 голосов
/ 12 февраля 2020

Я много пытался показать EmptyView после Loader, но не добился успеха, возможно, я пропустил некоторую конфигурацию кода для EmptyView и Loader.

Я использую загрузчик ActivityIndicator для представления загрузки, если он будет скрыть, как только данные будут получены 1013 *

Ниже на картинке представлен весь мой код скриншота

вот полное изображение кода

Если у кого-нибудь есть идея, поделитесь, пожалуйста, вашим отличным кодом и ценные знания.

1 Ответ

0 голосов
/ 13 февраля 2020

Согласно вашему описанию и коду, я думаю, что вы хотите отобразить EmptyView и ActivityIndicator CarouselView, когда данные не найдены, я прав?

Из Xamarin.Forms CarouselView EmptyView , мы может видеть, что EmptyView типа object, строка, привязка или представление будут отображаться, когда свойство ItemsSource имеет значение null или когда коллекция, указанная свойством ItemsSource, равна нулю или пуста. Значение по умолчанию равно нулю.

Я делаю один пример, который вы можете посмотреть:

<StackLayout>
    <!--  Place new controls here  -->
    <CarouselView ItemsSource="{Binding models}">
        <CarouselView.EmptyView>
            <Frame Margin="20,150" BackgroundColor="Transparent">
                <Frame
                    BackgroundColor="White"
                    CornerRadius="20"
                    HeightRequest="150"
                    HorizontalOptions="Center"
                    VerticalOptions="Center"
                    WidthRequest="300">
                    <Label
                        FontSize="Medium"
                        HorizontalOptions="Center"
                        Text="Data not Found"
                        VerticalOptions="Center" />
                </Frame>
            </Frame>
        </CarouselView.EmptyView>
        <CarouselView.ItemTemplate>
            <DataTemplate>
                <StackLayout>
                    <Frame
                        Margin="8"
                        BorderColor="Gray"
                        CornerRadius="20"
                        HasShadow="True"
                        HeightRequest="250"
                        VerticalOptions="CenterAndExpand"
                        WidthRequest="300">
                        <StackLayout>
                            <Image Source="{Binding ImagePath}" />
                            <Label
                                FontAttributes="Bold"
                                FontSize="24"
                                HorizontalTextAlignment="Center"
                                Text="{Binding Title}" />
                        </StackLayout>
                    </Frame>
                </StackLayout>
            </DataTemplate>
        </CarouselView.ItemTemplate>
    </CarouselView>

    <StackLayout
        Padding="12"
        AbsoluteLayout.LayoutBounds="0.5,0.5,-1,-1"
        AbsoluteLayout.LayoutFlags="PositionProportional"
        IsVisible="{Binding IsBusy}">
        <ActivityIndicator
            x:Name="PaymentLoader"
            IsRunning="{Binding IsBusy}"
            Color="#BFA464" />
        <Label
            HorizontalOptions="Center"
            Text="Data is Loading..."
            TextColor="#BFA464" />
    </StackLayout>
</StackLayout>

public partial class MainPage : ContentPage, INotifyPropertyChanged
{
    public ObservableCollection<BirdsModel> models { get; set; }
    private Boolean _IsBusy;
    public Boolean IsBusy
    {
        get { return _IsBusy; }
        set
        {
            _IsBusy = value;
            RaisePropertyChanged("IsBusy");
        }
    }
    public MainPage()
    {
        InitializeComponent();
        IsBusy = true;
        models = new ObservableCollection<BirdsModel>();        
        this.BindingContext = this;          
    }


    public event PropertyChangedEventHandler PropertyChanged;        
    public void RaisePropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    protected override async void OnAppearing()
    {
        base.OnAppearing();

        await Task.Delay(2000);

        models.Add(new BirdsModel() { Title = "title 1", ImagePath = "a5.jpg" });
        models.Add(new BirdsModel() { Title = "title 2", ImagePath = "a6.jpg" });
        models.Add(new BirdsModel() { Title = "title 3", ImagePath = "a7.jpg" });
        models.Add(new BirdsModel() { Title = "title 4", ImagePath = "a8.jpg" });

        IsBusy = false;

    }
}

public class BirdsModel
{
    public string Title { get; set; }
    public ImageSource ImagePath { get; set; }
}

enter image description here

Это Пример на github, вы можете посмотреть:

https://github.com/CherryBu/CarouselViewSample

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...