在我的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时它为空。
答案 0 :(得分:2)
如果要更改绑定到ListBox的列表,则会使SelectedItem
无效。您需要存储查找当前所选项目的方式 - 它是Id或唯一代码,然后在列表更新后重新选择:
int selectedItemId = SelectedItem.Id;
ChallengerLists = updatedList;
SelectedItem = ChallengerLists.FirstOrDefault(i => i.Id == selectedItemId);