【发布时间】:2016-12-19 11:10:12
【问题描述】:
在我的 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。
我不确定为什么在将相同的 LINQ 分配给 selectedItem 时它为空。
【问题讨论】:
-
与问题无关,但你为什么有
.ToList().FirstOrDefault()?你可以简单地在最后加上.FirstOrDefault()。 -
@Bas 有很多为什么?就像为什么ID列是字符串一样,为什么不直接调用ChanllengerList.FirstOrDefault。如果您的结果为 null,则可能没有符合您的 where 条件的项目。
-
另外,您确定在这里检查 challangeStatus 是否正确?如果不是“轮到你”会怎样?
-
您可以发布填充您列表的对象的代码吗?具有
challengeID属性的那个。 -
@mybirthname ID 我已转换为字符串,以便我可以将值与我的列表进行比较。从 Web API 返回列表,其中 ID 作为字符串返回。如果条件或不满足它一定不能返回到filteredlistfortest2 变量。它正确返回那里。