我需要使用REST API访问数据库中的某些数据。此API调用是在另一个名为MobileAppController
的类中进行的。
使用另一个名为MessageService
的类,来自API调用的数据将被放入列表中,并随后返回:“ Items”。
现在,我有了另一个名为UserMessages.xaml.cs
的类,这是用户要查看的页面的后端。
在此页面上,我有一个ListView
,所有数据都将存放在其中。我现在的努力是试图从另一个名为“消息”的列表中的“项目”中获取数据。
为澄清起见,Items在MessageService
类中,Messages在UserMessages.xaml.cs
类中。到目前为止,我尝试过的还没有解决。
MessageService.cs类:
public class MessageService : IMessageService
{
private readonly IRestService _restService;
public List<MessageViewModel> Items { get; set; }
public MessageService(IRestService service)
{
_restService = service;
}
public async Task<List<MessageViewModel>> GetMessages()
{
Items = new List<MessageViewModel>();
Items = JsonConvert.DeserializeObject<List<MessageViewModel>>(await _restService.GetData("GetMessages", "state=0"));
return Items;
}
}
UserMessage.xaml.cs类:
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class UserMessages : ContentPage
{
List<ViewModels.MessageViewModel> Messages { get; set; }
public UserMessages()
{
InitializeComponent();
Messages = new List<Items>();
MessageLV.ItemsSource = Messages;
}
}
我已经尝试了几种方法,但到目前为止都还没有解决。
答案 0 :(得分:0)
您可以将MessageService设置为单例,并在UserMessages类中具有async方法,以通过GetMessages方法初始化Messages属性。
public static MessageService Shared => instance.Value;
private static readonly Lazy<MessageService> instance =
new Lazy<MessageService>(() => new MessageService());
在UserMessages的OnAppearing方法中:
protected override async void OnAppearing()
{
try
{
Messages = await MessageService.Shared.GetMessages();
MessageLV.ItemsSource = Messages;
}
catch(Exception ex)
{
}
}
我还建议对您的MessageService使用依赖项注入。
答案 1 :(得分:0)
页面有一个OnAppearing
方法可供您使用
public async override void OnAppearing()
{
// svc is a instance of MessageService
Messages = await svc.GetMessages();
MessageLV.ItemsSource = Messages;
}