UWP Gridview фиксированная позиция позиции - PullRequest
0 голосов
/ 28 марта 2020

В моем приложении 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>

, и я хочу, чтобы элемент в этом виде сетки всегда был в конце, независимо от того, как я буду переупорядочивать элементы , Это будет всегда в конце. Есть ли способ добиться этого?

1 Ответ

1 голос
/ 30 марта 2020

GridView не имеет собственного API для поддержки этой функции, но мы можем достичь цели другими способами.

Для простоты мы предполагаем, что ваш DataSource имеет тип ObservableCollection<int>. Если ваш фактический тип более сложный, чем 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);
    }
}

Другими словами, мы не вмешиваемся в процесс изменения порядка элементов пользователем, но после изменения порядка мы обнаруживаем позиция последнего элемента. Если это не конец, мы перемещаем его снова.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...