【问题标题】:Get ListView item ID and launch method on items listitem's label Xamarin.Forms在项目列表项的标签 Xamarin.Forms 上获取 ListView 项目 ID 和启动方法
【发布时间】:2019-02-16 12:02:05
【问题描述】:

我有一个ListView,在ViewCell 中有标签和图像。

我已经设置了 ListViewSelectedItem 绑定来获取项目的 ID,如果用户选择项目的图像部分,则将其用于一种方法。

我希望在用户点击项目标签时启动另一种方法,如下所示:

<TapGestureRecognizer Command="{Binding SomeCommand}" NumberOfTapsRequired="1"/>

我是否应该按照与SelectedItem 相同的程序获取 ID?

SelectedItem绑定我喜欢这样:

async void ShowDetails(int selectedItemID)
{
    await _navigation.PushAsync(new DetailsPage(selectedItemID));
}

Items _selectedItem;
public Items SelectedItem
{
    get => _selectedItem;
    set
    {
        if (value != null)
        {
            _selectedItem = value;
            NotifyPropertyChanged("SelectedItem");
            ShowDetails(value.Id);
        }
    }
}

简而言之,我希望用户在单击标签时获取项目 ID 并启动一种方法,并在单击图像时获取项目 ID 并启动另一种方法。

【问题讨论】:

    标签: c# android listview xamarin.forms binding


    【解决方案1】:

    尝试在您的TapGestureRecogniser 中使用CommandParameter。如果您不知道如何处理CommandParameter,请通读docs 或查看此article

    我假设你可以这样做:

    <TapGestureRecognizer Command="{Binding SomeCommand}" 
                          CommandParameter="{Binding .}" 
                          NumberOfTapsRequired="1" />
    

    {Binding .} 中的点,表示父级BindingContext 将传递给CommandParameter

    注意:{Binding .} 中的. 是可选的,您可以只写{Binding},它也应该可以工作

    编辑如何在代码中处理CommandParameter

    网上有很多例子,你可以看看这些docs 来了解一下。在您的情况下,参数将是 int,因此代码可能如下所示:

    SomeCommand = new Command<int>((int id) =>
    {
        // add command handler code here
    });
    

    【讨论】:

    • 这是否真的可以访问相应的项目,以便我可以获取项目的 ID?(例如,获取对象以在方法中进一步传递 ID)
    • 我不太确定如何编写命令,以便将相应的项目 ID 传递给执行的方法。
    • 我用代码中的命令处理示例编辑了我的答案
    • 我什至不必将 Id 置于命令中。命令参数是我所需要的。谢谢
    • 一开始没有用,因为我必须将源绑定设置到页面。在此之前,该方法甚至没有启动
    猜你喜欢
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多