无法更新Picker.SelectedIndex

时间:2017-05-03 05:35:36

标签: android xamarin.forms

我有一个奇怪的问题,我无法解释它的原因 - 也许这里有人可以阐明它

我在Xamarin Forms中有一个票证扫描应用程序,目前正在Android上测试它 界面允许您:

  1. 键入订单号,然后单击检查订单按钮
  2. 使用相机扫描仪扫描哪个会自动触发检查顺序
  3. 使用条形码扫描器扫描哪个会自动触发检查顺序
  4. 在支票订单验证后,用户必须从下拉列表中选择票数并按下confrim输入按钮

    我正在尝试做的是,如果该票证上的座位只有1 - 然后自动触发确认输入按钮功能

    我遇到的问题是 - 我的一些逻辑依赖于在代码中设置下拉索引 - 由于某种原因它不会更新 - 如此处调试器中所示

    value not updating

    这是我今天注意到的第二个,早些时候它是一个var我试图分配一个字符串并且它一直变为null - 最终我替换了那个代码

    这是xamarin中的一个错误吗?

    代码已简化:

    async void OnCheckOrderButtonClicked(object sender, EventArgs e)
    {
        await ValidateOrderEntry();
    }
    
    private async void scanCameraButton_Clicked(object sender, EventArgs e)
    {
        messageLabel.Text = string.Empty;
        var options = new ZXing.Mobile.MobileBarcodeScanningOptions();
        options.PossibleFormats = new List<ZXing.BarcodeFormat>() {
            ZXing.BarcodeFormat.QR_CODE,ZXing.BarcodeFormat.EAN_8, ZXing.BarcodeFormat.EAN_13
        };
    
        var scanPage = new ZXingScannerPage(options);
        scanPage.OnScanResult += (result) =>
        {
            //stop scan
            scanPage.IsScanning = false;
    
            Device.BeginInvokeOnMainThread(async () =>
            {
                //pop the page and get the result
                await Navigation.PopAsync();
                orderNoEntry.Text = result.Text;
                //automatically trigger update
                await ValidateOrderEntry();
            });
    
        };
        await Navigation.PushAsync(scanPage);
    }
    
    private async Task ValidateOrderEntry()
    {
       //...other code....
    
        checkInPicker.Items.Clear();                
        if (availablTickets == 1)
        {
            checkInPickerStack.IsVisible = true;
            checkInPicker.SelectedIndex = 0;
    
            messageLabel.Text = "Ticket OK! - " + orderNoEntry.Text;
            messageLabel.TextColor = Color.Green;
            //select the only element
            checkInPicker.SelectedIndex = 0;
            await PostDoorEntry();
        }
       //...other code....
    }
    
    private async Task PostDoorEntry()
    {
        int entryCount = checkInPicker.SelectedIndex + 1;
        //... more code...
        //...post api code..
    }
    

1 个答案:

答案 0 :(得分:2)

也许我忽略了某些东西,但是你清除了所指出的那些项目上方的所有项目。这意味着您的Picker中没有商品,因此您无法将SelectedIndex设置为-1以外的任何商品,只是因为没有商品。

相关问题