Xamarin - функция внутри Device.BeginInvokeOnMainThread не вызывается правильно - PullRequest
0 голосов
/ 29 июня 2018

Я создаю QR-код в Xamarin и вызываю генерацию QR-кода внутри Device.BeginInvokeOnMainThread, чтобы я мог динамически обновлять QR-код при каждом добавлении нового ввода.

Device.BeginInvokeOnMainThread(async () =>
            {
                QRCodeView.IsVisible = true;
                QRCodeView = null;
                QRCodeView = new ZXingBarcodeImageView
                {
                    BarcodeFormat = BarcodeFormat.QR_CODE,
                    BarcodeOptions = new QrCodeEncodingOptions
                    {
                        Height = 150,
                        Width = 150,
                        PureBarcode = true
                    },
                    BarcodeValue = await SetQrContent(),

                    VerticalOptions = LayoutOptions.CenterAndExpand,
                    HorizontalOptions = LayoutOptions.CenterAndExpand
                };
            });

В моей функции SetQrContent() QR-коду передаются новые значения. Однако Я думаю, что эта функция вызывается слишком поздно, так как значения нового QR-кода установлены неправильно, из-за чего мой QR-код не изменяется при изменении ввода.

Я использую BeginInvokeOnMainThread неправильно?

1 Ответ

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

Попробуйте изменить BarcodeValue только при изменении QrContent.

Device.BeginInvokeOnMainThread(async () =>
{
    // Don't reset the view, only reset the value on the barcode
    QRCodeView.BarcodeValue = await SetQrContent();
});

Когда элемент управления уже добавлен на страницу, изменяйте только свойства вида, а не создавайте новый вид. При создании нового ZXingBarcodeImageView новое представление не было добавлено на страницу, в результате чего все еще отображаются старые данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...