【问题标题】:Get the index of the selected item in longlistselector获取longlistselector中选中项的索引
【发布时间】:2013-09-26 16:00:48
【问题描述】:

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

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

【问题讨论】:

    标签: c# windows-phone-8


    【解决方案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]

    【讨论】:

    • 我关注你的 cmets 但我面临的问题是这样的。例如我有完整的列表视图页面,只有 3 个项目。现在,当我选择/按下空白区域时,它会给出-1。这很好,但是当我选择任何项目时。它给了我索引。这也很好,但问题是在我点击空白处选择了任何索引后,它仍然给出了最后选择的索引。
    • 您应该只能获得有效的索引 - 这意味着 0+。我不知道你是如何得到-1的。你确定你只有3个项目吗?提出问题,然后给我链接。
    • 要解决即使在按下空格时获取所选索引的问题,请在完成后尝试将所选项目设置为空
    【解决方案2】:

    sender 将是发送此事件发生的事实的人。请参阅SelectionChangedEventArgs at MSDN 以了解您想要在单选列表或多选列表中执行e.AddedItems[0],您需要遍历它:

    foreach(var item in e.AddedItems)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 2017-10-28
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多