Eu tenho o seguinte código:
<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>
Quando executo este código, o Label tem o contexto de dados correto e posso usar a propriedade Create Name. Mas se eu quiser usar o código comentado, recebo o seguinte erro:
'GardenerMaster.Views.ListviewItemView' não pode ser convertido para o tipo 'GardenerMaster.Models.Creature'
Você poderia me ajudar, como posso passar o item atual para meu 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>
Tentei várias maneiras de passar o item atual, mas nenhuma delas funcionou.
<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" />
Também tentei configurar x:DataType="m:Creature"
o DataTemplate, mas também não funcionou.
Você está vendo esse erro porque está misturando os diferentes tipos de dados nas ligações compiladas .
Você deve declarar
x:DataType
noDataTemplate
:e certifique-se de usar a mesma declaração em
ListviewItemView
:Você também não precisa da propriedade vinculável no code-behind, isso é redundante (para dizer o mínimo) :
O controle herda
BindingContext
deDataTemplate
, então você pode vincular diretamenteName
em vez deCreature.Name
.