从其他类别访问列表

时间:2020-07-07 09:52:51

标签: c# list api xamarin

我需要使用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;
    }

}

我已经尝试了几种方法,但到目前为止都还没有解决。

2 个答案:

答案 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;
}