嵌套到ListView中的CollectionView
我已尝试在ListView中嵌套CollectionView。。。。 我能够可视化我需要的所有内容,但现在我无法在列表中单个CollectionView的单个单元格上访问单击事件。 这是我的xaml代码:嵌套到ListView中的CollectionView,listview,xamarin.forms,click,collectionview,Listview,Xamarin.forms,Click,Collectionview,我已尝试在ListView中嵌套CollectionView。。。。 我能够可视化我需要的所有内容,但现在我无法在列表中单个CollectionView的单个单元格上访问单击事件。 这是我的xaml代码: <ListView x:Name="MainListView" VerticalOptions="FillAndExpand"> <ListView.ItemTemplate> <DataTemplat
<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事件,但我不明白。。。怎样!!
要帮忙吗
我想我必须在
收藏,但我不明白。。。怎样!!要帮忙吗
我不知道你不明白哪一部分,我会告诉你我将如何使用
选择更改命令
您的集合视图
将数据源
绑定到单一列表
,因此单一列表
应该是您的模型
/视图模型
,假设它是MyViewModel
,然后在选择ChangedCommand
中,您可以在单击时获取上一个/当前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>
单声道
单机器人
单触式
单轨铁路
狒狒
卷尾猴
蓝猴
松鼠猴
嵌套ListViews是一个非常非常糟糕的想法。如何实现像Spotify或Apple Music这样的视图,在一个多行页面中的一行上显示更多元素?感谢您的回复,我知道之后的逻辑。。。但问题是CollectionView_SelectionChanged没有启动。。。可能是因为它是DataTemplate中的一个嵌套对象……好吧,让我做一些测试。@Blasco73它在我这边起作用,你能分享你的singleList的更多代码吗?@Blasco73好吧,你终于解决了它!在我解释如何使用SelectionChangedCommand时,请您记下我的答案好吗。代码也可以工作。然后我可以在问题解决后结束这个问题。@Blasco73没关系,我们在这里帮助您解决Xamarin表单问题。是的,CollectionView目前是实验性的,如中所述。