【问题标题】:UWP Gridview fixed item positionUWP Gridview 固定项目位置
【发布时间】:2020-03-30 09:15:24
【问题描述】:

在我的 UWP 应用中,我有这个启用了项目重新排序的网格视图

        <GridView Name="ModulesGridView" CanReorderItems="True" ItemsSource="{x:Bind DataSource, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
 IsItemClickEnabled="False"  IsHoldingEnabled="False" IsTapEnabled="False" AllowDrop="True" Drop="Drop_Module"
 DragOver="Grid_DragOver" ItemTemplateSelector="{StaticResource MyDataTemplateSelector}">           
        </GridView>

并且我希望此网格视图中的项目始终位于末尾,无论我将如何重新排序这些项目。它总是在最后。 有什么方法可以实现吗?

【问题讨论】:

    标签: c# gridview uwp


    【解决方案1】:

    GridView 没有原生 API 来支持此功能,但我们可以通过其他方式实现目标。

    为简单起见,我们假设您的DataSourceObservableCollection&lt;int&gt; 类型。如果你的实际类型比 int 更复杂,你需要提前重写这个类的EqualTo 方法。

    1.允许CanDragItems并添加相应的事件

    <GridView ...
              CanDragItems="True"
              DragItemsCompleted="ModulesGridView_DragItemsCompleted">
    </GridView>
    

    2。加载数据集合时提前提取最后一项

    private int LastItem = 0;
    
    ...
    
    for (int i = 0; i < 20; i++)
    {
        DataSource.Add(i);
    }
    LastItem = DataSource.Last();
    

    3.检查DragItemsCompleted事件中最后一项的位置

    private void ModulesGridView_DragItemsCompleted(ListViewBase sender, DragItemsCompletedEventArgs args)
    {
        int index = DataSource.IndexOf(LastItem);
        if (index != DataSource.Count - 1)
        {
            DataSource.Move(index, DataSource.Count - 1);
        }
    }
    

    换句话说,我们不干扰用户重新排序物品的过程,但是在重新排序之后,我们检测最后一个物品的位置。如果它不是在最后,我们再次移动它。

    谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 2016-09-07
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      相关资源
      最近更新 更多