Setter on text仅在Android上编辑后调用,在iOS上运行

时间:2014-01-30 16:17:31

标签: binding mvvmcross

当我将文本绑定到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)问题的公寓,绑定工作正常。

1 个答案:

答案 0 :(得分:2)

Android和iOS上TwoWay Text绑定的默认行为是按字符绑定。

您可以在18:43的N = 0视频中看到此行为 - http://youtu.be/_DHDMNB_IeY?t=18m43s

如果你在EditText中没有看到这种行为,那么我想它可能会以某种方式落到你的应用程序或者也许是某个bug(例如,可能在OneWayToSource以某种方式绑定 - 这当然不是不像其他绑定模式那样常用。)

要解决这个问题,我只能考虑建议:

  1. 将其记录为GitHub / MvvmCross上可重现的案例(github repo)的问题 - 有人可能会提供帮助 - 或者您可以自己修复它。
  2. 尝试使用TwoWay绑定
  3. 尝试创建自己的自定义绑定或自己的自定义控件 - 这实际上非常容易 - 请参阅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; }
       }
    }