CollectionView, вложенный в ListView - PullRequest
0 голосов
/ 10 октября 2019

Я пытался вложить CollectionView в ListView .... Я смог визуализировать все, что мне нужно, но теперь я не могу достичь события click в одной ячейке одного CollectionView внутри списка. Это мой код xaml:

  <ListView  x:Name="MainListView" VerticalOptions="FillAndExpand">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <CollectionView Margin="10" SelectionMode="Single" ItemsSource="{Binding singleList}" FlowDirection="LeftToRight" ItemsLayout="HorizontalList">
                            <CollectionView.ItemTemplate>
                                <DataTemplate>
                                    <Grid Padding="10" Margin="10">
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="Auto" />
                                            <RowDefinition Height="Auto" />
                                            <RowDefinition Height="Auto" />
                                        </Grid.RowDefinitions>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="Auto" />
                                            <ColumnDefinition Width="Auto" />
                                            <ColumnDefinition Width="Auto" />
                                        </Grid.ColumnDefinitions>
                                        <Frame BackgroundColor="White" Grid.RowSpan="2" CornerRadius="5" Padding="10">
                                            <Image Source="{Binding ImageName}" Aspect="AspectFill" HeightRequest="100" WidthRequest="100" />
                                        </Frame>
                                        <Label Grid.Column="1" Text="{Binding Name}" FontAttributes="Bold" />
                                        <Label Grid.Row="1" Grid.Column="1" Text="{Binding Date}" VerticalOptions="End" />
                                        <Image Grid.Row="2" Grid.Column="0" Source="shop" HeightRequest="20" WidthRequest="20" />
                                    </Grid>
                                </DataTemplate>
                            </CollectionView.ItemTemplate>
                        </CollectionView>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

Полагаю, мне нужно использовать событие SelectionChangedCommand внутри Коллекции, но я не понимаю ... как !! Некоторая помощь?

1 Ответ

1 голос
/ 11 октября 2019

Полагаю, мне нужно использовать событие SelectionChangedCommand внутри Коллекции, но я не понимаю ... как !! Некоторая помощь?

Не знаете, какую часть вы не понимаете, я покажу вам, как бы я использовал SelectionChangedCommand.

Ваше collectionView связывание dataSource для singleList, поэтому singleList должен быть списком ваших model / ViewModel, скажем, MyViewModel, тогда в SelectionChangedCommand вы можете получить предыдущий / текущий MyViewModel, который вы нажимаете:

private void CollectionView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    myViewModel previousModel = e.PreviousSelection.FirstOrDefault() as myViewModel;

    myViewModel currentModel = e.PreviousSelection.FirstOrDefault() as myViewModel;

    string previous = (e.PreviousSelection.FirstOrDefault() as myViewModel)?.Name;
    string current = (e.CurrentSelection.FirstOrDefault() as myViewModel)?.Name;

    //perform your own actions.
}

Обновление, код в моем xaml:

<ListView  x:Name="MainListView" VerticalOptions="FillAndExpand" HasUnevenRows="True">

    <ListView.ItemsSource>
        <x:Array Type="{x:Type x:String}">
            <x:String>mono</x:String>
            <x:String>monodroid</x:String>
            <x:String>monotouch</x:String>
            <x:String>monorail</x:String>
        </x:Array>
    </ListView.ItemsSource>

    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <CollectionView Margin="10" SelectionMode="Single" SelectionChanged="CollectionView_SelectionChanged" FlowDirection="LeftToRight" ItemsLayout="HorizontalList">

                    <CollectionView.ItemsSource>
                        <x:Array Type="{x:Type x:String}">
                            <x:String>Baboon</x:String>
                            <x:String>Capuchin Monkey</x:String>
                            <x:String>Blue Monkey</x:String>
                            <x:String>Squirrel Monkey</x:String>
                        </x:Array>
                    </CollectionView.ItemsSource>

                    <CollectionView.ItemTemplate>
                        <DataTemplate>
                            <Grid Padding="10" Margin="10">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto" />
                                    <RowDefinition Height="Auto" />
                                    <RowDefinition Height="Auto" />
                                </Grid.RowDefinitions>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="Auto" />
                                </Grid.ColumnDefinitions>
                                <Frame BackgroundColor="White" Grid.RowSpan="2" CornerRadius="5" Padding="10">
                                    <Image Source="Binding ImageName" Aspect="AspectFill" HeightRequest="100" WidthRequest="100" />
                                </Frame>
                                <Label Grid.Column="1" Text="Binding Name" FontAttributes="Bold" />
                                <Label Grid.Row="1" Grid.Column="1" Text="Binding Date" VerticalOptions="End" />
                                <Image Grid.Row="2" Grid.Column="0" Source="shop" HeightRequest="20" WidthRequest="20" />
                            </Grid>
                        </DataTemplate>
                    </CollectionView.ItemTemplate>
                </CollectionView>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
...