当我将文本绑定到iOS上的输入时,每次在iOS上添加角色时都会调用我的setter,但不会在Android上调用。
如果我在绑定到iOS中的TextField的属性上放置断点,则每次输入字符时,都会调用属性设置器,但不会调用Android EditText。
它使更复杂的ViewModels连接到iOS上测试的getter / setter的几个输入在Android上完全无用,因为它无法使用。
有没有办法让“MvxBind =”Text SomeProperty“在iOS上像iOS一样?
像“AfterTextChanged”这样的事件(对命令的任何绑定)都不是属性友好的,会破坏我的ViewModel。我不希望有一个依赖于平台的解决方法。
[编辑]
// Droid. It calls the TotalAmount setter once the editing is done.
<EditText local:MvxBind="Text TotalAmount,
Mode=OneWayToSource; Text TotalAmountString, Mode=OneWay" />
// Touch. It calls the TotalAmount setter on key press.
set.Bind(MyTotalAmountTextField)
.For(v => v.Text)
.To(vm => vm.TotalAmount).OneWayToSource();
set.Bind(MyTotalAmountTextField)
.For(v => v.Text)
.To(vm => vm.TotalAmountString).OneWay();
顺便说一句,显示的属性总是用美元符号格式化,这就是我使用半双工方法进行绑定的原因。
来自此直播(iOS)与编辑后(Droid)问题的公寓,绑定工作正常。
答案 0 :(得分:2)
Android和iOS上TwoWay
Text
绑定的默认行为是按字符绑定。
您可以在18:43的N = 0视频中看到此行为 - http://youtu.be/_DHDMNB_IeY?t=18m43s
如果你在EditText
中没有看到这种行为,那么我想它可能会以某种方式落到你的应用程序或者也许是某个bug(例如,可能在OneWayToSource
以某种方式绑定 - 这当然不是不像其他绑定模式那样常用。)
要解决这个问题,我只能考虑建议:
TwoWay
绑定尝试创建自己的自定义绑定或自己的自定义控件 - 这实际上非常容易 - 请参阅http://mvvmcross.blogspot.com上的教程N = 28和n = 18 - 例如,您可以尝试继承EditText创建类似的东西;
public class MyEditText : EditText {
public MyEditText(Context c, IAttributeSet a) {
this.AfterTextChanged += (s,e) => MyTextChanged.Raise(this);
}
public event EventHandler MyTextChanged;
public string MyText {
get { return Text; }
set { Text = value; }
}
}