2009-07-16 3 views
4

У меня есть список с некоторыми текстовыми блоками, а кнопка - в коде кнопки, когда он вызывает метод, передающий текущий выбранный элемент списка, это отлично работает. Проблема в том, что когда я выбираю элемент и затем нажимаю кнопку на другом элементе, он не обновляет свойство «SelectedItem» - есть ли способ Xaml или C#, который я могу заставить кнопку щелкнуть, чтобы выбрать родительский ListBoxItem?WPB ListBox Button Выбранный элемент

Xaml

<DataTemplate> 
    <Grid> 
     <Button x:Name="myButton" Click="myButton_Click" Height="30" Width="30"> 
      <Image Source="Resources\Image.png" /> 
     </Button> 
     <TextBlock Text="{Binding DataField}"></TextBlock> 
    </Grid> 
</DataTemplate> 
+0

Так есть кнопка и TextBlock для каждого ListBoxItem? Можете ли вы разместить свой XAML или дать нам немного лучше понять, как это настроено? – Charlie

ответ

19
var curItem = ((ListBoxItem)myListBox.ContainerFromElement((Button)sender)).Content; 
+0

Выберите в качестве ответа для простоты. – Nate

+0

Это работает для целого ряда элементов отправителя! Используется для отправителя (сетки). – Enrico

+0

отличный ответ, никогда бы не знал о функции ContainerFromElement – antfx

3

Когда кнопка нажата, она устанавливает e.Handled истины, в результате чего маршрутизации обхода события, чтобы остановить.

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

EDIT

Метод расширения, как это:

public static DependencyObject FindVisualAncestor(this DependencyObject wpfObject, Predicate<DependencyObject> condition) 
{ 
    while (wpfObject != null) 
    { 
     if (condition(wpfObject)) 
     { 
      return wpfObject; 
     } 

     wpfObject = VisualTreeHelper.GetParent(wpfObject); 
    } 

    return null; 
} 

Использование:

myButton.FindVisualAncestor((o) => o.GetType() == typeof(ListBoxItem)) 
+0

Как выглядит такой метод? Как я могу найти визуального предка кнопки ListBoxItem? – Nate

+1

Отредактировал мой ответ. –

Смежные вопросы