在wpf的列表框中进行更新后,Listbox Selected Item始终为null

时间:2016-12-19 11:10:13

标签: c# wpf linq listbox

在我的WPF应用程序中,我有一个列表框,其中包含正在播放的测验匹配列表。每次我/任何其他对手创建比赛时重新加载列表。

当前场景:我正在比赛,我的当前比赛会根据其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。

我不确定为什么在为selectedItem分配相同的LINQ时它为空。

1 个答案:

答案 0 :(得分:2)

如果要更改绑定到ListBox的列表,则会使SelectedItem无效。您需要存储查找当前所选项目的方式 - 它是Id或唯一代码,然后在列表更新后重新选择:

int selectedItemId = SelectedItem.Id;
ChallengerLists = updatedList;
SelectedItem = ChallengerLists.FirstOrDefault(i => i.Id == selectedItemId);