【发布时间】:2019-08-15 05:15:23
【问题描述】:
我正在用 Xamarin Forms 编写一个适用于 Android 的应用程序。当用户单击“EditList”按钮(中间一个)时,我想将用户从一个页面导航到另一个页面,但同时我想传递一个特定类型的参数:“ShoppingList”,我从 ListView 的 ItemSelected事件,以便在下一页上显示其内容。
问题是 - 我可以获得该值的唯一方法是单击列表视图中的项目。如何从按钮中获取该列表视图项目的点击值,而无需事先点击列表视图项目?
外观
这里也是参考页面。 ListView with ShoppingList items
我正在使用 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>
【问题讨论】:
标签: c# xamarin.forms