簡體   English   中英

從不同的 class 訪問列表

[英]Accessing list from a different class

我需要使用 REST API 從數據庫中訪問一些數據。 此 API 調用是在名為MobileAppController的不同 class 中進行的。

使用另一個名為MessageService的 class 將來自 API 調用的數據放入列表中,隨后返回為:“項目”。
現在我有另一個名為UserMessages.xaml.cs的 class ,這是用戶將要看到的頁面的后端。

在此頁面上,我有一個ListView ,所有數據都將在其中。 我現在的斗爭是試圖從我的另一個列表中的“項目”中獲取數據,該列表稱為“消息”。

為澄清起見,Items 位於MessageService class 中,Messages 位於UserMessages.xaml.cs class 中。 到目前為止,我所嘗試的還沒有奏效。

MessageService.cs class:

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 class:

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class UserMessages : ContentPage
{
    List<ViewModels.MessageViewModel> Messages { get; set; }
    public UserMessages()
    {
        InitializeComponent();
        Messages = new List<Items>();
        MessageLV.ItemsSource = Messages;
    }

}

我已經嘗試了一些方法,但到目前為止沒有一種方法奏效。

您可以將 MessageService 設為 singleton 並在 UserMessages class 中使用異步方法,以從 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 使用依賴注入。

頁面有一個可以使用的OnAppearing方法

public async override void OnAppearing()
{
    // svc is a instance of MessageService
    Messages = await svc.GetMessages();
    MessageLV.ItemsSource = Messages;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM