【问题标题】:How to redraw ZXing QR code on TextChanged Event - Xamarin如何在 TextChanged 事件上重绘 ZXing 二维码 - Xamarin
【发布时间】:2018-07-10 05:35:13
【问题描述】:

我想在每次触发特定的TextChanged 事件时重新绘制我的二维码。

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

<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中的新值重绘二维码

<Entry
       x:Name="Message" 
       TextChanged="UpdateQRLabel"   
/>

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

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

问题

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

【问题讨论】:

    标签: xamarin xamarin.forms


    【解决方案1】:

    我不确定您是否使用数据绑定。但是,由于您使用的是事件,所以我猜不是,我确实让它与数据绑定一起使用。可以在此处找到示例 repo: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。

    我已将此属性放在页面的代码隐藏中,这也可以是一个单独的类。现在,将您的条形码图像视图更改为:&lt;forms:ZXingBarcodeImageView ... BarcodeValue="{Binding BarcodeValue}"&gt;

    每当您为BarcodeValue 设置一个新值时,该值应该会发生变化,因为INotifyPropertyChanged 机制会通知UI。

    【讨论】:

    • 感谢您回答我的另一个问题。真的很感激:)
    • 完全没问题!记得把它标记为答案! :)
    • 当我添加该代码The event 'BindableObject.PropertyChanged' can only appear on the left hand side of += or -=时出现此错误@
    • 啊,是的,当使用代码隐藏作为BindingContext 时,我也明白了这一点,请查看示例存储库。我手动添加了INotifyPropertyChanged 和附带的事件。似乎接口是在部分类的其他地方实现的
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多