Получение данных из класса обслуживания .NET MAUI

У меня есть класс, который содержит разные характеристики для покемонов

    public ObservableCollection<Pokemon> GetMesPokemons()
        {
            ObservableCollection<Pokemon> lstPokemons =
                new ObservableCollection<Pokemon>();
            lstPokemons.Add(new Pokemon()
            {
                NamePokemon = "Raichu",
                UrlImage = "https://i0.wp.com/pokemon-suisse.ch/wp-content/uploads/2021/06/img_1517.jpg?resize=1536%2C2048&ssl=1",
                Abilities = new List<Ability>()
                {
                    new Ability
                    {
                        Name = "Thunderbolt",
                        NbPower = 120
                    },
                    new Ability
                    {
                        Name = "Spark Ball GX",
                        NbPower = 200
                    }
                },
                PokemonClass = new PokemonType()
                {
                    NameClass = "Electric",
                    UrlImage = "https://th.bing.com/th/id/OIP.T-kNLsS_VhinWEuPIfZdHAHaHk?w=159&h=180&c=7&r=0&o=5&pid=1.7"
                },
                Pv = 210

Я могу получить имя покемона и его изображение и pv, но когда я пытаюсь получить его "Способности", я получаю это сообщение на дисплее: System.Collections.Generic.List'1[MauiApp2.Models.Ability]

Вот как я пытаюсь вернуть его

      <CollectionView
            x:Name = "PokemonsAbilities"
            ItemsSource = "{Binding AbilitiesSource}"
            ItemTemplate = "{StaticResource AbilitiesTemplate}">
        </CollectionView>

        <!--Récupération de l'image d'un pokemonRandom-->
        <Image Source = "{Binding SelectedPokemon.UrlImage}" WidthRequest = "150" HeightRequest = "150"/>

        <!--Récupération du nom d'un pokemonrandom-->
        <Label 
            Text = "{Binding SelectedPokemon.NamePokemon}"
            VerticalOptions = "Center" 
            HorizontalOptions = "Center" />

        <Label 
            Text = "{Binding SelectedPokemon.Pv}"
            VerticalOptions = "Center" 
            HorizontalOptions = "Center" />

        <Label 
            Text = "{Binding SelectedPokemon.Abilities}"
            VerticalOptions = "Center" 
            HorizontalOptions = "Center" />

Это моя модель покемона

public class Pokemon
    {

        private string  _namePokemon;

        public string NamePokemon
        {
            get { return _namePokemon; }
            set { _namePokemon = value; }
        }

        private string _urlImage;


        public string UrlImage
        {
            get { return _urlImage; }
            set { _urlImage = value; }
        }

        private int _pv;

        public int Pv
        {
            get { return _pv; }
            set { _pv = value; }
        }

        public List<Ability> Abilities { get; set; }

Это моя модель способностей

   public class Ability
    {

        private string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        private int _nbPower;

        public int NbPower
        {
            get { return _nbPower; }
            set { _nbPower = value; }
        }

Мой шаблон


            <DataTemplate x:Key = "LstPokemons">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width = "0.5*"></ColumnDefinition>
                        <ColumnDefinition Width = "0.5*"></ColumnDefinition>
                        <ColumnDefinition Width = "0.5*"></ColumnDefinition>
                        <ColumnDefinition Width = "0.5*"></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <!--<Button Text = "Profil"></Button>-->
                    <Image Source = "{Binding UrlImage}" Grid.Column = "2" WidthRequest = "150" HeightRequest = "150"></Image>
                    <Label Text = "{Binding NamePokemon}" Grid.Column = "0"></Label>
                </Grid>
            </DataTemplate>

            <DataTemplate x:Key = "Abilities">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width = "0.5*"></ColumnDefinition>
                        <ColumnDefinition Width = "0.5*"></ColumnDefinition>
                        <ColumnDefinition Width = "0.5*"></ColumnDefinition>
                        <ColumnDefinition Width = "0.5*"></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Label Text = "{Binding Name}" />
                    <Label Text = "{Binding NbPower}" />
                </Grid>
            </DataTemplate>

Моя страница «PokemonView», представляющая мои две коллекции View на основе двух моих DataTemplates, одна для получения списка покемонов, а другая для получения способностей покемонов

 <ContentPage.BindingContext>
        <vm:PokemonViewModel></vm:PokemonViewModel>
    </ContentPage.BindingContext>
    <VerticalStackLayout>
        <Label 
            Text = "{Binding Pseudo}"
            VerticalOptions = "Center" 
            HorizontalOptions = "Center" />

        <Label Text = "Voici les pokemons disponible pour un match"></Label>

        <!--Collectionview : qui contient mon template pour afficher une grid qui va contenir des pokémons 
        On peut en sélectionner un à la fois-->
        <CollectionView
            x:Name = "Pokemons"
            ItemTemplate = "{StaticResource LstPokemons}"
            ItemsSource = "{Binding ListPokemons}"
            SelectionMode = "Single"
            SelectedItem = "{Binding MonSelectedPokemon}">
        </CollectionView>

        <CollectionView
            x:Name = "PokemonsAbilities"
            ItemTemplate = "{StaticResource AbilitiesTemplate}"
            ItemsSource = "{Binding AbilitiesSource}">
        </CollectionView>

        <!--Boutton pour passer a la page suivante une fois qu'il a séléctionné un pokémon-->
            <Button x:Name = "btnValidate" Text = "Valider" Command = "{Binding ValidateSelected}"></Button>

    </VerticalStackLayout>
</ContentPage>

@ Джейсон Извините, я только что надел его

Eloi Jahan 04.02.2023 16:30

Если вы имеете в виду конечную метку, вы не можете привязать список объектов к одной метке. Вам нужно либо использовать шаблонный элемент управления, либо добавить свойство к вашей виртуальной машине, которое будет возвращать одно строковое значение для коллекции.

Jason 04.02.2023 20:38

У вас есть две или три разные вещи с именами Abilities. Может быть, будет легче увидеть, что не так, если вы дадите им всем разные имена. Например. DataTemplate может быть AbilitiesTemplate, источник, привязанный к ItemsSource, может быть AbilitiesSource. Или, если это список покемонов, PokemonList. Из показанного вами источника я не вижу, как используется lstPokemons. Также сбивает с толку CollectionView x:Name = "Pokemons", у которого есть ItemsSource Abilities. Что он? Это просмотр покемонов или просмотр способностей одного покемона? Не может быть и тем, и другим одновременно.

ToolmakerSteve 05.02.2023 05:14

@Jason Да, я использую модель для своих способностей и другую модель для моего списка покемонов со списком способностей, чтобы иметь возможность получить окончательную информацию из моего списка покемонов. Какое свойство мне нужно добавить и где?

Eloi Jahan 05.02.2023 12:47

@JessieZhang-MSFT Да, я использую два dataTemplates: lstPokemons, которые представляют мой список покемонов, и Abilities, которые представляют способности покемонов, полученные из dataTemplates lstPokemons. Лучше поместить все в один dataTemplate или можно оставить 2? Я только что добавил свой код, представляющий страницу PokemonView с двумя моими коллекциями.

Eloi Jahan 05.02.2023 12:54
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно свойство в вашей модели, которое преобразует ваш список объектов Ability в строку, которую вы можете отобразить в метке.

public string AbilitiesDesc
{
  get 
  {
    return string.Join(",", Abilities.Select(a => a.Name));
  }
}

Затем привяжите это новое свойство к метке

<Label 
        Text = "{Binding SelectedPokemon.AbilitiesDesc}"
        VerticalOptions = "Center" 
        HorizontalOptions = "Center" />

Для чего нужен «Выбор» и как его реализовать?

Eloi Jahan 05.02.2023 13:07

Это запрос LINQ. Добавьте «используя System.Linq;» в твой класс

Jason 05.02.2023 13:13

Странно, я не могу реализовать это с помощью System.Linq, я могу просто сгенерировать метод

Eloi Jahan 05.02.2023 14:44

Код, который вы мне прислали, находится в скрытом коде или в представлении модели?

Eloi Jahan 05.02.2023 14:49

Это свойство вашей модели

Jason 05.02.2023 15:18

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

Jason 05.02.2023 16:41

Другие вопросы по теме