Хорошо, это должен быть повторяющийся вопрос, но я не могу найти ответ: у меня есть список, привязанный к коллекции. По умолчанию выбрано Items [0]. Как я могу предотвратить это, чтобы событие SelectionChanged возникало каждый раз, когда я нажимаю ListBoxItem?
РЕДАКТИРОВАТЬ: я уже отклонил маршрут SelectedIndex = -1, но я попытался снова: установка SelectedIndex на -1 в конструкторе Listbox (или в качестве атрибута в XAML) не работает. Кажется, что список заполняется после инициализации, и 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.
Но я могу придумать множество сценариев, в которых это было бы неприемлемо.
Вышеупомянутое утверждение не имеет смысла: либо вы хотите использовать привязку master-detail и установить для IsSynchronizedWithCurrentItem значение true, либо вы этого не сделаете. Маловероятно, что вы захотите использовать привязку "главный-подробный", и тогда в вашем списке все время не будет выбранного в данный момент элемента.