我的代码看起来像这样,如果我传递 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 }”,但这会导致错误
LongPressCommand="{Binding Source={x: Reference longContentView}, Path=BindingContext.DeleteOrEditCommand }",则不调用该命令
我在这里没有看到任何问题。也许我错过了一些东西。
上面您将绑定源设置为内容视图。因此,除非您的 MessageModel 对象(我们集合视图的项目)定义了 DeleteOrEditCommand,否则什么都不会发生。因为,集合视图模板内的每个绑定都指向您的 MessageModel 对象。
如果您的命令是在 ViewModel 中定义的,那么您的第一种方法将触发该命令,因为您在 collectionview 的 itemtemplate 之外显式设置了源
LongPressCommand =“{绑定源= {x:参考collectionView},路径= BindingContext.DeleteOrEditCommand }”
(在这种情况下,绑定将指向设置为页面的 BindingContext,即 ViewModel)。