Как записать события «Click» в заголовках столбцов DataGrid - PullRequest
9 голосов
/ 05 мая 2011

Похоже, что DataGrid, поставляемый с .NET 4, не содержит события для щелчков заголовков столбцов и строк. Я хочу получать события для щелчка заголовка столбца, так как я хочу предоставить свое собственное поведение сортировки и отключить сортировку по умолчанию, это потому, что моя view-модель является страничной моделью, которая будет отображать только 25/50/100 строк одновременно сортировка по умолчанию, конечно, будет сортировать только текущую страницу.

Теперь я могу создать новый стиль DataGridColumnHeader, который содержит элемент, по которому можно кликать, и установить ColumnHeaderStyle, хотя это просто кажется болью, так как у меня будут проблемы с определением таких элементов, как столбец, по которому щелкнули, и т. Д. .

Кто-нибудь еще сталкивался с этим и решал это?

1 Ответ

28 голосов
/ 05 мая 2011

Заголовки - это просто кнопки.Как и любая кнопка, вы можете зарегистрироваться на событие Click для захвата этих кликов.Просто установите таргетинг стиля DataGridColumnHeader и добавьте обработчик событий Click.Затем в обработчике у вас есть доступ к заголовку напрямую через sender.Затем вы можете получить Column, связанный с этим заголовком, и другую информацию, связанную с ним.

<DataGrid>
    <DataGrid.Resources>
        <Style TargetType="DataGridColumnHeader">
            <EventSetter Event="Click" Handler="columnHeader_Click" />
        </Style>
    </DataGrid.Resources>
</DataGrid>

Затем в коде:

private void columnHeader_Click(object sender, RoutedEventArgs e)
{
    var columnHeader = sender as DataGridColumnHeader;
    if (columnHeader != null)
    {
        // do stuff
    }
}

Подробнее о DataGrid, я заметил, что есть свойство ColumnHeaderStyle.Я думаю, что было бы лучше применить стиль вместо этого свойства.

<DataGrid>
    <DataGrid.ColumnHeaderStyle>
        <Style TargetType="DataGridColumnHeader">
            <EventSetter Event="Click" Handler="columnHeader_Click" />
        </Style>
    </DataGrid.ColumnHeaderStyle>
</DataGrid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...