【发布时间】:2017-12-12 12:38:37
【问题描述】:
亲爱的,
我正在实现在没有按钮的情况下将更多项目加载到列表视图。
我的代码:
public partial class DashBoardPage : ContentPage
{
ObservableCollection<string> Items;
bool isLoading;
public DashBoardPage()
{
InitializeComponent();
Items = new ObservableCollection<string>();
var listview = new ListView();
listview.ItemsSource = Items;
listview.ItemAppearing += (sender, e) =>
{
if (isLoading || Items.Count == 0)
return;
//hit bottom!
if (e.Item.ToString() == Items[Items.Count - 1])
{
LoadItems();
}
};
LoadItems();
}
public async void LoadItems()
{
isLoading = true;
HttpClient client = new HttpClient();
var response = await client.GetAsync("My Url");
string tweetJson = await response.Content.ReadAsStringAsync();
UserTweetResponse userTweetResponse = new UserTweetResponse();
if (tweetJson != "")
{
userTweetResponse = JsonConvert.DeserializeObject<UserTweetResponse>(tweetJson.ToString());
foreach (var tweet in userTweetResponse.userTweetsList)
{
Items.Add(tweet.ToString());
}
}
ListView1.ItemsSource = userTweetResponse.userTweetsList;
isLoading = false;
}
}
我参考了以下链接,并与 LoadItems() 中的 for 循环混淆了: https://montemagno.com/load-more-items-at-end-of-listview-in/
for (int i = 0; i < 20; i++)
{
Items.Add (string.Format("Item {0}", Items.Count));
}
在我的例子中,我使用 itemSource 属性将响应绑定到列表视图。
我的模型课:
public class UserTweetResponse
{
public List<UserTweetsList> userTweetsList { get; set; }
}
public class UserTweetsList
{
public int tweetId { get; set; }
public string tweetData { get; set; }
public string createdTime { get; set; }
public int commentCount { get; set; }
public int likeCount { get; set; }
public int flagCount { get; set; }
public string mediaUrl { get; set; }
public string tweetUser { get; set; }
public bool userLiked { get; set; }
public bool userFlagged { get; set; }
public bool isMediaUrlNull { get { return string.IsNullOrEmpty(mediaUrl); } }
}
我该如何解决这个问题? 在此先感谢
【问题讨论】:
-
您需要将新项目添加到您的项目集合中。目前您正在替换错误的 ItemsSource。
-
通过 itemSource 属性,我正在绑定 xaml 中的值。因此,如果我替换它,我将无法在 UI 中显示这些值。我不知道如何向 Items 集合添加新项目。我尝试像 Items = userTweetResponse.userTweetsList;但出现转换错误。 userTweetResponse 是我的模型类对象。
-
您需要将新推文添加到现有的 Items 集合中,例如 foreach (tweet in userTweetResponse.userTweetsList) { Items.Add(tweet); }
-
我还建议将您的网络调用代码提取到一个帮助程序类中,这样您就不会在每次加载更多推文时都创建一个新的 HttpClient
标签: xamarin.forms