Tre*_*com 5 c# zxing xamarin.android mvvmcross xamarin
我发现当使用MvvmCross版本3.5.1启用"不要保持活动"开发人员设置时,Mvvm Cross EditText绑定无法正常工作的情况.以下是重现的步骤:
实现ViewModel:
public class FirstViewModel : MvxViewModel
{
private readonly IMobileBarcodeScanner _mobileBarcodeScanner;
public FirstViewModel(IMobileBarcodeScanner mobileBarcodeScanner)
{
_mobileBarcodeScanner = mobileBarcodeScanner;
}
private string _barCode = "";
public string BarCode
{
get { return _barCode; }
set { _barCode = value; RaisePropertyChanged(() => BarCode); }
}
private MvxCommand _scanBarCodeCommand;
public IMvxCommand ScanBarCodeCommand
{
get
{
return _scanBarCodeCommand ?? (_scanBarCodeCommand = new MvxCommand(async () => await OnScanBarCode()));
}
}
private async Task OnScanBarCode()
{
var result = await _mobileBarcodeScanner.Scan();
if (result != null && !string.IsNullOrEmpty(result.Text))
{
InvokeOnMainThread(() =>
{
BarCode = result.Text;
});
}
}
}
Run Code Online (Sandbox Code Playgroud)实现视图:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
local:MvxBind="Text BarCode" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Scan"
local:MvxBind="Click ScanBarCodeCommand" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)在视图中初始化ZXing.Net.Mobile库:
[Activity(Label = "View for FirstViewModel")]
public class FirstView : MvxActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.FirstView);
MobileBarcodeScanner.Initialize(Application);
}
}
Run Code Online (Sandbox Code Playgroud)EditText.通过添加一个android:id来编辑View XML EditText.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<EditText
android:id="@+id/scan_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
local:MvxBind="Text BarCode" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Scan"
local:MvxBind="Click ScanBarCodeCommand" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)重建并运行应用程序. 现在扫描的条形码没有显示在EditText.唯一的变化是给予EditText和android:id.有谁理解为什么添加android:id会破坏MvvmCross数据绑定?
仅为 TextEdit 添加绑定,而不为 EditText 添加绑定。请参阅此处的实现:https://github.com/MvvmCross/MvvmCross/blob/4.0/Cirrious/Cirrious.MvvmCross.Binding.Droid/MvxAndroidBindingBuilder.cs#L85
您可以添加自定义绑定,如下所述:
| 归档时间: |
|
| 查看次数: |
2385 次 |
| 最近记录: |