WPF - Как определить индекс текущего элемента в списке из обработчика кнопки - PullRequest
3 голосов
/ 11 января 2009

У меня есть список с шаблоном данных, который содержит кнопку.

Когда кнопка нажата, я хочу попасть в кнопку обработчик щелчка индекс элемента списка, который был текущим ??

Как мне это сделать, пожалуйста?

Malcolm

Ответы [ 6 ]

5 голосов
/ 27 июля 2009

Более подходящий ответ,

private void Button_Click(object sender, RoutedEventArgs e)
{
   DependencyObject dep = (DependencyObject)e.OriginalSource;

   while ((dep != null) && !(dep is ListViewItem))
   {
     dep = VisualTreeHelper.GetParent(dep);
   }

   if (dep == null)
    return;

   int index = lstBox.ItemContainerGenerator.IndexFromContainer(dep); 
}
2 голосов
/ 11 января 2009

Надеюсь, что приведенный ниже код поможет вам.

private void Button_Click(object sender, RoutedEventArgs e)
{
    var b = (Button)sender;
    var grid = (Grid)b.TemplatedParent
    var lstItem = (ListBoxItem)grid.TemplatedParent;
    int index = lstBox.ItemContainerGenerator.IndexFromContainer(lstItem);
    // rest of your code here...
}

И XAML для вышеупомянутого предполагается как DataTemplate в ListBox с именем lstBox:

<DataTemplate x:Key="template">
  <Grid>
    <Button Click="Button_Click" Content="Press"/>
  </Grid>
</DataTemplate>
0 голосов
/ 08 сентября 2014

Привет, вы можете использовать ContentPresenter.Content для получения текущего элемента вместо текущего индекса:

<DataTemplate DataType="{x:Type MyModel}">                    
            <StackPanel Orientation="Horizontal" Margin="0 5">
                <TextBlock Text="{Binding Title}" />

                <Button Content="Active" Click="Button_Click" />
            </StackPanel>
 </DataTemplate>

и в коде:

private void Button_Click(object sender, RoutedEventArgs e)
    {
            var button = e.Source as Button;
            var contentPresenter = button.TemplatedParent as ContentPresenter;
            var myModel = (MyModel)contentPresenter.Content;            
    }
0 голосов
/ 02 января 2013

myListbox.Items.CurrentItem кажется, что вы ищете.

0 голосов
/ 10 мая 2012

Возможно, поздно, но использование "IndexOf" в списке "Items" даст вам индекс # Привет

0 голосов
/ 27 июля 2009

Вы проверили свойство "SelectedIndex" списка? Это может быть установлено нажатием на кнопку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...