Система xamarin.InvalidOperationException: ‘Не удается преобразовать «VerticalGrid, 2» в Xamarin.Формы.IItemsLayout’

#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