[英]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.