首页 > 解决方案 > 在 ListView.ItemSource 中点击触发命令

问题描述

在 Xamarin 项目中,我在一个名为的视图中有这个 ListView menu.xaml

        <ListView x:Name="listView" x:FieldModifier="public">
            <ListView.ItemsSource>
                <x:Array Type="{x:Type local1:MasterPageItem}">
                    <local1:MasterPageItem Title="foo" TargetType="{x:Type local:FooPage}" />
                    <local1:MasterPageItem Title="bar" TargetType="{x:Type local:BarPage}" />
                    <local1:MasterPageItem Title="logout" TargetType="{x:Type local:LogoutPage}"  />
                </x:Array>
            </ListView.ItemsSource>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid Padding="5,10">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="30"/>
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <Image Source="{Binding IconSource}" />
                            <Label Grid.Column="1" Text="{Binding Title}" />
                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

这些产生了这个列表:

在此处输入图像描述

在我的视图模型中,我有这个命令:

class MasterViewModel : BaseViewModel
{
    public ICommand LogoutActivity { get; private set; }

    public MasterViewModel()
    {
        LogoutActivity = new Command(async () => await LogoutAsync());
    }
}

点击其中一项会打开相应的页面。我希望注销链接触发命令而不是打开页面。我该如何做到这一点?

标签: xamarinxamarin.forms

解决方案


您可以将轻按手势识别器添加到网格中:

<Grid Padding="5,10">
    <Grid.GestureRecognizers>
        <TapGestureRecognizer Command="{Binding LoginActivity}" CommandParameter="{Binding .}">
        </TapGestureRecognizer>
    </Grid.GestureRecognizers>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="30"/>
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Image Source="{Binding IconSource}" />
    <Label Grid.Column="1" Text="{Binding Title}" />
</Grid>

要对菜单项执行特定操作,您可以将唯一属性添加到 MasterPageItem 模型并为它们中的每一个进行设置。


推荐阅读