es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Enlace y acceso al código detrás de Xamarin Forms y controles XAML.

Tengo un problema que espero que sea bastante simple. Estoy creando una aplicación simple de Xamarin Forms que utiliza zxing para escanear un código de barras y actualmente solo quiero mostrarlo en el campo de entrada del formulario, pero la vinculación no funciona y el código comentado que simplemente establece el valor desde el código detrás tampoco funciona. De hecho, por alguna razón, en este proyecto simple, acceder directamente a los elementos del formulario desde el código detrás simplemente congela la aplicación al depurar. Espero que alguien pueda señalar algún problema simple en el código que cause esto. Gracias.

<?xml version="1.0" encoding="utf-8"?>
<contentpage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:zxing="clr-namespace:ZXing.Net.Mobile.Forms;assembly=ZXing.Net.Mobile.Forms" x:class="Inventory.MainPage">
<contentpage.content>
    <stacklayout>
        <grid x:name="gridScanner">
            <zxing:zxingscannerview x:name="zxing" horizontaloptions="FillAndExpand" verticaloptions="FillAndExpand" onscanresult="ZXingScannerView_OnScanResult"></zxing:zxingscannerview>
            <zxing:zxingdefaultoverlay x:name="overlay" toptext="" bottomtext="El código de barras se escaneará automáticamente" showflashbutton="False"></zxing:zxingdefaultoverlay>
        </grid>
        <stacklayout>
            <label x:name="lblSku" text="SKU" fontattributes="Bold" fontsize="Title"></label>
            <entry x:name="txtSku" placeholder="SKU" returntype="Next"></entry>
        </stacklayout>
    </stacklayout>
</contentpage.content>
</contentpage>
public MainPage()
{
    InitializeComponent();
    _currentItem = new ScanItem();
    txtSku.BindingContext = _currentItem.SKU;
    txtSku.SetBinding(Entry.TextProperty, "Value");
    zxing.IsScanning = true;
}

public void ZXingScannerView_OnScanResult(Result result)
{
    _currentItem.SKU = result.Text;
    //txtSku.Text = result.Text;
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que hay algunos problemas con el código proporcionado.

    En primer lugar, la vinculación al campo de entrada no está configurada correctamente. En lugar de establecer txtSku.BindingContext = _currentItem.SKU;, debes establecer txtSku.BindingContext = _currentItem; para vincular todo el objeto ScanItem al campo de entrada.

    En segundo lugar, para vincular correctamente el valor de la propiedad SKU del objeto ScanItem a la propiedad de texto del campo de entrada, debes cambiar txtSku.SetBinding(Entry.TextProperty, "Value"); a txtSku.SetBinding(Entry.TextProperty, "SKU");.

    Por último, el código comentado //txtSku.Text = result.Text; debe eliminarse ya que no es necesario con la vinculación de datos configurada.

    En cuanto a la congelación de la aplicación al acceder a los elementos del formulario desde el código, es difícil determinar la causa exacta sin más información. Podría estar relacionado con hilos de ejecución u otros problemas en la aplicación.

Comments are closed.