如何确保在数据绑定ListBox中没有选择任何项目?

Dab*_*rnl 4 .net wpf listbox selecteditem

好吧,这必须是一个重复的问题,但我找不到答案:我有一个数据集到数据集的列表框.默认情况下,选择项目[0].我如何防止这种情况,以确保在我单击ListBoxItem时提出SelectionChanged事件?

编辑:我已经解除了SelectedIndex = -1路由,但我再次尝试:在Listbox的构造函数中将SelectedIndex设置为-1(或作为XAML中的属性)不起作用.似乎在初始化之后填充了列表框,并且selectedIndex将在all.Same故事之后变为0,用于将SelectedItem设置为null;

我试过这个:

<ListBox ItemsSource="{Binding Value}" 
         SelectionChanged="ListBox_SelectionChanged"
         IsSynchronizedWithCurrentItem="True"
         Loaded="ListBox_Loaded">
</ListBox>
Run Code Online (Sandbox Code Playgroud)

有:

 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;
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,但它在列表框显示的项目顶部插入一个空行,这非常难看....在我的特定情况下,我可以通过删除IsSynchronizedWithCurrentItem属性来解决问题.

但我可以想到许多情况,这是不可接受的.

上面的语句是无意义的:要么您想要使用主 - 细节绑定并将IsSynchronizedWithCurrentItem设置为true,要么您不想.您不太可能希望使用主 - 详细信息绑定,然后始终在列表框中没有当前选定的项目

Jam*_*Hay 6

运行一些测试后,ListBox的默认行为是不预先选择列表中的项目.删除IsSynchronizedWithCurrentItem ="True"将确保列表框未预先选择,并且当用户单击任何项​​目时将引发SelectionChanged事件.

如果将IsSynchronizedWithCurrentItem设置为true,则意味着selectedIndex将始终等于ListBox.Items的ListBox.Items.CurrentItem的索引.ListBox.Items总是有一个CurrentItem,由于CurrentItem或CurrentIndex是只读的,所以不能设置为-1或null.

希望能帮助J

编辑...刚读完

"在我的具体情况我可以通过删除IsSynchronizedWithCurrentItem属性解决这个问题,但我能想到的许多场景中,这是无法接受的."

在这种情况下,我不认为上述原因是可能的.