【问题标题】:Sort ListView by pressing a button按按钮对 ListView 进行排序
【发布时间】:2019-02-14 17:26:38
【问题描述】:

我有一个 ListView 并希望对其进行上下排序。这是xml

<ListView x:Name="ListRegister" ItemsSource="{Binding Registrations}" HasUnevenRows="True" SelectionMode="Single">
            <ListView.Behaviors>
                <b:EventToCommandBehavior EventName="ItemTapped" Command="{Binding CommandGoDetail}" EventArgsParameterPath="Item" />
            </ListView.Behaviors>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout>
                            <Frame >
                                <StackLayout>
                                   <Label Text="{Binding Date}" Style="{StaticResource registerItemDateText}"/>
                                </StackLayout>
                            </Frame>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

以及“按钮”(在我的 SortUp() 和 sortDown() 函数之间交替)。该按钮将文本更改为“向上”和“向下”,因此我知道它可以在屏幕上使用。

<TapGestureRecognizer Command="{Binding CommandSort}"/>

这些功能似乎有效

Registrations.Sort((x, y) => DateTime.Compare(y.Date, x.Date));
Registrations.Sort((x, y) => DateTime.Compare(x.Date, y.Date));

当调用其中一个函数时,列表正确地向上或向下排序,但当按下按钮时,列表不会自行更新为另一个排序。

我在哪里搞砸了?

编辑:

命令排序代码

private void HandleSort(Registration obj)
        {
            if(SortRecent)
            {
                SortRecent = false;
                SortText = "Plus ancien";
                SortImageSource = "lightDownArrow";
                SortDown();
            }
            else
            {
                SortRecent = true;
                SortText = "Plus récent";
                SortImageSource = "lightUpArrow";
                SortUp();
            }
        }

注册的类型为:

List<Registration> Registrations

具有字符串名称和 DateTime 日期的注册

【问题讨论】:

  • 什么是注册类型? CommandSort 的代码在哪里?
  • @Jason 我更新了,sortUp 和 sortDown 是两个 Registrations.Sort

标签: xamarin xamarin.forms


【解决方案1】:

您需要检查什么类型的数据是注册。它必须是一个Observable Collection,以便通知 UI 对模型所做的更改。如果没有,您将需要手动更新列表视图以反映对模型所做的更改,在本例中为新的排序方向。你可以使用: ListView.BeginRefresh(); &amp; ListView.EndRefresh(); 强制更新列表视图。但强烈建议将您的列表更改为可观察的集合。

【讨论】:

  • 确实,然后我开始做: Registrations = new ObservableCollection(Registrations.OrderBy(i => i.Date));和 Registrations = new ObservableCollection(Registrations.Reverse());
  • 这是要走的路
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
  • 2013-11-09
  • 2012-03-10
  • 2015-02-27
相关资源
最近更新 更多