#xamarin.forms #collectionview
#xamarin.forms #collectionview
Вопрос:
Я получаю ошибку System.InvalidOperationException: 'Cannot convert "VerticalGrid, 2" into Xamarin.Forms.IItemsLayout'
во время InitalizeComponent() моей страницы содержимого, содержащей CollectionsView .
Код работает правильно на UWP, и ошибка возникает при запуске на Android. Будучи новичком в xamarin.forms, я не совсем уверен, с чего начать поиск.
РЕДАКТИРОВАТЬ: это работает, если я выбираю «VerticalList».
Вот немного моего xaml:
<ContentPage ... >
<StackLayout>
<CollectionView
x:Name="DetailGrid"
ItemsLayout="VerticalGrid, 2" >
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout Padding="20" BackgroundColor="Crimson">
<Image Source= "{Binding Path}" WidthRequest="300"/>
<Label Text="{Binding FileName}" TextColor ="Bisque" LineBreakMode="WordWrap" />
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</StackLayout>
</ContentPage>
И вот некоторый код, лежащий в основе:
namespace varlist
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class CollectionPage : ContentPage
{
public ObservableCollection<NodeData> nodes = new ObservableCollection<NodeData>();
public CollectionPage ()
{
InitializeComponent ();
nodes.Add (new ImageData { FileName = "image_chair_pk.jpg" });
...
DetailGrid.ItemsSource = nodes;
}
}
}
Комментарии:
1. Вы ПОМЕЧАЕТЕ xamarin.forms и CollectionView . Вы могли бы быть более понятными, пометив VERTICALGRID
2. Какой у вас Xamarin. Версия пакета Forms?
3. Xamarin 16.8.000.255 (d16-8 @ d002176) —— Xamarin Designer 16.8.0.507 (remotes / origin / d16-8@e87b24884) —— Шаблоны Xamarin 16.8.112 (86385a3) —— Xamarin. Android SDK 11.1.0.17 (d16-8 / c0e2b8e) ——- Xamarin. Поддержка ссылочных сборок Android и MSBuild.
Ответ №1:
Я получил ту же ошибку с вами, когда я использую Xamarin.forms version 4.5.0.725
.
После того, как я обновил свой Xamarin.forms до последней версии 4.8.0.1687
, все работает хорошо.
Пожалуйста, обновите версию Xamarin.forms, чтобы устранить эту проблему:
Комментарии:
1. Ах, может быть, они это исправили! Я попробую. Спасибо. Интересно: я действительно проверил наличие новых версий некоторое время назад, и VS не сообщил ни о чем устаревшем.
2. Да, я просто тестирую, и последняя версия работает. Не могли бы вы принять ответ, если он работает, чтобы мы могли помочь большему количеству людей с такой же проблемой :).
3. У меня все еще не работает на Android. У меня те же версии, которые вы показываете на скриншоте. У меня есть несколько предупреждений о сборке, в частности, одно, которое меня беспокоит: Описание кода серьезности Предупреждение о состоянии подавления строки файла проекта NU1605 Обнаружено понижение версии пакета: Xamarin. Формы с 4.8.0.1687 по 4.8.0.1560. Обратитесь к пакету непосредственно из проекта, чтобы выбрать другую версию. varlist.uwp -> varlist -> Xamarin. Формы (> = 4.8.0.1687) varlist.uwp -> Xamarin. Формы (>= 4.8.0.1560)
4. Я пытаюсь разобраться в этом. Я подозреваю, что это актуально.
5. Извините, что не понимаю, но что вы подразумеваете под «обновлением?». Я перестроил, и предупреждения не исчезают. Указано ли где-нибудь управление версиями, которое может переопределить общую установку?
Ответ №2:
Я нашел обходной путь. Похоже, это ошибка фреймворка.
Согласно Xamarin.Формирует макет CollectionView синтаксис, который я использовал, должен работать — и он работает для UWP.
Они также показывают альтернативное объявление для указания ItemsLayout:
<CollectionView.ItemsLayout>
<GridItemsLayout Orientation="Vertical" Span="2" />
</CollectionView.ItemsLayout>
И этот синтаксис работает на Android.
Я отправил ошибку на github: [Ошибка] CollectionView с ItemsLayout = VerticalGrid вылетает на Android # 12920
Ответ №3:
Вы можете опустить это свойство, если хотите, чтобы оно было вертикальным, по умолчанию установлено значение VerticalList
. Если вы хотите, чтобы ваш collectionView
был горизонтальным, просто используйте HorizontalList
.
См . https://learn.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/collectionview/layout