Xamarin.Forms 如何将数据从 CollectionView 传输到不同的视图?
Posted
技术标签:
【中文标题】Xamarin.Forms 如何将数据从 CollectionView 传输到不同的视图?【英文标题】:Xamarin.Forms how to transfer data from CollectionView to a different view? 【发布时间】:2022-01-08 06:57:14 【问题描述】:我正在开发一个 xamarin 中的小项目,我编写了一个代码来在集合视图中显示我的项目。结果很好,但是当我单击加号按钮将其添加到我的订单后,我无法将项目转移到其他视图,我无法使用 get set 获取数据,请帮助。这是我的代码:
xaml
<ContentPage.Content>
<StackLayout>
<Frame BackgroundColor="AppThemeBinding Light=#F7F7F7, Dark=#191919"
Padding="0, 15" CornerRadius="0" HasShadow="False">
<StackLayout Orientation="Horizontal" VerticalOptions="Center" HorizontalOptions="Center" Spacing="10">
<Image Source="breakfast" HeightRequest="50"/>
<Label Text="Breakfast" HorizontalTextAlignment="Center" VerticalTextAlignment="Center"
TextColor="AppThemeBinding Light=Black, Dark=White" FontSize="30" FontAttributes="Bold"/>
</StackLayout>
</Frame>
<StackLayout Padding="20" BackgroundColor="AppThemeBinding Light=White, Dark=Black" Spacing="50">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<CollectionView ItemsSource="Binding Orders">
<CollectionView.ItemsLayout>
<GridItemsLayout Orientation="Vertical" VerticalItemSpacing="30"/>
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<Image Source="Binding ImageURL"
WidthRequest="50" HeightRequest="50"
Grid.Column="0"/>
<StackLayout Orientation="Vertical" Grid.Column="1">
<Label x:Name="orderName" Text="Binding OrderName" FontSize="Title">
<Label.GestureRecognizers>
<TapGestureRecognizer Tapped="AddOrder" />
</Label.GestureRecognizers>
</Label>
<Label Text="Binding Price, StringFormat='0$'" FontSize="Subtitle"/>
</StackLayout>
<ImageButton Grid.Column="2"
Source="plus" HeightRequest="50" Clicked="AddOrder"/>
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</Grid>
<StackLayout Padding="0, 120, 0, 0">
<ImageButton Source="back" HorizontalOptions="Center"
HeightRequest="60" Clicked="Back"/>
</StackLayout>
</StackLayout>
</StackLayout>
</ContentPage.Content>
这是用户界面https://i.stack.imgur.com/QR133.png
之后我也尝试用 x:Name="addOrder" 分配 ImageButton 但我不能在 .cs 文件中使用它,
cs 文件:
public partial class Breakfast : ContentPage
public Breakfast()
InitializeComponent();
void Back(object sender, EventArgs args)
Application.Current.MainPage = new Main();
async void AddOrder(object sender, EventArgs args)
await this.DisplayToastAsync("added to orders", 3000);
按下加号按钮后,它正在运行 AddOrder 函数,因为 DisplayToastAsync(或弹出窗口)正在显示,没有问题,问题是如何将列表项移动到 我的订单 视图?
感谢所有答案和 cmets! ????
【问题讨论】:
" 我无法将项目转移到其他视图,我无法使用 get set 获取数据" 请添加以质疑您尝试的确切代码,并且编译器错误是什么。 (您无法传输项目,但有一种方法可以传输项目的文本 - 只需查看您所做的确切操作即可。) Googlesite:***.com xamarin forms transfer data to another view
- 这些对你有帮助吗?
为什么有 GestureRecognizer 和 ImageButton?为什么不使用 CollectionView 内置的 Selected 机制呢?你的问题真的是“我如何确定哪个项目被点击了?”
@ToolmakerSteve 我所做的只是为 ImageButton 分配 x:Name="buttonAdd" ,当我尝试使用该名称时,它无法识别名为“buttonAdd”的变量
@Jason 嘿,伙计,感谢您的回复,但如果您能够提供有关 Selected 机制的任何详细信息,它真的会有所帮助,我知道我可能听起来很菜鸟,但我参加了一门课程一个新手,所以我正在努力学习:\
【参考方案1】:
你可以这样做
async void AddOrder(object sender, EventArgs args)
var btn = (ImageButton)sender;
var item = (MyClassName)btn.BindingContext;
// navigate to the next page and pass item on the constructor
Navigation.PushAsync(new MyNextPage(item));
【讨论】:
以上是关于Xamarin.Forms 如何将数据从 CollectionView 传输到不同的视图?的主要内容,如果未能解决你的问题,请参考以下文章
将方法从后面的代码转换为 ICommand 数据绑定 Xamarin.Forms
如何使用 Xamarin.Forms/C# 将 mp3 从 youtube 下载到 android?
如何使用 Xamarin Forms 从 HealthKit 读取 ECG 数据
如何使用 Xamarin Forms 从 HealthKit 读取 ECG 数据