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;
}
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 establecertxtSku.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 objetoScanItem
a la propiedad de texto del campo de entrada, debes cambiartxtSku.SetBinding(Entry.TextProperty, "Value");
atxtSku.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.