我有一个使用
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
上找到虽然看起来有点多余,但您可以指定绑定的
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
放在最后,但是如果不滚动它就看不到......)