WPF Как узнать, какой элемент ListBox был нажат

У меня есть приложение WPF, в котором есть список, заполненный элементами типа «Сопоставление». Как сделать так, чтобы кнопка (содержащаяся в элементе) фактически выбирала элемент, чтобы я мог извлечь значение?

Вот мой код: ни один из них не работает, так как нажатие кнопки фактически не выбирает элемент

private void LayButton_Click(object sender, RoutedEventArgs e)
{
    var x = (Market)ListBoxSelectedMarket.SelectedItem;
    var y = (sender as ListBoxItem);

}

Спасибо


person Chris    schedule 20.01.2011    source источник


Ответы (3)


Вы должны иметь возможность использовать DataContext из нажатой кнопки и получить оттуда контейнер ListBoxItem, а затем выбрать его.

private void LayButton_Click(object sender, RoutedEventArgs e)
{  
    Button button = sender as Button;
    var dataContext = button.DataContext;
    ListBoxItem clickedListBoxItem = ListBoxSelectedMarket.ItemContainerGenerator.ContainerFromItem(dataContext) as ListBoxItem;
    clickedListBoxItem.IsSelected = true;
}
person Fredrik Hedblad    schedule 21.01.2011

Если вы привязываетесь к объекту, альтернативным методом может быть (в VB)

Затем это дает вам экземпляр вашего объекта для игры и избавляет вас от любых полей сопоставления в списке.

Private Sub OTC_Settled_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        Dim pr_YourObject As New YourObject
        Dim btn As Button = CType(sender, Button)
        OTC = DirectCast(btn.DataContext, pr_YourObject)
     End Sub
person Chris Allison    schedule 08.04.2011

Я не занимался программированием WPF, но вы можете попробовать получить родителя кнопки, если он работает так же, как объект-контейнер WinForms.

person jamiegs    schedule 20.01.2011