如何获取Listbox选择的索引?

Tan*_*Tan 0 wpf

我有一个填充按钮的列表框.单击按钮后,将显示一个新页面.但是,当我点击按钮时,我想拥有列表框的选定索引.但是从不选择listboxitem.有没有办法通过单击按钮获取按钮所在的索引.感谢帮助.

示例代码

 <ListBox>
   <ListBox.ItemTemplate>
        <DataTemplate>
              <Button Click="ViewDetail_Click" Content="{Binding Path=Area}"></Button>
         </DataTemplate>
    </ListBox.ItemTemplate>
  </ListBox>
Run Code Online (Sandbox Code Playgroud)

Ian*_*ths 5

按钮的数据上下文将包含与列表项对应的源数据项.你没有显示你ItemsSource的列表是什么,所以我无法准确显示你需要的代码.但是这样的事情:

ObservableCollection<MyDataItem> items = new ObservableCollection<MyDataItem>();
...
myList.ItemsSource = items;
...
private void ViewDetail_Click(object sender, RoutedEventArgs e)
{
    Button b = (Button) sender;
    MyDataItem detailItem = (MyDataItem) b.DataContext;
    int itemIndex = items.IndexOf(detailItem);
}
Run Code Online (Sandbox Code Playgroud)

当然,如果您首先要求索引的原因是因为您想要获取相应的数据项,那么您根本不需要索引 - 项目已经在数据上下文中.

顺便说一句,我不会在ListBox这里使用.ListBox派对的主要内容是选择,但是通过将按钮作为项目,你就是打败了 - 正如你已经发现的那样,按钮在列表框有机会之前处理鼠标输入,这意味着你实际上不能选择这些项目.在这一点上,为什么有一个ListBox?基地ItemsControl可能更有意义.(ScrollViewer如果你需要滚动,请用一个包裹.)