Xamarin Forms Carousel - проблема с привязкой - PullRequest
0 голосов
/ 21 мая 2019

Здравствуйте, у меня проблема с привязкой списка строк к моему представлению карусели. Сначала у меня есть список объектов, которые я получаю с моего сервера

public class PostObject
    {
        public string PostOwner { get; set; }
        public string Id { get; set; }
        public string Post { get; set; }
        public string ProfileImage { get; set; }
        public List<string> PostImages { get; set; }
    }
  List<PostObject> posts = new List<PostObject>();

Это работает, как я и ожидал.

Далее у меня есть созданное мной представление карты, и в представлении карты я хочу иметь представление карусели.

Итак, я настроил свой Xaml следующим образом (пропуская части, которые работают для ясности)

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:controls="clr-namespace:ImageCircle.Forms.Plugin.Abstractions;assembly=ImageCircle.Forms.Plugin"
              NavigationPage.HasNavigationBar="True"
             NavigationPage.HasBackButton="False"
             NavigationPage.BackButtonTitle="Back"
             Title="amici"
             x:Class="amici.Posts">

    <NavigationPage.TitleView>
        <StackLayout Orientation="Horizontal" VerticalOptions="Center" Spacing="10" >
            <Label x:Name="GroupTitle" TextColor="White" FontSize="Medium"/>
        </StackLayout>
    </NavigationPage.TitleView>

    <ContentPage.ToolbarItems>
        <ToolbarItem Name="iconexample" Icon="settings.png" Priority="0" Order="Primary" />
    </ContentPage.ToolbarItems>

    <ContentPage.Content>
        <StackLayout>
            <ListView x:Name="ItemsListView" 
             VerticalOptions="FillAndExpand"
             HasUnevenRows="true"
             IsPullToRefreshEnabled="true"
             IsRefreshing="{Binding IsBusy, Mode=OneWay}"
             CachingStrategy="RecycleElement">
                <!--ItemSelected="OnItemSelected"-->
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell >
                            <StackLayout Padding="10">
                                <Frame x:Name="myframe" HasShadow="True" >

                                    <Grid HorizontalOptions="FillAndExpand"  RowSpacing="0" ColumnSpacing="0"  >
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="20" />
                                            <RowDefinition Height="Auto" />
                                            <RowDefinition Height="Auto" />
                                            <RowDefinition Height="Auto" />
                                            <RowDefinition Height="20" />
                                            <RowDefinition Height="20" />
                                            <RowDefinition Height="Auto" />
                                        </Grid.RowDefinitions>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="Auto" />
                                        </Grid.ColumnDefinitions>
                                        <Label Grid.Row="0"  Text="{Binding PostOwner}" LineBreakMode="WordWrap" Font="Bold,16"  />
                                        <controls:CircleImage Grid.Row="0" Margin="10" BorderColor="white" BorderThickness="1" VerticalOptions="Start" HorizontalOptions="Start" Source="{Binding ProfileImage}" Aspect="AspectFit">
                                            <controls:CircleImage.WidthRequest>
                                                <OnPlatform x:TypeArguments="x:Double">
                                                    <On Platform="Android, iOS">65</On>
                                                </OnPlatform>
                                            </controls:CircleImage.WidthRequest>
                                            <controls:CircleImage.HeightRequest>
                                                <OnPlatform x:TypeArguments="x:Double">
                                                    <On Platform="Android, iOS">65</On>
                                                </OnPlatform>
                                            </controls:CircleImage.HeightRequest>
                                        </controls:CircleImage>

                                        <Label Grid.Row="1"  Text="{Binding Post}" LineBreakMode="WordWrap" Font="Bold,16"  />

                                        <CarouselView x:Name="PostImages" Grid.Row="2" ItemsSource="{Binding PostImages}">
                                            <CarouselView.ItemTemplate>
                                                <DataTemplate>
                                                    <Image Source="{Binding .}" Aspect="AspectFill" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" />
                                                </DataTemplate>
                                            </CarouselView.ItemTemplate>
                                        </CarouselView>

                                        <!--<Image Grid.Row="2"  Source="{Binding ImageURL}" Aspect="AspectFill" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" />-->
                                        <BoxView Grid.Row="3"  BackgroundColor="black" HeightRequest="1"  HorizontalOptions="FillAndExpand"/>
                                        <StackLayout Grid.Row="4" Orientation="Horizontal" >
                                            <Label  Text="Likes: " LineBreakMode="NoWrap" Font="Bold,14" />
                                            <Label  Text="0" LineBreakMode="NoWrap" FontSize="14" />
                                        </StackLayout>
                                        <StackLayout Grid.Row="5" Orientation="Horizontal" >
                                            <Label Text="Comments: " LineBreakMode="NoWrap"  Font="Bold,14"  HorizontalOptions="End" />
                                            <Label Text="0" HorizontalOptions="End"  LineBreakMode="NoWrap" FontSize="14" />
                                        </StackLayout>
                                        <!--<Label Grid.Row="2" Text="{Binding OwnerFullName}" LineBreakMode="NoWrap" FontSize="16" />-->
                                    </Grid>
                                </Frame>
                            </StackLayout>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
         </StackLayout>


    </ContentPage.Content>
</ContentPage>

В моем коде позади у меня есть это

public Posts (GroupInfo ginfo)
        {
            InitializeComponent ();
            GroupTitle.Text = ginfo.Title;
            CurrentGroupInfo = ginfo;
            GetDataPosts();


            ItemsListView.RefreshCommand = new Command(() => {
                GetDataPosts();
                ItemsListView.IsRefreshing = false;

            });
        }

public void GetDataPosts()
        {
            try
            {
                string apikey = Application.Current.Properties["api"].ToString();
                ItemsListView.ItemsSource = null;
                posts.Clear();

                if (RestController.GetMyPostData(ref posts, CurrentGroupInfo.Id.ToString(), apikey))
                {
                    ItemsListView.ItemsSource = posts;
                }
            }
            catch(Exception e)
            {
                Debug.WriteLine(e.Message);
            }

        }

, теперь до этого момента все работает и никаких ошибок, но когда приложение идет, чтобы отобразить страницу, я получаю ошибку

System.TypeInitializationException: инициализатор типа для 'Xamarin.Forms.ItemsView' вызвал исключение.

, которое я прослеживаю до представления карусели.Когда я закомментирую Карусель Посмотреть это работает.так что я думаю, что не могу связать ИЛИ использовать Карусель, как я думал?

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

CarouselView раньше был плагином, который теперь стал частью Xamarin. Формы вступили в силу с версии 4. Вы можете использовать более раннюю версию XF, но вам нужно будет получить этот плагин , добавить ссылки на сборки в ваш XAML и поместите код инициализации в конкретные проекты вашей платформы.

Кроме того, вы можете перейти на Xamarin.Forms 4

0 голосов
/ 22 мая 2019

Несмотря на то, что на Xamarin вы можете увидеть представление «Карусель». В формах 3.6.0.344457 , там определяется только интерфейс. В классе просмотра карусели нет реализаций и свойств.

Вы можете использовать его только под Xamarin.Forms 4.0. Поскольку это все еще предварительная версия, существуют некоторые ограничения. Смотрите мой пост здесь: https://stackoverflow.com/a/56235795/8354952 для получения дополнительной информации.

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