C# Xamarin.forms如何在列表中显示相邻的项目
我目前正在使用Xamarin.Forms和.Net标准共享策略开发一个应用程序。一切都在共享项目中完成。(没有设备指定设计) 我尝试将对象列表绑定到listview。我已经用C# Xamarin.forms如何在列表中显示相邻的项目,c#,xaml,xamarin,xamarin.forms,.net-standard-2.0,C#,Xaml,Xamarin,Xamarin.forms,.net Standard 2.0,我目前正在使用Xamarin.Forms和.Net标准共享策略开发一个应用程序。一切都在共享项目中完成。(没有设备指定设计) 我尝试将对象列表绑定到listview。我已经用ItemsSource=“{Binding Items}”显示/填充列表,所选项目也绑定到列表视图SelectedItem=“{Binding SelectedApp}”。 每个列表项都可视化为一个带有图像和标题的框架。 通过使用数据模板 我试图实现的是使我的listview看起来像一个“类似Google PlayStore
ItemsSource=“{Binding Items}”
显示/填充列表,所选项目也绑定到列表视图SelectedItem=“{Binding SelectedApp}”
。
每个列表项都可视化为一个带有图像和标题的框架。
通过使用数据模板
我试图实现的是使我的listview看起来像一个“类似Google PlayStore的列表”:
显示彼此相邻的项目。
当水平方向上没有剩余位置时,下一个项目将显示在下一行。该列表会自动将项目调整为可用的。
这样,当从纵向切换到横向时,列表的屏幕响应性更好
我的问题是,如何在此结构中显示列表?
然而,这将是很好的,材料设计卡设计不是这个问题的一部分
这个问题描述了一个类似于我的问题——我想成为什么样的人。
希望我开发的是Xamarin应用程序,而不是原生(java)Android应用程序:
有一个名为
FlowListView的控件(请参阅)
只需添加NuGet包并从XAML添加视图
<flv:FlowListView FlowColumnCount="3" FlowItemsSource="{Binding Items}">
<flv:FlowListView.FlowColumnTemplate>
<DataTemplate>
<StackLayout>
<Image Source="{Binding Image}" />
<Label Text="{Binding Type}" />
<Label Text="{Binding Name}" FontSize="Small" />
<local:Rating Value="{Binding Rating}" />
</StackLayout>
</DataTemplate>
</flv:FlowListView.FlowColumnTemplate>
</flv:FlowListView>
这假设我们已将x:Name=“FlowListView
添加到outFlowListView
。更好的方法是根据实际宽度计算列数,但我认为您已经掌握了要点。有一个名为FlowListView
的控件(请参阅)
只需添加NuGet包并从XAML添加视图
<flv:FlowListView FlowColumnCount="3" FlowItemsSource="{Binding Items}">
<flv:FlowListView.FlowColumnTemplate>
<DataTemplate>
<StackLayout>
<Image Source="{Binding Image}" />
<Label Text="{Binding Type}" />
<Label Text="{Binding Name}" FontSize="Small" />
<local:Rating Value="{Binding Rating}" />
</StackLayout>
</DataTemplate>
</flv:FlowListView.FlowColumnTemplate>
</flv:FlowListView>
这假设我们已经将x:Name=“FlowListView
添加到outFlowListView
。更好的方法是根据实际宽度计算列数,但我想你已经掌握了要点。我可以确认,滚动将在不添加ScrollView
的情况下工作。Paul Kertscher的建议非常有用,几乎就是我想要的,但是这个解决方案仍然存在一些问题。1.我和MVVM一起工作。listview中的selectedItem与该页面VM的对象/属性绑定。当我从FlowListView中选择一个项目时,数据绑定将不再工作。2.根据您的回答,FlowColumnCount固定为3。我想做的是,只要通过扩展窗口有足够的空间,就显示一个额外的项目(增加FlowColumnCount)。如果缩小窗口没有足够的空间,则必须减少FlowColumnCount。@约翰:关于第1点:我真的不明白,为什么数据绑定不能工作。您拥有可以绑定到VM的FlowLastTappedItem
属性。(看)@PaulKertscher:谢谢,我就快到了。第二点解决了,我使用了SelectedItem,这是错误的。当我在代码隐藏中执行您的解决方案时,一切都正常!但是,我需要尊重MVVM框架,这意味着我不应该在代码隐藏中键入代码,而应该在该页面的ViewModel(VM)中键入代码。在ViewModel中,我无法访问列表flowListView(元素名称),也无法获取页面/视图、宽度;当我能够在MVVM模式方面获得相同的结果时,没有代码落后,我的问题就真正解决了。约翰:MVVM中的虚拟机不应该对某些东西的显示方式负责(至少不应该在那么低的级别上),而应该对显示的内容负责。拥有纯粹与演示相关的代码不应该是您的虚拟机的问题,而应该是您的视图的问题。我可以确认,滚动将在不添加ScrollView
的情况下工作。Paul Kertscher的建议非常有帮助,几乎就是我想要的,但是这个解决方案仍然存在一些问题。1.我和MVVM一起工作。listview中的selectedItem与该页面VM的对象/属性绑定。当我从FlowListView中选择一个项目时,数据绑定将不再工作。2.根据您的回答,FlowColumnCount固定为3。我想做的是,只要通过扩展窗口有足够的空间,就显示一个额外的项目(增加FlowColumnCount)。如果缩小窗口没有足够的空间,则必须减少FlowColumnCount。@约翰:关于第1点:我真的不明白,为什么数据绑定不能工作。您拥有可以绑定到VM的FlowLastTappedItem
属性。(看)@PaulKertscher:谢谢,我就快到了。第二点解决了,我使用了SelectedItem,这是错误的。当我在代码隐藏中执行您的解决方案时,一切都正常!但是,我需要尊重MVVM框架,这意味着我不应该在代码隐藏中键入代码,而应该在该页面的ViewModel(VM)中键入代码。在ViewModel中,我无法访问列表flowListView(元素名称),也无法获取页面/视图、宽度;当我能够在MVVM模式方面获得相同的结果时,没有代码落后,我的问题就真正解决了。约翰:MVVM中的虚拟机不应该对某些东西的显示方式负责(至少不应该在那么低的级别上),而应该对显示的内容负责。拥有纯粹与表示相关的代码不应该是VM的问题,而应该是您的观点。