我有以下代码:
<ListView ItemsSource="{Binding Creature.FriendlyEnvironment}"
x:DataType="vm:PlantDetailsViewModel">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label Text="{Binding Name}" x:DataType="m:Creature" />
<!--<v:ListviewItemView Creature="{Binding .}" x:DataType="m:Creature" />-->
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
当我执行此代码时,标签具有正确的数据上下文,并且我可以使用“创建名称”属性。但是如果我想使用注释掉的代码,则会出现以下错误:
“GardenerMaster.Views.ListviewItemView”无法转换为类型“GardenerMaster.Models.Creature”
你能帮我吗,我怎样才能将当前项目传递到我的ListviewItemView?
ListviewItemView.xaml.cs
public partial class ListviewItemView : ContentView
{
public static readonly BindableProperty CreatureProperty =
BindableProperty.Create(propertyName: nameof(Creature), returnType: typeof(Creature), declaringType: typeof(ListviewItemView), defaultValue: default(Creature));
public Creature Creature
{
get => (Creature)GetValue(CreatureProperty);
set => SetValue(CreatureProperty, value);
}
public ListviewItemView()
{
InitializeComponent();
}
}
ListviewItemView.xaml
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="GardenerMaster.Views.ListviewItemView"
x:DataType="v:ListviewItemView">
<Label Text="{Binding Creature.Name}" />
</ContentView>
我尝试了各种方法来传递当前项目,但没有一个起作用。
<v:ListviewItemView Creature="{Binding}" x:DataType="m:Creature" />
<v:ListviewItemView Creature="{Binding .}" x:DataType="m:Creature" />
<v:ListviewItemView Creature="{Binding Path=.}" x:DataType="m:Creature" />
我还尝试为 DataTemplate 设置x:DataType="m:Creature"
,但它也不起作用。
您看到该错误是因为您在编译的绑定中混合了不同的数据类型。
您应该
x:DataType
在 上声明DataTemplate
:并确保在以下位置使用相同的
ListviewItemView
声明:您也不需要代码隐藏中的可绑定属性,这是多余的(至少可以说):
该控件继承
BindingContext
自DataTemplate
,因此您可以直接绑定到 ,Name
而不是Creature.Name
。