【发布时间】:2019-02-06 14:24:17
【问题描述】:
我的 ZXing 在我的 xamarin 应用程序中正确扫描二维码时遇到问题,但它会执行多次,并且不止一次发送到其他视图模型。为了解决这个问题,我使用了一个计数器,效果很好。所以我想使用 MvvmLight 提供的信使从视图发送一条消息到 viewmodel 以在我的视图每次启动 OnAppearing 方法时重置计数器。这是一个好方法吗?我可以用另一种方式做得更好吗?
在我看来这是我的 OnAppearing 方法:
protected override void OnAppearing()
{
base.OnAppearing();
var messageScanActivation = new MessageResetScan();
Messenger.Default.Send(messageScanActivation);
Console.WriteLine("i sent reset message");
}
这是我的视图模型:
public ScannerViewModel(INavigationService navigationService,
IScanCreatorService scanCreatorService) : base(navigationService)
{
_scanCreatorService = scanCreatorService;
title = "Scan";
_countScan = 0;
OnBarcodeScannedCommand = new Command(OnBarcodeScanned);
_isScanning = true;
Messenger.Default.Register<MessageResetScan>(this, ResetScan);
}
private void OnBarcodeScanned()
{
_countScan++;
_isAnalyzing = false;
Device.BeginInvokeOnMainThread(() =>
{
if (_countScan == 1)
{
Debug.WriteLine("RisultatoScansione: " + Result.Text);
UpdateHistoryScans(Result.Text);
Debug.WriteLine("currentKey: " + _navigationService.CurrentPageKey);
DisplayScanAcquiredPrompt();
_navigationService.GoBack();
}
});
_isAnalyzing = true;
}
private void ResetScan(MessageResetScan message)
{
Console.WriteLine("I received reset message! CountScan: " + _countScan);
_countScan = 0;
}
【问题讨论】:
标签: c# events xamarin.forms mvvm-light zxing