2013-09-26 4 views
1

У меня есть длинный селектор спискаПолучить индекс выбранного элемента в longlistselector

<phone:LongListSelector x:Name="BTDevices" SelectionChanged="BTDevices_SelectionChanged_1"> 
<phone:LongListSelector.ItemTemplate> 
    <DataTemplate> 
    <StackPanel> 
    <TextBlock Text="{Binding Path=Name}" FontSize="30" /> 
    </StackPanel> 
    </DataTemplate> 
</phone:LongListSelector.ItemTemplate> 
</phone:LongListSelector> 

функция определена как:

private void BTDevices_SelectionChanged_1(object sender, SelectionChangedEventArgs e) 
{ 
//here i want to get the index of the selected item 
} 

Я попробовал следующую строку

int a = App.ViewModel.Items.IndexOf(sender as ItemViewModel); 

Но он всегда возвращает -1.

ответ

4

Когда происходит событие SelectionChanged, параметр sender обработчика события представляет объект, который вызвал это событие. Он имеет тип Object, но вы можете использовать его в соответствии с вашим типом управления.

В этом случае LongListSelector:

var myItem = ((LongListSelector) sender).SelectedItem as Model; 

(модель представляет собой тип данных, ваши ручки управления).

Затем, обратите внимание на этот пункт в ItemsSource и получить его значение:

var myIndex = ((LongListSelector) sender).ItemsSource.IndexOf(myItem); 

Вы назвали свой контроль, так что вместо (sender as LongListSelector), вы можете использовать его имя, BTDevices, но строки кода я написал был предназначен для того, чтобы показать вам, что с объектом sender.

В качестве альтернативы (и это более элегантный способ), показанный пресным, можно использовать EventArgs для выбора: e.AddedItems[0]

+0

Я следую за ваши комментарии, но проблема я столкнулся как. например У меня есть полная страница списка и есть только 3 элемента. теперь, когда я выбираю/нажимаю на пустую область, она дает -1. это нормально, но когда я выбираю какой-либо элемент. он дает мне индекс. это тоже прекрасно, но проблема заключается в выборе любого индекса, который я нажимаю на пустое место, но он дает последний выбранный индекс. –

+1

вы должны иметь возможность получать только действительные индексы - это означает 0+. Я не знаю, как вам удалось получить -1. У вас есть только 3 предмета? Задайте вопрос и дайте мне ссылку. – VasileF

+0

Чтобы решить проблему получения выбранного индекса даже при нажатии на пустое пространство, попробуйте установить для выбранного элемента значение null, как только вы закончите с ним –

0

sender будет тот, кто отправил тот факт, что это событие произошло. См SelectionChangedEventArgs at MSDN знать, что вы хотите делать, если e.AddedItems[0] одного списка выбора, или если множественного выбора списка, вам нужно петлю над ним:

foreach(var item in e.AddedItems) 
Смежные вопросы