【问题标题】:Listbox Selected Item is always null after an update in the list box in wpf在 wpf 中的列表框中更新后,列表框选定项始终为空
【发布时间】: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 变量。它正确返回那里。

标签: c# wpf linq listbox


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 2018-07-08
    • 1970-01-01
    相关资源
    最近更新 更多