Как добавить значок сортировки на заголовок ListView используя MVVM

118
16 февраля 2022, 03:30

Примеров сортировки по столбцам ListView с отображением треугольника в какую сторону идёт сортировка, я нашёл достаточно. Но они все подразумевают использование Code-behind, где выбирается нужный нам GridViewColumnHeader и уже туда вешается соответствующий значок. Но как того же добиться используя MVVM я не разобрался :(. Прошу помощи. Итак есть ListView

<ListView Grid.Column="0" Grid.Row="3" Grid.ColumnSpan ="2" ItemsSource ="{Binding FoldersInfo}">
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding DirNumber}">
                <GridViewColumn.Header>
                    <GridViewColumnHeader CommandParameter="1" Command="{Binding Sorted}">Номер Папки</GridViewColumnHeader>
                    </GridViewColumn.Header>                       
            </GridViewColumn>
            <GridViewColumn DisplayMemberBinding="{Binding CountOfFile}">
                <GridViewColumn.Header>
                    <GridViewColumnHeader CommandParameter="2" Command="{Binding Sorted}">Кол-во файлов</GridViewColumnHeader>
                </GridViewColumn.Header>
            </GridViewColumn>
            <GridViewColumn DisplayMemberBinding="{Binding FileNum}">
                <GridViewColumn.Header>
                    <GridViewColumnHeader CommandParameter="3" Command="{Binding Sorted}">Номер файла</GridViewColumnHeader>
                </GridViewColumn.Header>
            </GridViewColumn>
            <GridViewColumn DisplayMemberBinding="{Binding Name}">
                <GridViewColumn.Header>
                    <GridViewColumnHeader CommandParameter="4" Command="{Binding Sorted}">Путь</GridViewColumnHeader>
                </GridViewColumn.Header>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

И код сортировки

public RelayCommand Sorted  => new RelayCommand(o =>
{
    if (FoldersInfo == null || FoldersInfo.Count == 0) return;
    if (lastSorted.Equals(o.ToString())) sortUp = !sortUp;
    else sortUp = true;
    FoldersInfo = lg.sorted(FoldersInfo, o.ToString(), sortUp);
    lastSorted = o.ToString();
});

А как добавить значки сортировки ума не приложу :(. И было бы совсем замечательно, если бы подсказали как это сделать через темы.

READ ALSO
Visual Studio C# аналог #pragma mark из Xcode

Visual Studio C# аналог #pragma mark из Xcode

Есть подобный аналог в c#, а то падает читаемость кода при 999+ строк кода

104
Как отловить тап на смартфоне?

Как отловить тап на смартфоне?

Хочу реализовать прыжок по двойному нажатию в определенной областиКак считать первое и следующие нажатие по экрану чтобы проверить что...

108
Сборка и запуск WPF приложения из консоли

Сборка и запуск WPF приложения из консоли

Вопрос вроде простой, но я так не понял, как сделать: хочу сделать тоже самое, что делается при запуске/сборке приложения из visual studio, но только...

186
Почему создается дополнительное поле Section_Id, EF, Code first?

Почему создается дополнительное поле Section_Id, EF, Code first?

Почему в БД создается дополнительное поле Section_Id с нулевым значением (на рисунке показано создание ключа - закомментированное значение)?

100