好的,这一定是一个重复的问题,但我找不到答案:我有一个数据绑定到集合的列表框。默认选择 Items[0]。如何防止这种情况发生,以确保在单击 ListBoxItem 时引发 SelectionChanged 事件?
编辑:我已经取消了 SelectedIndex=-1 路由,但我再次尝试:在 Listbox 的构造函数中(或作为 XAML 中的属性)将 SelectedIndex 设置为 -1 不起作用。似乎在初始化后填充了列表框,并且 selectedindex 最终将变为 0。将 SelectedItem 设置为 null 的情况相同;
我试过这个:
<ListBox ItemsSource="{Binding Value}"
SelectionChanged="ListBox_SelectionChanged"
IsSynchronizedWithCurrentItem="True"
Loaded="ListBox_Loaded">
</ListBox>
和:
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if(e.AddedItems.Count==0)return;//Prevents stackoverflow! ;-)
((ListBox)e.OriginalSource).SelectedItem=null;
}
private void ListBox_Loaded(object sender, RoutedEventArgs e)
{
((ListBox) sender).SelectedItem = null;
}
这可行,但是它在列表框显示的项目顶部插入了一个空行,这非常难看....在我的特殊情况下,我可以通过删除 IsSynchronizedWithCurrentItem 属性来解决问题。
但我可以想到很多情况下这是不可接受的。
上面的陈述是无稽之谈:要么您想使用主从绑定并将 IsSynchronizedWithCurrentItem 设置为 true,要么您不这样做。您不太可能想要使用主从绑定,然后在您的列表框中一直没有当前选定的项目