Windows Phone 8 - C# 更新套接字中的可观察集合

本文关键字:观察 集合 套接字 更新 Phone Windows | 更新日期: 2023-09-27 17:55:30

当我在套接字上侦听时,我需要更新我的observableCollection。然后将我的observableCollection从大到小排序。我每次都在听任何更新。这工作正常。

但是当我向下滚动我的longListSelector时,**每次更新完成时,我都可以"到达它的尽头,它会让我回到顶部。 如何更新它并能够向下滚动。

mySock.On("player:new-vote", (data) = > {
string newVoteData = data.ToString();
JObject obj = JObject.Parse(newVoteData);
string objId = (string) obj["id"];
int objStand = (int) obj["details"]["standing"];
int objUp = (int) obj["details"]["upVotes"];
int objDown = (int) obj["details"]["downVotes"];
string objBy = (string) obj["details"]["by"];
PlayerVotes newVote = new PlayerVotes() {
    by = objBy,
    _id = objId,
    downVotes = objDown,
    upVotes = objUp,
    standing = objStand
};
Deployment.Current.Dispatcher.BeginInvoke(() = > {
    var updateVoteSong = playerCollection.FirstOrDefault(x = > x._id == objId);
    updateVoteSong.votes = newVote;
    playerCollection = new ObservableCollection < PlayerSong > (playerCollection
        .OrderByDescending(x = > x.votes.standing));
    MainLongListSelector.ItemsSource = playerCollection;
});

});

Windows Phone 8 - C# 更新套接字中的可观察集合

首先,您不应该每次都覆盖您的 ObservableCollection,其中包含的数据发生变化。

而是使用此扩展进行排序,例如:

public static class ObservableCollection
 {
      public static void Sort<TSource, TKey>(this ObservableCollection<TSource> source, Func<TSource, TKey> keySelector)
      {
          List<TSource> sortedList = source.OrderByDescending(keySelector).ToList();
          source.Clear();
          foreach (var sortedItem in sortedList)
          {
              source.Add(sortedItem);
          }
     }
 }

如果每次都重写集合,则绑定控件可能会收到严重的绑定问题,因为它们永远不会取消绑定。

要滚动到特定元素,您可以执行以下操作:

var lastMessage = playerCollection.LastOrDefault();
MainLongListSelector.ScrollTo(lastMessage);

这可能不会给你一个100%合适的答案,但它应该会把你推向正确的方向。