Перехват событий в шаблонах элементов списка в WPF - PullRequest
1 голос
/ 02 апреля 2010

У меня есть список, в котором используется шаблон элемента. В каждом элементе списка, как определено в шаблоне, есть кнопка. Когда пользователь нажимает кнопку, я меняю значение в источнике данных, которое определяет порядок сортировки списка. Смена источника данных не является проблемой, так как он отлично работает в моем шаблоне приложения.

Однако мой следующий шаг - перезагрузить список с новым отсортированным источником данных. Я пытался сделать это из tempalte, но у него явно нет доступа (или я не могу понять, как получить доступ) к родительским элементам, поэтому я могу сбросить свойство .ItemSource с недавно отсортированным источником данных. 1003 *

Кажется, это возможно, но решение ускользает от меня: (

1 Ответ

1 голос
/ 02 апреля 2010

Вы можете использовать привязку данных для привязки тега кнопки к ее ListBox предку. Пример:

<Grid>
    <Grid.Resources>
        <DataTemplate x:Key="myDataTemplate">
            <Button Tag="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}}"
                        Click="Button_Click">MyButton</Button>
        </DataTemplate>
    </Grid.Resources>

    <ListBox ItemTemplate="{StaticResource myDataTemplate}" ItemsSource="..." />
</Grid>

А вот код:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        ListBox myListBox = (ListBox)((Button)sender).Tag;
        ...do something with myListBox...
    }

Кроме того, вы можете вручную подняться в дерево кода вверх в коде (без Tag привязки данных не требуется):

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        DependencyObject search = (DependencyObject)sender;
        while (!(search is ListBox)) {
            search = VisualTreeHelper.GetParent(search);
        }
        ListBox myListBox = (ListBox)search;
        ...do something with myListBox...
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...