Xamarin Forms ListView 自定义单元格确定单击的列或控件?

时间:2021-06-11 17:48:08

标签: listview xamarin.forms

当我搜索这个时,我得到了很多点击,但我最终陷入了 WPF 特定的兔子洞或类似的东西。我的环境是 Xamarin Forms Android/iOS/UWP。这是一个实验/教育项目,因此对解决方案没有完全“硬”要求。 ItemTappedEventArgs 为我提供了行的内容,而不是特定的项目或列。

问题是:如果用户点击 ListView ViewCell 中的特定项目,我如何确定他们点击了哪个特定列或控件?

这是相关的 Xaml:(RowStyle 只有 FontSize 和 Margin 等外观属性。)

true

谢谢!

2 个答案:

答案 0 :(得分:0)

@Jason 和@Divyesh 有很好的建议。此外,手势识别器 Tapped 处理程序可以是列唯一的,并且可以传递我可以绑定到唯一标识行的值的 CommandParameter。

谢谢!将使用这些方法的某种组合。

答案 1 :(得分:0)

你可以像这里一样使用 SelectedItem

<ListView x:Name="dataList" ItemsSource="{Binding routeLabels}"
          HasUnevenRows="True" Grid.Row="1" Grid.Column="0"        
          Grid.ColumnSpan="3" SelectedItem="{Binding SelectedItem}">
</ListView>

在视图模型中

private string _selectedItem;
public string SelectedItem {
    get {return _selectedItem; } 
    set 
    { 
        _selectedItem = value;
        // Additional code
    }
}

使用 ItemTapped 您必须从 xaml.cs 页面处理它:

<ListView x:Name="dataList" ItemsSource="{Binding routeLabels}"
          HasUnevenRows="True" Grid.Row="1" Grid.Column="0"        
          Grid.ColumnSpan="3" ItemSelected="Handle_ItemSelected" ItemTapped="MyItemTapped">
</ListView>

在代码后面

private async void MyItemTapped(object sender,  ItemTapEventArgs e)
{
    var content = e.Item as MyModel;
    await Navigation.PushAsync(new somePage(content));
}
相关问题