You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Community Toolkit长按事件未触发,求带参删除实现方案

解决ListView项长按事件不触发的问题

核心问题定位

你当前使用xct:TouchEffect.Command绑定的是短按(点击)事件,而非长按事件。Xamarin Community Toolkit的TouchEffect中,长按事件需要绑定LongPressCommand属性。

步骤1:修改ViewModel代码

在ViewModel中添加长按对应的Command,并关联到你的LongAction方法:

public Command LongPressCommand { get; set; }

public SampleViewModel()
{
    // 保留原有PressedCommand(如果需要短按功能)
    PressedCommand = new Command(PressAction);
    // 初始化长按命令
    LongPressCommand = new Command(LongAction);
    
    GridSpan = Device.Idiom == TargetIdiom.Phone ? 1 : 2;
    BuildCars();
}

// 完善删除逻辑的示例
private void LongAction(object obj)
{
    var selectedCar = obj as Car;
    if (selectedCar == null) return;
    
    Application.Current.MainPage.DisplayAlert("Warning", $"是否删除{selectedCar.Name}?", "确定", "取消")
        .ContinueWith(task =>
        {
            if (task.Result)
            {
                Cars.Remove(selectedCar);
            }
        }, TaskScheduler.FromCurrentSynchronizationContext());
}

步骤2:修改XAML代码

将ViewCell上的xct:TouchEffect.Command替换为LongPressCommand,确保绑定路径正确:

<ContentPage x:Name="ListPage" 
             xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
             xmlns:local="clr-namespace:YourNamespace"
             x:Class="YourNamespace.ListPage">
    <ContentPage.Content>
        <ListView x:Name="CarsList"
                  Grid.Row="1"
                  SeparatorVisibility="Default"
                  ItemsSource="{Binding Cars}"
                  HasUnevenRows="True"
                  SelectionMode="None"
                  SelectedItem="{Binding SelectedCar}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell xct:TouchEffect.LongPressCommand="{Binding Source={x:Reference ListPage}, Path=BindingContext.LongPressCommand}"
                              xct:TouchEffect.CommandParameter="{Binding .}">
                        <local:CarView Padding="0,10,0,0" />
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </ContentPage.Content>
</ContentPage>

额外检查项

  • 确认ContentPage的x:Name确实是ListPage,否则绑定会失效。
  • 确保已经在ContentPage的根节点正确引入Xamarin Community Toolkit的命名空间:xmlns:xct="http://xamarin.com/schemas/2020/toolkit"。
  • 如果CarView内部有可点击控件,可能会拦截触摸事件,需要确保CarView的布局允许触摸事件传递到外层的ViewCell。

内容的提问来源于stack exchange,提问作者edu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:01:08