我有一个长列表选择器
<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。
答案 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)