MAUI: ответ API не отображается в CollectionView

Я использую RestSharp для получения ответа от API. И работает исправно. Но после того, как я попытался получить этот ответ в модели и связать его с CollectionView с помощью CommunityToolkit.MVVM, он не отображает данные.

XAML-файл

    <CollectionView.ItemTemplate>
        <DataTemplate x:DataType = "models:NewAppliedLeave">
       
        </DataTemplate>
    </CollectionView.ItemTemplate>
            
</CollectionView>

ViewModel.cs

[ObservableProperty]
ObservableCollection<NewAppliedLeave> _LHItems;

public async Task<ObservableCollection<NewAppliedLeave>> GetAppliedLeave()
{
    RestResponse response = await client.PostAsync(request);
    var responseContent = response.Content.ToString();

    Debug.WriteLine(responseContent);

    List<NewAppliedLeave> leaveItem = JsonConvert.DeserializeObject<List<NewAppliedLeave>>(responseContent);

    LHItems = new ObservableCollection<NewAppliedLeave>(leaveItem);
              
    return LHItems;              
}

Я ожидаю отобразить содержимое ответа в CollectionView.

Покажите пожалуйста код где вы заливаете collectionview

puko 10.01.2023 06:48

Установите _LHItems только для MainThread и посмотрите, что произойдет.

Nick Kovalsky 10.01.2023 11:17
Стоит ли изучать 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
2
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Сначала добавьте точку останова при отладке, чтобы проверить, имеет ли LHItems правильное значение.

Затем убедитесь, что вы связали CollectionView.ItemSource с LHItems в xaml или в методе построения страницы.

Наконец, я не видел никаких элементов управления в <DataTemplate>. Вы добавили в него некоторые элементы управления, такие как Label или Image, чтобы отобразить свойства в модели с именем NewAppliedLeave и сделать ее наследуемой от ObservableObject?

А для свойства ObservableCollection<NewAppliedLeave> в модели представления добавлять [ObservableProperty] не нужно.

Вы можете обратиться к этому делу, в котором показаны подробности об использовании CommunityToolkit.mvvm и CollectionView в .net maui.

При использовании [ObservableProperty] инструментарий MVVM сгенерирует для вас код, но объявление должно быть в нижнем регистре без подчеркивания.

ОБНОВЛЕНИЕ: После некоторого тестирования ведущее подчеркивание не вызывает никаких проблем.

[ObservableProperty]
ObservableCollection<NewAppliedLeave> lHItems;

Приведенный выше код автоматически сгенерирует приведенный ниже код:

 public NewAppliedLeave LHItems
    {
        get => lHItems;
        set => SetProperty(ref lHItems, value);
    }

  

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


LHItems = new ObservableCollection<NewAppliedLeave>(leaveItem);
          

Это не совсем так. Вы можете использовать как с подчеркиванием, так и без него. Имя резервного поля просто не может начинаться с заглавной буквы.

ewerspej 10.01.2023 11:43

Если имя свойства начинается с подчеркивания, сгенерированный код будет ошибочным. Если вам нужно начать с подчеркивания, лучше не использовать атрибут [ObservableProperty] и добавлять сгенерированный код по своему усмотрению.

Isidoros Moulas 10.01.2023 12:58

Это неправильно. Вы можете использовать оба обозначения одинаково. Генераторы исходного кода распознают подчеркивание. Если вы создадите резервное поле с именем _age, будет сгенерировано свойство с именем Age. Не верите мне? Посмотрите мой репозиторий примеров MAUI, чтобы увидеть его в действии: github.com/ewerspej/maui-samples.

ewerspej 10.01.2023 13:37

Да, действительно, я полагаю, что образец работает нормально. Хорошая находка.

Isidoros Moulas 10.01.2023 21:46

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