获取longlistselector中所选项的索引

时间:2013-09-26 16:00:48

标签: c# windows-phone-8

我有一个长列表选择器

<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。

2 个答案:

答案 0 :(得分:4)

发生SelectionChanged事件时,事件处理程序的sender参数表示触发此事件的对象。它的类型为Object,但您可以将其强制转换为与您的特定控件类型匹配。

在这种情况下,LongListSelector

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

(Model表示控件处理的数据类型)。

之后,在ItemsSource中查找该项并检索其值:

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

您已为控件命名,因此您可以使用其名称(sender as LongListSelector)代替BTDevices,但我编写的代码行旨在向您展示sender的内容。对象

或者(这是一种更优雅的方式),由bland显示,您可以使用EventArgs进行选择:e.AddedItems[0]

答案 1 :(得分:0)

sender将发送此事件发生的事实。请参阅SelectionChangedEventArgs at MSDN,了解如果单选列表,您将需要执行e.AddedItems[0],或者如果需要多选列表,则需要循环显示它:

foreach(var item in e.AddedItems)