Здравствуйте, у меня возникла проблема с привязкой списка строк к моему карусельному представлению. Сначала у меня есть список объектов, которые я получаю с моего сервера.
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 вызвал исключение.
который я прослеживаю до представления карусели. Когда я комментирую карусель, он работает. поэтому я думаю, что не могу связать ИЛИ использовать карусель так, как я думал?
Я не вижу ссылки на сборку, которая включала бы CarouselView. Может быть, это причина вашего исключения
@ Мышь на Марсе Я использую Xamarin.Forms 3.6.0.344457, и когда я перехожу к панели инструментов (Visual Studio 2017), я вижу там карусельное представление и что я добавил в свой XAML? мне все еще нужно загрузить и элемент управления и добавить его в мою ссылку на сборку?
Раньше CarouselView был плагином, который теперь стал частью Xamarin.Forms, вступившим в силу с версии 4. Вы можете использовать более раннюю версию XF, но вам нужно будет получить этот плагин, добавить ссылки на сборки в свой XAML и поместить код инициализации в свою платформу. конкретные проекты.
Кроме того, вы можете перейти на Xamarin.Forms 4.
Несмотря на то, что вы можете увидеть карусельное представление в Xamarin.Forms 3.6.0.344457, оно определяет только интерфейс. В классе Carousel View нет реализаций и свойств.
Вы можете использовать его только в Xamarin.Forms 4.0. Поскольку это все еще предварительная версия, есть некоторые ограничения. Смотрите мой пост здесь: https://stackoverflow.com/a/56235795/8354952 для получения дополнительной информации.
@Mike Получили ли вы ожидаемый результат в предварительном просмотре Xamarin.Forms 4.0?
извините за долгую задержку, но нет, я решил использовать плагин для моего CarouselView
Возможный дубликат System.TypeInitializationException Xamarin CarouselView