使用命令和 AncestorType 时的 XAML 绑定警告

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

我有一个使用

CollectionView
的小型 MAUI 程序 - 每个项目都有带有命令的按钮(如更改项目)

应用程序正在运行。但我在编译和运行时收到有关数据绑定的警告。

            <CollectionView.ItemTemplate>
            <DataTemplate x:DataType="model:CheckItem">
                <Grid ColumnDefinitions="*,Auto" ColumnSpacing="{StaticResource StdSpacing}">
                    <Grid
                        Grid.Column="1"
                        Margin="{StaticResource StdMargin}"
                        ColumnDefinitions="auto,auto"
                        ColumnSpacing="{StaticResource StdSpacing}">
                        <Button
                            Grid.Column="0"
                            Command="{Binding Source={RelativeSource AncestorType={x:Type viewmodel:OverviewViewModel}}, Path=ChangeItemCommand}"
                            CommandParameter="{Binding .}"
                            Style="{x:StaticResource GoogleFont}"
                            Text="{x:Static font:GoogleIconFont.Edit}" />
                    </Grid>
                </Grid>
            </DataTemplate>
        </CollectionView.ItemTemplate>

命令位于 ViewModel

viewmodel:OverviewViewModel
中,而项目的数据模型位于
model:CheckItem
中。

内容页面以

开头
x:Class="BicycleCheckList.OverviewPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:font="clr-namespace:BicycleCheckList.Utils"
xmlns:local="clr-namespace:BicycleCheckList.Resources.Strings"
xmlns:model="clr-namespace:BicycleCheckList.Models"
xmlns:utils="clr-namespace:BicycleCheckList.Utils"
xmlns:viewmodel="clr-namespace:BicycleCheckList.ViewModels"
Title="{Binding Title}"
x:DataType="viewmodel:OverviewViewModel">

在编译时,我收到警告:

XC0045 Binding: Property "ChangeItemCommand" not found on "BicycleCheckList.Models.CheckItem".

命令的绑定

Command="{Binding Source={RelativeSource AncestorType={x:Type viewmodel:OverviewViewModel}}, Path=ChangeItemCommand}"
没有找到命令。

为什么?

(玩具)应用程序也可在 Github

上找到
xaml binding command maui collectionview
1个回答
0
投票

虽然看起来有点多余,但您可以指定绑定的

x:DataType
。我相信您需要做的就是将您的
Button
声明更改为:

<Button
    Grid.Column="0"
    Command="{Binding x:DataType=viewmodel:OverviewViewModel, Source={RelativeSource AncestorType={x:Type viewmodel:OverviewViewModel}}, Path=ChangeItemCommand}"
    CommandParameter="{Binding .}"
    Style="{x:StaticResource GoogleFont}"
    Text="{x:Static font:GoogleIconFont.Edit}" />

(我通常会把

x:DataType
放在最后,但是如果不滚动它就看不到......)

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