J'ai créé un ViewCell personnalisé qui est censé être utilisé dans mon ListView Le même code fonctionne sur Android mais pas sur UWP (Windows Phone et Windows Desktop).Xamarin.UWP Personnalisé ViewCell a des problèmes avec les liaisons
Le projet est Xamarin Forms.
Quand je l'utilise dans mon ListView ... je ne peux voir des cellules vides.
<?xml version="1.0" encoding="UTF-8"?>
<ViewCell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="AAA.Extensions.AttributeViewCell"
Tapped="AttributeViewCell_OnTapped"
>
<Grid
x:Name="AttributeGrid"
>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackLayout
Grid.Column="0"
>
<Label
Text="{Binding Code}"
TextColor="#000000"
/>
<Label
Text="{Binding Description}"
TextColor="#000000"
/>
</StackLayout>
<StackLayout
Grid.Column="1"
x:Name="DynamicContentStackLayout"
>
</StackLayout>
</Grid>
Mon code derrière
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class AttributeViewCell : ViewCell
{
#region Bindable Properties
public static readonly BindableProperty CodeProperty = BindableProperty.Create(nameof(Code),typeof(string),typeof(AttributeViewCell), defaultBindingMode:BindingMode.TwoWay);
public static readonly BindableProperty DescriptionProperty = BindableProperty.Create(nameof(Description), typeof(string), typeof(AttributeViewCell), defaultBindingMode:BindingMode.TwoWay);
#endregion
#region Properties
/// <summary>
/// Attribute Code
/// </summary>
public string Code
{
get => (string) GetValue(CodeProperty);
set => SetValue(CodeProperty,value);
}
/// <summary>
/// Attribute's description
/// </summary>
public string Description
{
get => (string) GetValue(DescriptionProperty);
set => SetValue(DescriptionProperty, value);
}
#endregion
public AttributeViewCell()
{
InitializeComponent();
this.BindingContext = this;
}
private void AttributeViewCell_OnTapped(object sender, EventArgs e)
{
// I CAN SEE BINDINGS here...
}
}
La liaison se fait à travers un ViewModel regard de POCO comme ce qui suit
public class Attribute
{
public string Code { get; set; }
public string Description { get; set; }
}
VM cla publique ss ProductDetailsPageViewModel: BaseViewModel { #region Champs private readonly AnonymousCheckerService _anonymousCheckerService; private Liste _attributes;
#endregion
#region Properties
public List<Attribute> Attributes
{
get => _attributes;
set
{
_attributes = value;
OnPropertyChanged();
}
}
#endregion
//basic ctor
public ProductDetailsPageViewModel()
{
_aaa= new aaa();
Attributes = _aaa.GetInfo("123").Attributes;
}
}
Et enfin, le ListView
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:extensions="clr-namespace:AnonymousCheckerApp.Extensions"
x:Class="AnonymousCheckerApp.Views.ProductDetailsPage">
<StackLayout>
<ListView
ItemsSource="{Binding Attributes}"
>
<ListView.ItemTemplate>
<DataTemplate>
<extensions:AttributeViewCell
Code="{Binding Code}"
Description="{Binding Description}"
AttributeDetails="{Binding AttributeDetails}"
/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
and it's codebehind
public ProductDetailsPage()
{
var vm = new ProductDetailsPageViewModel();
this.BindingContext = vm;
InitializeComponent();
}
Je joins un événement taraudés sur la viewcell ... Je peux voir les fixations ...
Édition 1
J'ai comm J'ai trouvé d'autres développeurs ayant des problèmes de liaison avec des éléments empilés dans Grid
éléments ... Toujours pas fonctionnant et ce qui est bizarre, c'est qu'il "analyse" correctement les éléments XAML, mais il ne parvient pas à faire la liaison ....Qu'est-ce que je fais mal ?
C'est à quoi il ressemble sur Android
est-il pas un autre problème, peut-être le texte est blanc pour une raison quelconque? Pourriez-vous mettre le 'TextColor' en rouge ou quoi que ce soit juste pour l'exclure :) –
J'ai mis à jour le thread principal ... ne fonctionne toujours pas, si je remplace le texte = {Binding} avec une valeur codée, il rendra . – ExtremeSwat