Используйте факел при сканировании штрих-кода - PullRequest
0 голосов
/ 30 мая 2018

Я использую ZXing.Mobile.Forms для сканирования штрих-кодов.Я хотел бы включить факел во время сканирования штрих-кодов.Я попытался ToggleTorch (), но я не вижу свет факела.Пожалуйста, помогите преодолеть этот сценарий.Вот мой код:

        var scanner = new ZXing.Mobile.MobileBarcodeScanner();
        scanner.ToggleTorch();
        var option = new ZXing.Mobile.MobileBarcodeScanningOptions { UseCode39ExtendedMode = true, TryHarder = true, PureBarcode = true, };
        var result = await scanner.Scan(option);
        if (result != null)
            await Application.Current.MainPage.DisplayAlert(title, result.Text, "Cancel");
        await Application.Current.MainPage.Navigation.PopAsync(true);

1 Ответ

0 голосов
/ 04 июня 2018

ОК, вот основная идея, которая делает то, что вы хотите, в манере MVVM:

XAML:

<zxing:ZXingScannerView x:Name="ScannerView"
                        IsTorchOn="{Binding IsTorchOn}"
                        IsScanning="{Binding IsScanning}"
                        IsAnalyzing="{Binding IsAnalyzing}"
                        ScanResultCommand="{Binding OnScanResult}"/>

Кодовый код:

public partial class BarcodeScannerPage
    {
        private BarcodeScannerPageModel _pageModel;

        public BarcodeScannerPage()
        {
            InitializeComponent();
        }

        protected override void OnAppearing()
        {
            base.OnAppearing();

            if(_pageModel == null) return;
            _pageModel.IsScanning = true;
            _pageModel.IsAnalyzing = true;
            _pageModel.IsTorchOn= true;
        }

        protected override void OnBindingContextChanged()
        {
            base.OnBindingContextChanged();
            _pageModel = BindingContext as BarcodeScannerPageModel;
        }
    }

Модель страницы:

public class BarcodeScannerPageModel
    {
        #region instance variables
        private bool _isScanning;
        private bool _isAnalyzing;
        private bool _isTorchOn;
        #endregion

        public BarcodeScannerPageModel()
        {
            IsTorchOn = true;
        }

        public bool IsScanning
        {
            get => _isScanning;
            set
            {
                _isScanning = value;
                RaisePropertyChanged();
            }
        }

        public bool IsAnalyzing
        {
            get => _isAnalyzing;
            set
            {
                _isAnalyzing = value;
                RaisePropertyChanged();
            }
        }

        public ICommand OnScanResult
        {
            get
            {
                return new Command(async (result) =>
                {
                        if (result.ToString().IsNullOrEmpty()) return;

                        Device.BeginInvokeOnMainThread(async () =>
                        {
                            IsAnalyzing = false;
                            //your code here...
                        });
                });
            }
        }

        public bool IsTorchOn
        {
            get => _isTorchOn;
            set
            {
                _isTorchOn = value;
                RaisePropertyChanged();
            }
        }
    }

Здесь я предположил, что MVVM установлен и используется правильно, включая события «PropertyChanged» и настройку «BindingContext».Дополнительная информация:

MVVM

От привязок данных к MVVM

MVVM и привязка данных с Xamarin.Forms

Использование некоторых сред MVVM, таких как FreshMvvm , может упростить задачу.

...