c# - 如何从按钮的 Clicked 事件导航到另一个页面并将列表视图的 ItemSelected 作为参数传递?
问题描述
我正在用 Xamarin Forms 为 Android 编写一个应用程序。当用户单击“EditList”按钮(中间一个)时,我想将用户从一个页面导航到另一个页面,但同时我想传递一个特定类型的参数:“ShoppingList”,我从 ListView 的 ItemSelected事件,以便在下一页上显示其内容。
问题是 - 我可以获得该值的唯一方法是单击列表视图中的项目。如何从按钮中获取该列表视图项目的点击值,而无需事先单击列表视图项目?
它看起来如何
另外这里的页面供参考。 带有 ShoppingList 项目的 ListView
我正在使用 Navigation.PushAsync(),我还传递了一个 ShoppingListDetailViewModel 并从 SelectedItem 注入项目
OnItemSelected
这是 ListView 的 ItemSelected 事件的 OnItemSelected 事件处理程序:
async void OnItemSelected(object sender, SelectedItemChangedEventArgs args)
{
var item = args.SelectedItem as ShoppingList;
if (item == null)
return;
await Navigation.PushAsync(new ShoppingListDetailPage(new ShoppingListDetailViewModel(item)));
// Manually deselect item.
ItemsListView.SelectedItem = null;
}
(ItemsListView 是我在 XAML 中定义的 ListView 的名称,如 x:Name="ItemsListView")
我试图制作 Command ,它可能会通过 Command 参数传递一个购物清单对象,但我对这一切感到困惑,我认为必须有更简单的解决方案来做到这一点,而我只是看不到。
XAML
这是我的 XAML 页面,其中包含 ListView 和按钮:
<ListView x:Name="ItemsListView"
ItemsSource="{Binding ShoppingLists}"
RefreshCommand="{Binding LoadItemsCommand}"
IsPullToRefreshEnabled="true"
IsRefreshing="{Binding IsBusy, Mode=OneWay}"
CachingStrategy="RecycleElement"
ItemSelected="OnItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Padding="10">
<Label Text="{Binding Name}"
HorizontalOptions="Center"/>
<Label Text="{Binding BodyHighlight}"
HorizontalOptions="Center" />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ImageButton Grid.Column="0"
Source="delete.png">
</ImageButton>
<ImageButton
Grid.Column="1"
Source="edit.png"
Clicked="EditListButton_Clicked">
</ImageButton>
<ImageButton
Grid.Column="2"
Source="send.png" >
</ImageButton>
</Grid>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
解决方案
将列表中当前项的值分配给 Button 的 CommandParameter
<ImageButton Grid.Column="1" Source="edit.png"
Clicked="EditListButton_Clicked" CommandParameter="{Binding .}" />
然后在你的处理程序中
public void EditListButton_Clicked(object sender, EventArgs args)
{
ImageButton btn = (ImageButton)sender;
var item = (ShoppingList)btn.CommandParameter;
if (item == null) return;
await Navigation.PushAsync(new ShoppingListDetailPage(new ShoppingListDetailViewModel(item)));
}
推荐阅读
- mysql - MySQL - 退出存储过程
- elasticsearch - 停止 Logstash 时 Elasticsearch 已创建索引
- java - 如何在 if 块内重构 Single/Observable 的公共映射
- gnuradio - GNU Radio BPSK BER 模拟:RRC 脉冲幅度归一化
- python - 正则表达式在 python 3.x 中提取日期
- sql - SQL 语句与“IN”一起使用,但是当尝试使用“NOT IN”获得相反(反转)的结果时,它会输出所有内容
- python - scikit-learn PCA方法中百分比值的解释
- sql - oracle查询找到关于jobrole的最高薪水
- scala - spark sql udf 强制转换返回值
- java - Eclipse 上单独文件中的 Java 文档