获取长名单选择器中所选项目的索引
本文关键字:选项 项目 索引 名单 选择器 获取 | 更新日期: 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)