如何获取Listbox选择的索引?

时间:2010-12-02 10:18:29

标签: wpf

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

示例代码

 <ListBox>
   <ListBox.ItemTemplate>
        <DataTemplate>
              <Button Click="ViewDetail_Click" Content="{Binding Path=Area}"></Button>
         </DataTemplate>
    </ListBox.ItemTemplate>
  </ListBox>

1 个答案:

答案 0 :(得分: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);
}

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

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

相关问题