Я столкнулся с аналогичной WPF ListView/Gridview сортировки проблемы и у меня есть некоторые контрсилы, что делает его трудно реализовать Csharp решения при условии. По сути, у меня есть существующее приложение ASP.NET с тысячами строк отлаженного кода VB, а также рабочий SQL для базы данных с более чем 100 таблицами и очень сложными объединениями. Я должен написать Windows .exe на основе одного и того же приложения, но я хочу использовать WPF для реализации аналогичного графического взгляда &.
Закончив с отказом от ответственности, я столкнулся с проблемой сортировки и обыскал Интернет для всех замечательных общих понятий, подобных приведенным выше, и попытался преобразовать их из CS в VB. Я опытный программист, но я обнаружил, что это было просто не в моих силах, поэтому я перевернул и разработал свой собственный вид. Вероятно, это пугает пуристов, но я прагматик, и коммерческое приложение имеет приоритет.
Чтобы отсортировать сетку, я решил использовать события мыши в заголовках столбцов. DoubleClick для восходящих сортировок и MouseRightButtonUp для спуска.
<GridViewColumn Header="Project Name   " Width="300" >
Private Sub ListViewGrid_MouseDoubleClick(
ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles ListingDG.MouseDoubleClick
Try
Dim mouseHdrClick As String = DirectCast(DirectCast(e.OriginalSource, System.Object), System.Windows.Controls.TextBlock).Text
Dim SqlOrderBy As String = ""
Select Case UCase(mouseHdrClick.Trim)
Case UCase("Product Name")
SqlOrderBy = " ORDER BY Product_Name"
Затем я просто перезаряжаю ListViewGrid с помощью строковой переменной SqlOrderBy.Единственная проблема, с которой я столкнулся, заключалась в том, что я был вынужден щелкнуть текст заголовка в заголовке столбца, чтобы он работал. Я решил, что просто добавив символ пространства XML ( 
), чтобы заполнить ширину столбца. Команда .Trim
снова очищает их для работы Select Case. Я до сих пор не понял, как добавить маленькие стрелки вверх и вниз, но функциональность - это то, что считается здесь, так как это просто косметические штрихи прямо сейчас.
<GridViewColumn Header="Project Name   " Width="300">
Наконец, позвольте мне добавить, что я прекрасно понимаю, что если я изменить структуру Gridview это приведет текст заголовка, чтобы двигаться в другом месте в OriginalSource, но это вопрос я могу жить с сейчас. Я знаю, что это быстрый грязный обходной путь, и, вероятно, есть намного лучшие альтернативы, поэтому любые рекомендации будут оценены.
Отличная статья! Образец для GridViewSort.Command будет в порядке. Поскольку я не так разбираюсь в этой теме. – TalkingCode
Я обновил свой ответ, чтобы добавить образец –
Спасибо, я посмотрю на это. – TalkingCode