0

ソケットで待機するときにobservableCollectionを更新する必要があります。 次に、observableCollectionを最大から最小に並べ替えます。 私は毎回何か更新を聞いています。 これは正常に動作します。c#ソケットのObservableCollectionを更新します

しかし、私は私のlongListSelectorを下にスクロールすると、**更新が行われ、すべての回は、i」は はトンそれの終わりに到達することができ、それはトップに私を返します。* * それを更新する方法と、下にスクロールすることができます。

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; 
}); 

});

答えて

0

まず、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%フィット答えを得られないかもしれないが、それは正しい方向にあなたをプッシュする必要があります

関連する問題