获取长名单选择器中所选项目的索引

本文关键字:选项 项目 索引 名单 选择器 获取 | 更新日期: 2023-09-27 18:32:59

我有一个很长的列表选择器

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

获取长名单选择器中所选项目的索引

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

在这种情况下,LongListSelector

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

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

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

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

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

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

sender

是谁发送了此事件发生的事实。 请参阅 MSDN 上的 SelectionChangedEventArgs,了解您需要执行e.AddedItems[0]如果单选列表或多选列表,则需要循环访问它:

foreach(var item in e.AddedItems)