我在 XAML 中定义了一个列表框,如下所示:
<ListBox x:Name="listLeagues" DisplayMemberPath="LeagueName"
SelectionChanged="listLeagues_SelectionChanged"
SelectedItem="{Binding SelectedObject, Mode=TwoWay}"
SelectionMode="Single"
BorderBrush="{StaticResource noBrush}" Background="{StaticResource noBrush}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
</ListBox>
在代码中,我将 DataContext 设置如下: listLeagues.ItemsSource = Leagues;
其中 'Leagues' 是自定义集合。我正在尝试使用以下代码更改代码中的选定项目:
private void addButton_Click(object sender, MouseButtonEventArgs e)
{
FantasyLeague addedLeague = new FantasyLeague();
Random rnd = new Random();
addedLeague.LeagueName = "New Leauge " + rnd.Next(100).ToString();
Leagues.Add(addedLeague);
listLeagues.SelectedIndex = -1;
listLeagues.SelectedItem = addedLeague;
LeagueDetailsClickHelper();
}
我的列表框有 SelectionMode = Single。该行listLeagues.SelectedIndex = -1;
没有任何影响,并且当将 SelectedItem 更改为新值时,即使模式是单一的,它也将两个项目都作为 SelectedItems。有人可以解释出了什么问题吗?
非常感谢你的帮助。
编辑
我已经SelectedItem="{Binding SelectedObject, Mode=TwoWay}"
从 XAML 中删除了 ,发现一切正常[大部分时间]。我正在更新 ListBox 的基础源,当将影响 == 运算符评估的值更改为与原始值不同时,我注意到 SelectionChanged 事件不包括 RemovedItems 中的任何内容。我将尝试制作对象的深层副本并更改深层副本,看看是否能解决我的问题。
最后更新
我制作了联盟收藏中的 FantasyLeague 的深层副本。我将 FantasyLeauge 的成员绑定到一个可以更改的表单。当我将此深层副本作为允许更改 Leagues 集合而不是原始表单的来源时,没有任何问题。我不确定为什么更改与 == 和 .Equals 的评估相关的值会导致这种行为,而不仅仅是正确更新目标/源,但是,我已经解决了这个问题。如果有人对导致这种行为的原因有意见,我将不胜感激。感谢所有提出建议的人。