Xamarin Listview с группировкой не будет прокручиваться - PullRequest
0 голосов
/ 14 мая 2018

Я работаю над своим первым приложением Xamarin.Я хочу сделать просмотр списка с группировкой, и это удалось.Единственная проблема у меня в том, что она не будет прокручиваться.Мой другой просмотр списка на другой странице прокручивается без проблем, но мой просмотр списка с группировкой этого не сделает.Я попробовал это как на симуляторе Android, так и на моем телефоне Android (у меня нет macbook или чего-то, что можно протестировать на iOS), и он не прокручивается ни на одном из них.Я посмотрел его, но многие люди помещали просмотр списка в просмотр прокрутки, а я этого не делал.

Это мой код 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 голосов
/ 15 мая 2018

Я понял это.Там нет ничего плохого в вашей группировке.В вашем коде вы устанавливаете IsEnabled="False" на ListView.Это позволяет обрабатывать прокрутку списка, просто перетаскивая ее из включенного элемента в ListView, и даже при этом прокрутка выглядит как приуменьшенная и с очень плохим пользовательским интерфейсом.

Просто установите ListView вот так:

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

Я не могу сказать вам, был ли он разработан таким образом, или это ошибка, но это причина вашей проблемы.

Вероятно, вы сделали это, чтобы справиться с нежелательным поведением.Если это так, дайте нам знать, что конкретно вы намерены сделать с этим IsEnabled="False", тогда мы сможем вам в этом помочь.

Надеюсь, это поможет вам.

0 голосов
/ 14 мая 2018

Вы не добавили шаблон для группы. Добавьте это в <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/

...