MoldOutboundExecutePage.xaml.cs
2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
using IndustrialControl.ViewModels;
using IndustrialControl.Services; // ✅ 引入扫描服务
namespace IndustrialControl.Pages;
[QueryProperty(nameof(OrderNo), "orderNo")]
public partial class MoldOutboundExecutePage : ContentPage
{
public string? OrderNo { get; set; } // Shell QueryProperty 接收
private readonly MoldOutboundExecuteViewModel _vm;
private readonly ScanService _scanSvc; // ✅ 扫描服务
public MoldOutboundExecutePage(MoldOutboundExecuteViewModel vm, ScanService scanSvc)
{
InitializeComponent();
BindingContext = _vm = vm;
_scanSvc = scanSvc;
// 与项目里其它页保持一致的扫码配置
_scanSvc.Prefix = null;
_scanSvc.Suffix = null;
_scanSvc.DebounceMs = 0;
}
protected override async void OnNavigatedTo(NavigatedToEventArgs args)
{
base.OnNavigatedTo(args);
if (!string.IsNullOrWhiteSpace(OrderNo))
{
await _vm.LoadAsync(OrderNo); // 维持你现有逻辑
}
}
protected override void OnAppearing()
{
base.OnAppearing();
// ✅ 注册扫描回调并开始监听
_scanSvc.Scanned += OnScanned;
_scanSvc.StartListening();
// ✅ 让“模具编码”输入框也能接收键盘/扫描枪字符
_scanSvc.Attach(MoldEntry);
MoldEntry.Focus();
}
protected override void OnDisappearing()
{
// ✅ 页面离开时及时注销,避免多个页面抢占扫码
_scanSvc.Scanned -= OnScanned;
_scanSvc.StopListening();
base.OnDisappearing();
}
// ✅ 硬件/广播 扫到码
private void OnScanned(string data, string type)
{
MainThread.BeginInvokeOnMainThread(async () =>
{
// 1) 回填到输入框(UI 可见)
MoldEntry.Text = data;
// 2) 如需联动业务:在此调用 VM 方法(按需实现)
// 例如:await _vm.HandleMoldScannedAsync(data, type);
// 3) 如果只是想用扫描即“勾选相应行”,可在这里根据编码查找并置 Selected=true
// ⚠ 你的行模型 MoldOutboundDetailRow 目前不是可通知对象,直接赋值 UI 不一定刷新;
// 建议后续把它改成 ObservableObject 再做切换高亮。
});
}
// ✅ 手动输入并按回车,也走同一套逻辑
private async void OnMoldCompleted(object? sender, EventArgs e)
{
var code = MoldEntry.Text?.Trim();
if (string.IsNullOrEmpty(code)) return;
// 可选:与 OnScanned 同步的处理
// await _vm.HandleMoldScannedAsync(code, "manual");
// 光标回到输入框,便于连续扫描
MoldEntry.CursorPosition = MoldEntry.Text?.Length ?? 0;
MoldEntry.Focus();
}
}