ContentView 中的 LongPressCommand 不起作用

问题描述 投票:0回答:1

我的代码看起来像这样,如果我传递 LongPressCommand="{Binding Source={x:Reference collectionView}, Path=BindingContext.DeleteOrEditCommand }" 那么一切正常,但如果我传递 LongPressCommand="{Binding Source={x:引用longContentView}, Path=BindingContext.DeleteOrEditCommand }”,那么命令就不会被调用

<CollectionView 
Grid.Row="1"
ItemsSource="{Binding Messages}"
x:Name="collectionView">
    <CollectionView.ItemsLayout>
    <LinearItemsLayout 
        Orientation="Vertical"
        ItemSpacing="10"/>
</CollectionView.ItemsLayout>
<CollectionView.EmptyView>
    <Grid/>
</CollectionView.EmptyView>
<CollectionView.ItemTemplate>
    <DataTemplate x:DataType="model:MessageModel">
        <ContentView
            x:Name="longContentView"
            HorizontalOptions="Start">
                <ContentView.Behaviors>
                    <toolkit:TouchBehavior 
                            LongPressCommand="{Binding Source={x:Reference longContentView}, Path=BindingContext.DeleteOrEditCommand }"
                            LongPressCommandParameter="{Binding ID}" 
                            LongPressDuration="1000" />
                </ContentView.Behaviors>
                <Grid
                Grid.Row="1"
                RowDefinitions="auto,auto">
                <Border
                    StrokeShape="RoundRectangle 10,20,0,20"
                    Background="{AppThemeBinding Dark=#262626, Light=#E0E0E0}"
                    StrokeThickness="0"
                    Padding="15"
                    Margin="0,0,115,0">

我找不到有关此问题的任何信息,我也尝试了“{Binding Source={RelativeSource AncestorType={x:Type vm:ChatWindowViewModel}}, Path=DeleteOrEditCommand }”,但这会导致错误

c# android maui touch long-press
1个回答
0
投票

LongPressCommand="{Binding Source={x: Reference longContentView}, Path=BindingContext.DeleteOrEditCommand }",则不调用该命令

我在这里没有看到任何问题。也许我错过了一些东西。

上面您将绑定源设置为内容视图。因此,除非您的 MessageModel 对象(我们集合视图的项目)定义了 DeleteOrEditCommand,否则什么都不会发生。因为,集合视图模板内的每个绑定都指向您的 MessageModel 对象。

如果您的命令是在 ViewModel 中定义的,那么您的第一种方法将触发该命令,因为您在 collectionview 的 itemtemplate 之外显式设置了源

LongPressCommand =“{绑定源= {x:参考collectionView},路径= BindingContext.DeleteOrEditCommand }”

(在这种情况下,绑定将指向设置为页面的 BindingContext,即 ViewModel)。

© www.soinside.com 2019 - 2024. All rights reserved.