【问题标题】:How to get Listbox selected index?如何获取列表框选定的索引?
【发布时间】:2010-12-02 18:28:18
【问题描述】:

我有一个充满按钮的列表框。单击按钮时,将显示一个新页面。但是当我单击按钮时,我想拥有列表框的选定索引。但永远不会选择 listboxitem。有没有办法通过单击按钮来获取按钮所在的索引。感谢您的帮助。

示例代码

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

【问题讨论】:

    标签: wpf


    【解决方案1】:

    按钮的数据上下文将包含与列表项对应的源数据项。你没有显示你的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 包裹。)

    【讨论】:

    • 我想要选择索引的原因是当我点击按钮时会显示一个新页面。但是当我点击新页面上的上一个按钮时。我希望它显示我上次在列表框中的位置。
    • 好的。尽管我不确定您为什么需要它,但我的示例显示了如何获取索引 - 这对您有用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2021-10-03
    • 2017-03-19
    • 1970-01-01
    相关资源
    最近更新 更多