如何在TextChanged事件上重绘ZXing QR码-Xamarin

时间:2018-07-10 05:35:14

标签: xamarin xamarin.forms

我想在每次触发特定TextChanged事件时重绘我的QR码。

当页面加载在XAML文件中设置的值ZXingBarcodeImageView时,BarcodeValue对象会在视图中绘制,如下所示:

<forms:ZXingBarcodeImageView 
       Margin="5,5,5,0"
       x:Name="QRCodeView"
       BarcodeFormat="QR_CODE" 
       BarcodeValue="-1" //this is the value of the QR code
/>

我有一个附加了Entry事件的TextChanged,它触发了一个函数UpdateQRLabel。此函数应使用Entry

中的新值重绘QRCode。
<Entry
       x:Name="Message" 
       TextChanged="UpdateQRLabel"   
/>

如果我在绘制QRCode之后更改了BarcodeValue参数,它会不会自动重绘。

每次触发TextChanged事件时,我都需要强制 ZXingBarcodeImageView 对象重绘。

问题

在触发ZXingBarcodeImageView事件时,如何强制TextChanged重绘?

1 个答案:

答案 0 :(得分:1)

我不确定您是否正在使用数据绑定。由于您使用的是事件,我想没有,但是,它确实可以与数据绑定一起使用。可在此处找到示例存储库:https://github.com/jfversluis/ZXingValueBinding

这归结为这一点。创建一个保存条形码值的属性:

private string _barcodeValue = "-1";

public string BarcodeValue
{
    get { return _barcodeValue; }
    set
    {
        _barcodeValue = value;
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(BarcodeValue)));
    }
}

拥有此属性的对象需要实现INotifyPropertyChanged接口。您可以考虑使用PropertyChanged.Fody。

我已经将此属性放在页面的代码后面,这也可以是一个单独的类。现在,将条形码图像视图更改为:<forms:ZXingBarcodeImageView ... BarcodeValue="{Binding BarcodeValue}">

每当您将新值设置为BarcodeValue时,该值就应该更改,因为通过INotifyPropertyChanged机制通知了UI。