Je développe une application Xamarin.Forms avec un framework Prism dans une architecture MVVM. J'ai besoin de collecter la signature à l'écran, j'ai donc décidé d'inclure la bibliothèque SignaturePad. Avec NuGet, j'ai inclus les paquets Xamarin.Controls.SignaturePad et Xamarin.Controls.SignaturePad.Forms. Dans la mise en page (construite avec XAML) Je le widget de signature:Récupération d'une image à partir de SignaturePadView avec l'architecture MVVM
<signature:SignaturePadView
x:Name="padView"
HeightRequest="130"
CaptionText="Sign"
CaptionTextColor="Black"
ClearText="Clean"
ClearTextColor="Black"
BackgroundColor="White"
SignatureLineColor="Black"
StrokeWidth="2"
StrokeColor="Black"
BindingContext="{Binding Sign, Mode=TwoWay}" />
Dans le ViewModel le widget de liaison:
private SignaturePadView _sign;
public SignaturePadView Sign
{
get { return _sign; }
set { SetProperty(ref _sign, value); }
}
Dans le constructeur ViewModel:
_sign = new SignaturePadView();
Il est aussi un bouton, dans l'action de ce bouton j'ai besoin de lire l'image du signe et l'enregistrer dans la base de données. J'ai essayé ceci:
Stream sig = await Sign.GetImageStreamAsync(SignatureImageFormat.Png);
var signatureMemoryStream = sig as MemoryStream;
byte[] data = signatureMemoryStream.ToArray();
Tout ce code est écrit dans le projet portable. Malheureusement, cela ne fonctionne pas car l'objet sig est toujours nul. Je pense que le problème est la liaison de widget mais je ne suis pas sûr.
Merci pour votre aide. Cela fonctionne parfaitement aussi avec Prism. Juste une clarification: SignatureView.Points est un IEnumerable et ne supporte pas le nombre. –
TeoVr81
@ TeoVr81 si je me souviens, compte fonctionne grâce à Linq – hugoterelle
vous avez raison, si j'inclus System.Linq cela fonctionne très bien sans autres solutions de contournement. Merci pour tout! – TeoVr81