C# 具有分组的Xamarin Listview将不会滚动

C# 具有分组的Xamarin Listview将不会滚动,c#,xaml,listview,scroll,xamarin.forms,C#,Xaml,Listview,Scroll,Xamarin.forms,我正在开发我的第一个Xamarin应用程序。我想创建一个带有分组的listview,它成功了。我唯一的问题是它不会滚动。我在另一个页面上的另一个listview滚动时没有问题,但我的分组listview不会这样做。我在Android模拟器上尝试了这两种方法,就像在我的Android手机上一样,我没有macbook或其他东西可以在iOS上测试,而且它们都不会滚动。我查了一下,但是很多人把listview放在了scrollview中,我没有这样做 这是我的XAML代码: <StackLayo

我正在开发我的第一个Xamarin应用程序。我想创建一个带有分组的listview,它成功了。我唯一的问题是它不会滚动。我在另一个页面上的另一个listview滚动时没有问题,但我的分组listview不会这样做。我在Android模拟器上尝试了这两种方法,就像在我的Android手机上一样,我没有macbook或其他东西可以在iOS上测试,而且它们都不会滚动。我查了一下,但是很多人把listview放在了scrollview中,我没有这样做

这是我的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助手进行分组。 我的分组代码如下所示:

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

    }
分组显示得很好,列表也显示得很好。唯一的问题是
我不能滚动。有人能帮我吗?

您没有为组添加模板。将此添加到

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

public class GroupDetails : ObservableCollection<SomeItemsToShow>
{
    public string GroupName { get; set; }
}
查看此示例了解更多详细信息:
我已经想明白了。你的分组没有问题。在代码中,您将IsEnabled=False设置为ListView。它使listview的滚动功能能够在您从listview中的已启用项拖动时得到处理,即使如此,滚动还是被轻视了,用户体验非常差

只需按如下方式设置ListView:

<ListView HasUnevenRows="True" 
          SeparatorColor="Accent" 
          VerticalOptions="FillAndExpand" 
          IsEnabled="True"
          IsGroupingEnabled="True" 
          GroupDisplayBinding="{Binding Key}" 
          ItemsSource="{Binding ScansGroup}">
    ...
</ListView>
我不能告诉你它是否是这样设计的,或者它是否是一个bug,但这是你问题的原因

你这么做很可能是为了处理一些不想要的行为。如果是这样,请让我们知道您对此IsEnabled=False的具体意图,然后我们将能够帮助您解决此问题


我希望它能帮助你。

@Diegrafaelsouza显然我在周一早上犯了一个错误,粘贴了错误的代码。谢谢你指出这一点。这个问题现在有了正确的代码。我很清楚这一点。当并非所有项目都适合屏幕时,我希望能够滚动,但事实并非如此。我编辑了我的问题并添加了代码。我使用MVVM助手进行分组,并根据我现在的问题中包含的视频进行分组。似乎GroupHeaderTemplate在该视频中不是真的必要?如果我试图实现你的代码,它会给我错误,并且不能让它正常工作。我的问题不在于我的分组没有显示,当列表不适合我的屏幕时,我无法滚动列表。您是否检查了提供的链接以了解更多详细信息?这实际上是官方的做事方式。最好使用这种方法,而不是每次都需要更新和支持原始版本的非官方MVVM框架。@Marijke,我没有看你用来创建列表的视频,但我没有看到自定义组的选项,代码看起来很复杂,就是这样!我禁用了它,因为我不希望它是一个可点击的列表。我没有想到它也会禁用滚动。我不认为会有一个简单的解决办法,使字段不可点击,但列表保持可滚动?@Marijke不幸的是,ListView没有“IsSelectable”属性。如果您订阅ItemSelected事件并像set-ListViewsender?“忽略”事件上的选择,该怎么办;总是吗?谢谢!好主意!
<ListView HasUnevenRows="True" 
          SeparatorColor="Accent" 
          VerticalOptions="FillAndExpand" 
          IsEnabled="True"
          IsGroupingEnabled="True" 
          GroupDisplayBinding="{Binding Key}" 
          ItemsSource="{Binding ScansGroup}">
    ...
</ListView>