【问题标题】:CollectionView nested into a ListViewCollectionView 嵌套到 ListView
【发布时间】:2019-10-10 09:32:44
【问题描述】:

我尝试将 CollectionView 嵌套在 ListView 中...... 我能够可视化我需要的所有内容,但现在我无法到达列表内单个 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>

我想我必须在 Collection 中使用 SelectionChangedCommand 事件,但我不明白......如何! 有什么帮助吗?

【问题讨论】:

  • 嵌套 ListViews 是一个非常非常糟糕的主意
  • 如何实现像 Spotify 或 Apple Music 这样的视图,在多行页面的单行上显示更多元素?

标签: listview xamarin.forms click collectionview


【解决方案1】:

我想我必须在 收藏,但我不明白......如何!有什么帮助吗?

不知道你不明白哪一部分,我会告诉你我将如何使用 SelectionChangedCommand.

你的collectionView绑定dataSourcesingleList,所以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>

【讨论】:

  • 感谢您的回复,我知道之后的逻辑......但问题是 CollectionView_SelectionChanged 没有触发......可能是因为是 DataTemplate 内的嵌套对象......
  • 好吧,让我做一些测试。
  • @Blasco73 它在我这边工作,你能分享更多你的singleList的代码吗?
  • @Blasco73 好吧,你终于解决了!您是否介意在我解释如何使用 SelectionChangedCommand 时标记我的答案。并且代码也有效。然后我可以在解决这个问题后关闭这个问题。
  • @Blasco73 没关系,我们在这里帮助您解决 Xamarin 表单问题。是的,如 document 所述,CollectionView 目前处于试验阶段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
  • 2017-01-17
  • 1970-01-01
  • 2018-07-05
  • 2019-05-20
相关资源
最近更新 更多