为啥我想扫描时无法使用导航?
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】:Navigation
是Page
的属性。您无法从 VM 访问它。此场景中使用的常见模式是访问App
的MainPage
属性以使用它的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 查询选择全表扫描,而不走索引?