按下按钮对ListView进行排序

时间:2019-02-14 17:26:38

标签: xamarin xamarin.forms

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

<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));

当调用这些功能之一时,列表可以正确地向上或向下排序,但是当按下按钮时,列表不会自动更新为其他排序。

我在哪里弄糟?

编辑:

CommandSort代码

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日期的注册

1 个答案:

答案 0 :(得分:1)

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