好的,这可能是一个重复的问题,但我找不到答案:我有一个绑定到 Collection 的列表框。默认情况下,Items[0] 被选择。如何防止这种情况,以确保每次单击 ListBoxItem 时都会引发 SelectionChanged 事件?
编辑: 我已经放弃了 SelectedIndex=-1 的方法,但我再试一次:在 Listbox 的构造函数中(或作为 XAML 属性)将 SelectedIndex 设置为 -1 不起作用。似乎列表框在初始化后被填充,并且选定索引将在所有内容之后成为 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,要么不想。很不可能你想利用主从绑定,然后在你的列表框中始终没有当前选定的项目。