ListBox SelectedIndex всегда -1 - PullRequest
       36

ListBox SelectedIndex всегда -1

2 голосов
/ 14 июля 2011

У меня есть список с кнопкой и текстовым блоком как ItemTemplate.Кнопка имеет событие onClick.

Все, что я хочу, это получить индекс элемента, по которому щелкнули, но свойство SelectedIndex в моем ListBox всегда равно -1!

Как я могу получитьиндекс кликаемого элемента?

Ответы [ 3 ]

2 голосов
/ 14 июля 2011

Проблема в том, что элемент управления Button глотает события мыши, чтобы обеспечить поведение Click, поэтому ListBox никогда не получает никаких событий, чтобы сообщить ему, что выбор изменился.

Как подсказывает @Alexander, вы могли быиспользуйте подход в стиле MVVM с командами для обработки действия в модели представления и передачи контекста данных в качестве параметра.

В качестве альтернативы, вы можете заменить Button любым другим элементом управления макетом и использовать службу жестов из Silverlight Toolkit или используйте обычное событие MouseLeftButtonUp.В любом случае события мыши будут всплывать и позволять ListBox обрабатывать выделение.

0 голосов
/ 14 июля 2011

Если вы хотите получить объект данных, связанный с текущим ListItem, используйте RouteCommand. Вот пример

<ListView.ItemTemplate>
  <DataTemplate>
    <Button Margin="5,0" Command="{StaticResource ButtonCommand}" 
                         CommandParameter="{Binding}">
  </DataTemplate>
<ListView.ItemTemplate>

Вам также необходимо определить Command хотя бы в ListView.Resources

<RoutedCommand x:Key="ButtonCommand"/>

А затем настройте CommandBinding следующим образом

<ListView.CommandBindings>
  <CommandBinding Command="{StaticResource ButtonCommand}" Executed="Button_Click"/>
</ListView.CommandBindings>

В конце обработчик записи

    Button_Click(object sender, ExecutedRoutedEventArgs e)
    {
        e.Parameter// object that you Specified in CommandParameter
    }

Заранее вы можете использовать любую инфраструктуру MVVM, определить всю логику команд и команд в модели, а затем просто привязать эти команды к соответствующим элементам.

0 голосов
/ 14 июля 2011

Возможно, вы захотите выбрать что-то в списке, тогда: p

...