在ListView.ItemSource中点按发射命令。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在ListView.ItemSource中点按发射命令。相关的知识,希望对你有一定的参考价值。

在一个Xamarin项目中,我在一个叫作 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>

这些产生了这个列表。

enter image description here

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

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

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

点击其中一个项目就会打开一个相应的页面。我想让注销链接触发一个命令,而不是打开一个页面。我如何实现这个目标?

答案

你可以在你的网格中添加Tapped手势识别器。

<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模型中添加一个独特的属性,并为每个项目设置。

另一答案
public partial class MainPage : MasterDetailPage
{
    public MainPage ()
    {

        masterPage.listView.ItemSelected += OnItemSelected;
    }

    void OnItemSelected (object sender, SelectedItemChangedEventArgs e)
    {
        var item = e.SelectedItem as MasterPageItem;
        if (item != null) {

            // Check here if is the logout link that is clicked and perform the required a action

        }
    }
}

以上是关于在ListView.ItemSource中点按发射命令。的主要内容,如果未能解决你的问题,请参考以下文章

更新 Listview itemsource 在 Xamarin 表单中清除其中的单选按钮控件

更新 Listview itemsource 清除 Xamarin Forms 中的单选按钮

Xamarin.Forms:获取列表视图的所有单元格/项目

在更新绑定源期间冻结 wpf 应用程序

ACM_折线中点

()是指分布数列中总体各单位标志值按大小顺序排列.处在中点位次的标志值A算术平均