分组的Xamarin Listview不会滚动

时间:2018-05-14 09:21:36

标签: c# xaml listview scroll xamarin.forms

我正在制作我的第一个Xamarin应用。我想用分组制作一个列表视图并且它成功了。我唯一的问题是它不会滚动。我在另一个页面上的其他列表视图滚动没有问题,但我的分组视图与分组不会这样做。我在Android模拟器上尝试了这个,就像在我的Android手机上一样(我没有Mac上的东西或在iOS上测试的东西),并且它不会在其中任何一个上滚动。我查了一下,但是很多人把listview放在了一个滚动视图中,我没有这样做。

这是我的XAML代码:

 <StackLayout Margin="10" Orientation="Vertical">

        <Label Text="{Binding Title}" FontAttributes="Bold" 
               FontSize="20" HorizontalOptions="CenterAndExpand" />
        <Label Text="{Binding Subtitle}" FontAttributes="Italic" 
               FontSize="15" HorizontalOptions="CenterAndExpand" />

        <ListView HasUnevenRows="True" SeparatorColor="Accent" 
                  VerticalOptions="FillAndExpand" IsEnabled="False"
                  IsGroupingEnabled="True" GroupDisplayBinding="{Binding Key}" 
                  ItemsSource="{Binding ScansGroup}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Spacing="4">
                            <StackLayout Orientation="Horizontal" Margin="10,7,10,1">
                                <Label Text="{Binding Location, StringFormat='{0}'}" 
                                       FontAttributes="Bold" FontSize="16" />
                                <Label Text="{Binding DateTime, StringFormat='{0:dd/MM/y HH:mm}'}"
                                        HorizontalOptions="EndAndExpand" />
                            </StackLayout>
                            <StackLayout Orientation="Horizontal">
                                <Label Text="{Binding ElapsedTimeOnLocation}" 
                                       HorizontalOptions="Start"
                                        Margin="10,0,10,7" />
                            </StackLayout>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>

我把它放在一个MVVM结构中,然后我用一个MVVM帮助器进行分组https://channel9.msdn.com/Shows/XamarinShow/The-Xamarin-Show-12-MVVM-Helpers。 我的代码背后的代码用于分组如下:

     public ObservableRangeCollection<Grouping<string, ScanViewModel>> ScansGroup { get; } = 
new ObservableRangeCollection<Grouping<string, ScanViewModel>>();

    void Group()
    {
         var grouped = from scan in Scans
                       group scan by scan.Day into scanGroup
                       select new Grouping<string, ScanViewModel>(scanGroup.Key, scanGroup);

         ScansGroup.ReplaceRange(grouped);

    }

分组显示完美且列表也是如此。唯一的问题是 我无法滚动。有人能帮助我吗?

2 个答案:

答案 0 :(得分:-1)

您没有为该组添加模板。在<ListView>

中添加此内容
<ListView.GroupHeaderTemplate >
    <DataTemplate >
        <ViewCell Height="28" >
        <Label Text="{Binding GroupName}" VerticalTextAlignment="Center" HorizontalOptions="Start" />
        </ViewCell>
    </DataTemplate>
</ListView.GroupHeaderTemplate>

此外,在代码折弯或ViewModel中,您需要绑定到列表中所需项目的组类,例如:

public class GroupDetails : ObservableCollection<SomeItemsToShow>
{
    public string GroupName { get; set; }
}

查看此示例以获取更多详细信息: https://xamarinhelp.com/xamarin-forms-listview-grouping/

答案 1 :(得分:-1)

我已经弄明白了。你的分组没有错。在您的代码中,您将IsEnabled="False"设置为ListView。它使得listview的滚动功能只需从ListView中的已启用项目中拖动即可处理,即使这样,滚动就像被贬低并且用户体验非常糟糕。

只需将ListView设置为:

<ListView HasUnevenRows="True" 
          SeparatorColor="Accent" 
          VerticalOptions="FillAndExpand" 
          IsEnabled="True"
          IsGroupingEnabled="True" 
          GroupDisplayBinding="{Binding Key}" 
          ItemsSource="{Binding ScansGroup}">
    ...
</ListView>

我无法告诉您它是否是以这种方式设计的,或者它是否是一个错误,但它是您问题的原因。

您可能已经这样做以处理一些不需要的行为。如果是这样,请告诉我们您对此IsEnabled="False"的具体意图,然后我们就能为您提供帮助。

我希望它可以帮到你。