2016-12-19 33 views
1

私のWPFアプリケーションでは、再生中のクイズのリストを持つリストボックスがあります。私/他の相手が試合を作成するたびに、リストをリロードしています。リストボックス選択項目は常にwpfのリストボックスの更新後にnullです

現在のシナリオ:試合中、現在の試合はそのIDに基づいて強調表示されます。自分自身を演奏している間に他の人が私に招待状を送り、それが自動的にリストをリフレッシュし、選択されたアイテムがヌルに変わります。それは現在再生中の試合に影響します。

ユーザーが他の一致をクリックしない限り、selectedItemは同じになる必要があります。だから私は変数にIDを保持していて、リストをリロードした後でも、その古いIDでその項目を選択します。

List<ChallengePlayerLists> ChallengerLists; 
var filteredlistfortest2 = ChallengerList.Where(x => x.challengeID == Convert.ToString(challengeID) && (x.challengeStatus == "Your turn")).ToList().FirstOrDefault(); 
       lstChallengeGrid.SelectedItem = ChallengerList.Where(x => x.challengeID == Convert.ToString(challengeID) && (x.challengeStatus == "Your turn")).ToList().FirstOrDefault(); 

public class ChallengePlayerLists 
{ 
    public string challengeID { get; set; } 
    public string challengeType { get; set; } 
    public string challengerID { get; set; } 
    public string opponentID { get; set; } 
    public string fullName { get; set; } 
    public string userName { get; set; } 
    public string challengeStatus { get; set; } 
} 

最初のコード行は期待どおりに機能し、LINQクエリを使用して選択したい一致を得ることができます。しかし、それをlistbox.SelectedItemに割り当てている間は、それはNULLのままです。

同じLINQをselectedItemに割り当てているときになぜnullであるのかわかりません。

+0

無関係な、しかし、なぜあなたは '.ToListを持っています:それは、IDまたは固有のコードだと、リストが更新された後、それを再選択 - あなたは現在選択されているアイテムを見つける方法を格納する必要があります。 ().FirstOrDefault() '?最後に '.FirstOrDefault()'をシンプルにすることができます。 – RandomStranger

+3

@Basなぜ多くの理由がありますか?なぜID列が文字列であるかのように、ChanllengerList.FirstOrDefaultを直接呼び出すことはできません。結果がnullの場合は、おそらくどこの条件に合った項目はありません。 – mybirthname

+0

また、challangeStatusが正しいことを確認してもよろしいですか?それはあなたのターンではない場合はどうなりますか? – vkluge

答えて

2

リストボックスにバインドされたリストを変更している場合は、SelectedItemが無効になります。質問へ

int selectedItemId = SelectedItem.Id; 
ChallengerLists = updatedList; 
SelectedItem = ChallengerLists.FirstOrDefault(i => i.Id == selectedItemId); 
関連する問題