Я использую 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
.
Установите _LHItems только для MainThread и посмотрите, что произойдет.
Сначала добавьте точку останова при отладке, чтобы проверить, имеет ли 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);
Это не совсем так. Вы можете использовать как с подчеркиванием, так и без него. Имя резервного поля просто не может начинаться с заглавной буквы.
Если имя свойства начинается с подчеркивания, сгенерированный код будет ошибочным. Если вам нужно начать с подчеркивания, лучше не использовать атрибут [ObservableProperty] и добавлять сгенерированный код по своему усмотрению.
Это неправильно. Вы можете использовать оба обозначения одинаково. Генераторы исходного кода распознают подчеркивание. Если вы создадите резервное поле с именем _age
, будет сгенерировано свойство с именем Age
. Не верите мне? Посмотрите мой репозиторий примеров MAUI, чтобы увидеть его в действии: github.com/ewerspej/maui-samples.
Да, действительно, я полагаю, что образец работает нормально. Хорошая находка.
Покажите пожалуйста код где вы заливаете collectionview