MVVM アーキテクチャで Prism フレームワークを使用して Xamarin.Forms アプリケーションを開発しています。画面から署名を収集する必要があるため、SignaturePad ライブラリを含めることにしました。NuGet には、Xamarin.Controls.SignaturePad と Xamarin.Controls.SignaturePad.Forms パッケージを含めました。ページ レイアウト (XAML で構築) には、署名ウィジェットがあります。
<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}" />
ViewModel でのウィジェット バインディング:
private SignaturePadView _sign;
public SignaturePadView Sign
{
get { return _sign; }
set { SetProperty(ref _sign, value); }
}
ViewModel コンストラクターで:
_sign = new SignaturePadView();
ボタンもあります。このボタンのアクションでは、標識の画像を読み取ってデータベースに保存する必要があります。私はこれを試しました:
Stream sig = await Sign.GetImageStreamAsync(SignatureImageFormat.Png);
var signatureMemoryStream = sig as MemoryStream;
byte[] data = signatureMemoryStream.ToArray();
このコードはすべて、移植可能なプロジェクトに記述されています。残念ながら、sig オブジェクトは常に null であるため、機能しません。問題はウィジェットのバインディングだと思いますが、よくわかりません。