我通过 TouchBehavior 属性传递命令和命令参数,但总是出错,我该如何解决这个问题?
<ContentView.Behaviors>
<toolkit:TouchBehavior LongPressCommand="{Binding Source={RelativeSource AncestorType={x:Type vm:ChatWIndowViewModel}}, Path=EditMessageCommand}" LongPressCommandParameter="{Binding ID}"
LongPressDuration="2000"/>
</ContentView.Behaviors>
我尝试通过常规命令调用它,但没有任何变化
我可以重现这个问题,那是因为
Behaviours
没有独特的视觉树父级,因此相对源绑定不起作用。您可以使用 x:Reference markup 进行绑定,而不是使用相对绑定。
例如,假设 ContentView 放置在
DataTemplate
中的 CollectionView
的 ContentPage
中,并将其 BindingContext 设置为 ChatWIndowViewModel
。我们可以先将 x:Name
设置为 ContentPage
(在本例中,我们将 x:Name
设置为 page
),然后我们可以使用 x:Reference 标记进行绑定。
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
...
x:Name="page">
...
<DataTemplate>
<ContentView>
<ContentView.Behaviors>
<toolkit:TouchBehavior LongPressCommand="{Binding Source={x:Reference page}, Path=BindingContext.EditMessageCommand}" .../>
</ContentView.Behaviors>
...
</ContentView>
</DataTemplate>
更多信息,请参阅x:参考标记扩展。
如果您有任何疑问,请告诉我。