1

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

<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

2 回答 2

4

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

在这种情况下,LongListSelector

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

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

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

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

(sender as LongListSelector)您已经命名了您的控件,因此您可以使用它的名称来代替,但是我编写的代码行旨在向您展示该对象BTDevices是什么。sender

或者(这是一种更优雅的方式),如乏味所示,您可以使用EventArgsfor selection :e.AddedItems[0]

于 2013-09-26T18:16:15.660 回答
1

sender将是谁发送了这个事件发生的事实。请参阅MSDN 上的 SelectionChangedEventArgs以了解e.AddedItems[0]如果是单选列表,或者如果是多选列表,您将需要对其进行循环:

foreach(var item in e.AddedItems)
于 2013-09-26T16:14:34.737 回答