从右上到左下订购ItemsControl中的项目

时间:2019-05-29 12:31:04

标签: c# wpf xaml

我正在尝试在WPF应用程序视图之一的ItemsControl中设置一个列表。

问题是我希望项目的其他顺序显示在控件中。 主教,ItemsControl从左到右,从上到下显示项目:

1  2  3  4   5   6
7  8  9  10  11  12

但是,我想以其他方式显示我的商品-从右上方到左下方-

11  9   7  5  3  1
12  10  8  6  4  2

我当前的ItemsControl是:

        Grid.Column="1"
        BorderThickness="1"
        BorderBrush="{DynamicResource WindowTitleColorBrush}">
    <ItemsControl ItemsSource="{Binding Truck.Containers}">
         <ItemsControl.ItemsPanel>
              <ItemsPanelTemplate>
                  <UniformGrid Rows="2" />
              </ItemsPanelTemplate>
          </ItemsControl.ItemsPanel>
    </ItemsControl>
</Border>

我不能只按降序重新排列列表,因为它将以12开头,以1而不是11-2结束。 还有其他方法可以按照我想要的顺序显示我的列表吗?

2 个答案:

答案 0 :(得分:0)

我认为您可以采用以下三种解决方案之一:

  1. 在View模型中根据需要订购商品

  2. 使用CollectionViewSource-在此处进行自定义订购

  3. 创建一个自定义Panel,该订单可根据需要订购商品,并将其用作ItemsPanelTemplate。要创建自定义面板,请创建一个自定义类,并继承自PanelUniformGrid。比重写两种方法:

  

MeasureOverride-确定所需的面板尺寸   根据所需的子元素大小和可用   空间。

     

ArrangeOverride-将元素排在最后   可用空间。最终大小可以小于要求的大小。

msdn link和此tutorial中有关自定义面板的更多信息。

您还可以查看UniformGrid source code on msdn

答案 1 :(得分:0)

仅建议在代码中执行此操作:将列表拆分为偶数或奇数,通过降序对这两个列表进行排序,然后将前两个列表中的元素添加到绑定到ItemsControl的第三个列表中!