我在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。有人可以解释出了什么问题吗?
非常感谢你的帮助。
修改
我已从XAML中删除了SelectedItem="{Binding SelectedObject, Mode=TwoWay}"
,并发现事情正常[大部分时间]正常工作。我正在更新ListBox的基础源,当更改影响==运算符评估的值与原始值不同时,我注意到SelectionChanged事件在RemovedItems中不包含任何内容。我将尝试制作对象的深层副本并更改深层副本,看看是否能解决我的问题。
最终更新
我制作了Leagues系列中FantasyLeague的深层副本。我有FantasyLeauge的成员绑定到可以更改的表单。当我对此进行深层复制时,表格的来源允许更改Leagues集合而不是原始集合,没有任何问题。我不确定为什么更改与==和.Equals评估相关联的值会导致此行为,而不仅仅是正确更新目标/源,但是,我已经解决了这个问题。如果有人对导致这种行为的原因有任何意见,我将不胜感激。感谢所有提出建议的人。
答案 0 :(得分:1)
我意识到这已经过时了但是因为它在我的搜索中显示得很高,所以我想更新答案。我认为你应该使用.ClearSelected()方法,MSDN info。这应该清除列表框C#或VBA(.net)中的任何选择。
干杯,
答案 1 :(得分:0)
好的,首先,你应该使用ObservableCollection
进行绑定。
其次,您将实际UI SelectedIndex
设置为-1(这完全违背了绑定的目的)。您需要设置DataSource
的索引。
尝试并可能发布其余代码。
答案 2 :(得分:0)
listLeagues.SelectedIndex = -1;
listLeagues.SelectedItem = addedLeague;
**listLeagues.UpdateLayOut();**
我希望这会有所帮助。