2010-12-02 86 views
0

我有一个充满按钮的列表框。点击按钮后会显示一个新页面。但是当我点击按钮时,我想要选择列表框的索引。但是listboxitem从未被选中。有没有办法通过单击按钮来获取按钮所在的索引。感谢帮助。如何获取Listbox选择的索引?

实施例代码

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

回答

4

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

+0

我想要选定索引的原因是因为当我点击按钮时会显示一个新页面。但是当我点击新页面上的上一个按钮时。我想让它显示我上次在列表框中的位置。 – Tan 2010-12-02 10:46:54