编译绑定警告的解决方法

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

我正在尝试提高运行时性能并遇到问题。

我的内容页上有一个名为 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>

想知道我可以使用什么方法来解决这个问题。 我不相信我可以将命令放在我的对象类中,我需要它在我的内容页面中。

xaml binding maui
1个回答
0
投票

看起来

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 了解更多信息。

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