我有一个在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>
在代码中,我设置数据上下文如下:
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更改为新值时,即使模式为Single,它也具有两个项目作为SelectedItems。有人能解释一下出了什么问题吗?非常感谢您的帮助。
编辑
我已经从XAML中删除了
SelectedItem="{Binding SelectedObject, Mode=TwoWay}"
,并发现事情正在正常进行[大部分时间]。我正在更新ListBox的基础源,并且当更改影响==运算符评估与原始值不同的值时,我注意到SelectionChanged事件不包括RemovedItems中的任何内容。我将尝试制作对象的深层副本并更改该深层副本,看看是否解决了我的问题。最终更新
我制作了一个FantasyLeague的深层副本,该副本位于Leagues集合中。我将FantasyLeauge的成员绑定到可以更改的表单上。当我制作此的深度副本时,允许更改Leagues集合的表单的源而不是原始源时,就没有问题了。我不确定为什么更改与==和.Equals相关的值会导致这种行为,而不仅仅是正确地更新目标/源,但是我已经解决了这个问题。如果有人对导致这种行为的原因有输入,我将不胜感激。感谢所有提出建议的人。
listLeagues.SelectedItem = null;
但它似乎没有任何作用。 - Harrison