Сортировка по горизонтали ListView - PullRequest
0 голосов
/ 17 мая 2019

Я хочу, чтобы представление списка сортировалось на основе объекта, ограниченного

    <ListView x:Name="ListView1" Grid.Row="2" Grid.Column="2"  VirtualizingStackPanel.IsVirtualizing="True" ScrollViewer.CanContentScroll="False"  ItemsSource="{Binding Path=CurrentProductsImages}">
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Border BorderBrush="Black" BorderThickness="0,0,2,0" >
                    <Image Source="{Binding Path=Data, Converter={StaticResource ImageSourceConverter}}" RenderOptions.BitmapScalingMode="Fant" Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView} },Path=ActualHeight, Converter={StaticResource HeightMinusConverter}}" />
                </Border>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

Таким образом, у связанного элемента CurrentProductsImages есть переменная с именем «DisplayOrder» Я хочу заказать Listview с этим значением, но не могу найти способ. Большинство вертикальных методов сортировки используют вид сетки, но поскольку шахты расположены горизонтально, я не могу заставить его работать?

Я могу отсортировать объект до привязки, но я хотел, чтобы он был больше на стороне WPF. есть идеи? Большое спасибо

1 Ответ

1 голос
/ 17 мая 2019

Способ сортировки xaml заключается в использовании источника collectionview.У него есть описания сортировки.

<CollectionViewSource x:Key="SortedItems" Source="{Binding UnsortedItems}" >
    <CollectionViewSource.SortDescriptions>
       <scm:SortDescription PropertyName="Blaa" />
       <scm:SortDescription PropertyName="Blaa2" />
    </CollectionViewSource.SortDescriptions>
</CollectionViewSource>

Проблема в том, что вы не можете связать эти описания сортировки.

Возможно, вы могли бы что-то сделать с поведением или пользовательским каркасным элементом.Это позволило бы вам написать кучу кода и сделать это в пользовательском интерфейсе.Это было бы сложнее, чем выполнять сортировку в модели представления.

Я предлагаю вам вместо этого добавить коллекционное представление в модель представления и обработать сортировку в коде.Вы можете определить собственного icomparer для использования или просто очистить и добавить описания сортировки.

Или сортировать с помощью Linq, если это лучше подходит для вашего требования / набора навыков.

Примеры сортировки (и выполнения других задач) с коллекциями:

https://social.technet.microsoft.com/wiki/contents/articles/26673.wpf-collectionview-tips.aspx

Существует рабочий образец, связанный.

По существу, с наблюдаемой коллекцией людей, это связано с использованием:

 public CollectionView PeopleView {get; set;}

Настройка:

 CollectionViewSource cvs = new CollectionViewSource();
 cvs.Source = People;
 PeopleView = (CollectionView)cvs.View;

Сортировка:

PeopleView.SortDescriptions.Clear();
PeopleView.SortDescriptions.Add(new SortDescription("OrganizationLevel", ListSortDirection.Ascending));
PeopleView.SortDescriptions.Add(new SortDescription("LastName", ListSortDirection.Ascending));
PeopleView.SortDescriptions.Add(new SortDescription("FirstName", ListSortDirection.Ascending));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...