我正在尝试提高运行时性能并遇到问题。
我的内容页上有一个名为 MyCommand 的按钮,它接收一个项目(来自数据模板)并处理它。 我尝试过一些示例,问题是只有一种解决方案有效(但在没有运行时性能警告的情况下无法编译),而其他解决方案会产生类似的警告、错误,并且只是不点击 MyCommand 或不发送有问题的物品。
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage ...
x:DataType="pages:MyContentPage"
x:Name="MyPage">
<syncfusion:SfListView>
<syncfusion:SfListView.ItemTemplate>
<DataTemplate x:DataType="models:MyItem">
<Grid ...>
<Grid ...>
<Border ...>
<Grid ...>
<Grid.GestureRecognizers>
<!--Works, but Compile issue below-->
<!--ISSUE: Binding could be compiled to improve runtime performance if x:DataType is not explicitly null. See https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings for more information.-->
<!--Has x:DataType of null and allows it to work-->
<TapGestureRecognizer x:DataType="{x:Null}"
Command="{Binding Source={RelativeSource AncestorType={x:Type ContentPage}}, Path=BindingContext.MyCommand}"
CommandParameter="{Binding Msg}" />
<!--ISSUE: Click does not work, never hit, above has x:DataType-->
<!--<TapGestureRecognizer Command="{Binding Source={RelativeSource AncestorType={x:Type ContentPage}}, Path=BindingContext.MyCommand}"
CommandParameter="{Binding .}" />-->
<!--ISSUE: <TapGestureRecognizer Command="{Binding Source={x:Reference MyPace}, Path=BindingContext.MyCommand}"
CommandParameter="{Binding .}" />-->
<!--ISSUE: {Binding .} no longer works-->
<!--<TapGestureRecognizer x:DataType="pages:MyContentPage"
Command="{Binding Source={x:Reference MyPage}, Path=MyCommand}"
CommandParameter="{Binding .}" />-->
</Grid.GestureRecognizers>
...
</Grid>
</Border>
...
</Grid>
</Grid>
</DataTemplate>
</syncfusion:SfListView.ItemTemplate>
</syncfusion:SfListView>
</ContentPage.Content>
</ContentPage>
想知道我可以使用什么方法来解决这个问题。 我不相信我可以将命令放在我的对象类中,我需要它在我的内容页面中。
看起来
x:DataType
可以添加到 Command
,但不能添加到 CommandParameter
,所以我能够通过如下所示的 TapGestureRecognizer
来解决这个问题:
<Grid.GestureRecognizers>
<TapGestureRecognizer>
<TapGestureRecognizer.Command>
<Binding x:DataType="pages:MyPage"
Source="{x:Reference MyPage}"
Path="MyCommand" />
</TapGestureRecognizer.Command>
<TapGestureRecognizer.CommandParameter>
<Binding Path="Msg" />
</TapGestureRecognizer.CommandParameter>
</TapGestureRecognizer>
</Grid.GestureRecognizers>
上述更改后,以下警告不再存在:
如果 x:DataType 则可以编译绑定以提高运行时性能 不明确为空。看 https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings 了解更多信息。