为啥我想扫描时无法使用导航?

Posted

技术标签:

【中文标题】为啥我想扫描时无法使用导航?【英文标题】:Why I can't use navigation when I want scan?为什么我想扫描时无法使用导航? 【发布时间】:2021-08-23 14:07:42 【问题描述】:

对于在Xamarin 使用过ZXING 条形码扫描仪的任何人,我有一个问题。

我有一个应用程序,它有一页包含以下代码:

newitempage.xaml 表单扫描仪

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage 
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="ERP.Views.NewItemPage"
    Shell.PresentationMode="ModalAnimated"
    Title="New Item"
    xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
    ios:Page.UseSafeArea="true">
<ContentPage.Content>
<StackLayout Spacing="3" Padding="15">
    <Label Text="Text" FontSize="Medium" />
    <Entry Text="Binding Text, Mode=TwoWay" FontSize="Medium" />
    <Button Text="scan" Command="Binding ScanCommand" HorizontalOptions="FillAndExpand"></Button>
    <Label Text="Description" FontSize="Medium" />
    <Editor Text="Binding Description, Mode=TwoWay" x:Name="mycode" AutoSize="TextChanges" FontSize="Medium" Margin="0" />
    <StackLayout Orientation="Horizontal">
        <Button Text="Cancel" Command="Binding CancelCommand" HorizontalOptions="FillAndExpand"></Button>
        <Button Text="Save" Command="Binding SaveCommand" HorizontalOptions="FillAndExpand"></Button>
    </StackLayout>
</StackLayout>
</ContentPage.Content>

</ContentPage>

newitempage.xaml.cs

using ERP.Models;
using ERP.ViewModels;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using ZXing.Net.Mobile.Forms;

namespace ERP.Views

    public partial class NewItemPage : ContentPage
    
        public Item Item  get; set; 

        public NewItemPage()
        
            InitializeComponent();
            BindingContext = new NewItemViewModel();
        

newitemviewmodel.cs

private async void OnScan()
    
        var scan = new ZXingScannerPage();
        await Navigation.PushAsync(scan);
        scan.OnScanResult += (result) =>
        
            Device.BeginInvokeOnMainThread(async () =>
            
                await Navigation.PopAsync();
                mycode.Text = result.Text;
            );
        ;
    

请帮助解决我的问题。谢谢

 `await Navigation.PushAsync(scan);`

【问题讨论】:

只有您的页面具有“导航”属性,而不是您的视图模型。 那么如何在VM中调用zxingscanner?谢谢 【参考方案1】:

NavigationPage 的属性。您无法从 VM 访问它。此场景中使用的常见模式是访问AppMainPage 属性以使用它的Navigation 属性

App.Current.MainPage.Navigation.PushAsync(scan);

【讨论】:

那么如果我想使用VM我可以用什么来调用zxing? @NaughtyIT 我认为 Jason 的回复回答了您的问题,您可以使用 await App.Current.MainPage.Navigation.PushAsync(scan); 替换 await Navigation.PushAsync(scan); 好的,谢谢,现在如何将扫描结果放到文本框中? @NaughtyIT 替换 await Navigation.PushAsync(scan); 使用 await App.Current.MainPage.Navigation.PushAsync(scan);,使导航工作正常,杰森已经解释过了。 scan.OnScanResult不能开火?

以上是关于为啥我想扫描时无法使用导航?的主要内容,如果未能解决你的问题,请参考以下文章

技术分享 为啥 SELECT 查询选择全表扫描,而不走索引?

Quay Clair - 无法在扫描容器图像时获得输出

为啥使用 podman 构建容器时无法删除目录?

无法使用 c# 导航到 Windows Metro App 上的页面

为啥在表单后我无法在导航栏上保持内联?

为啥 Sonar-scanner 4.2 无法创建用户缓存?