c# - UITextField.text 的双向绑定(bind)不更新

标签 c# ios mvvmcross

当我“手动”更改 UITextField.Text 的内容时,更改不会反射(reflect)到 View 模型中 - 不会调用 setter 方法。

在我的 View 模型中

private string _amount;
public string Amount
{
  get { return _amount; }
  set { _amount = value; RaisePropertyChanged(() => Amount); }
}

在我看来

var _amount = new UITextField() { TranslatesAutoresizingMaskIntoConstraints = false };
View.AddSubview(_amount);
var set = this.CreateBindingSet<View, core.ViewModels.ViewModel>();
set.Bind(_amount).To(vm => vm.Amount);
set.Apply();
_amount.Text = "something";

View 模型中的数量没有更新,但如果我在此文本字段中键入“某物”,则 View 模型会更新。

我试过了

_amount.WillChangeValue("Text");
_amount.Text = "something";
_amount.DidChangeValue("Text");

但这没有用。

View 如何告诉 mvvmcross 字段已更新?

编辑:通过自定义绑定(bind)通过观察者监听 UITextField 更改来解决。

最佳答案

MvvmCross 使用来自 objC 的委托(delegate)/事件 EditingChanged 绑定(bind)到 Text - 参见 https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding.Touch/Target/MvxUITextFieldTextTargetBinding.cs#L54 - 这就是为什么当您更改文本时不会触发任何事件的原因。

解决这个问题的一种方法是使用继承的控件和新的属性来代替 - 例如

 [Register("MyTextField")]
 public class MyTextField : UITextField
 {
     public MyTextField() {
        HookEvent();
     }

     public MyTextField(IntPtr ptr) {
        HookEvent();
     }

     // other ctors as needed

     private void HookEvent() {
        EditingChanged += (s, e) => MyTextChanged.Raise(this);
     }

     public string MyText {
        get { return Text; }
        set { Text = value; MyTextChanged.Raise(this); }
     }

     public event EventHandler MyTextChanged;
 }

这将允许您使用 MyTextField 代替 UITextField 并使用 MyText 代替 Text

关于c# - UITextField.text 的双向绑定(bind)不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23307911/

相关文章:

c# - UserPrincipal 对象,Active Directory 查询 : DirectoryServicesCOMException

ios - 通过推送通知启动时调试应用程序

c# - MvvmCross : conventional plugin bypass

c# - 使用 Sql Functions.Patindex 进行多列的 Linq 通配符搜索

c# - Startup.cs中的ASP.NET Core访问服务的ConfigureServices方法

ios - 无法为类型 'SCNMatrix4' 调用初始值设定项

ios - iTunes 连接,Xcode 在管理器中验证

ios - View 层次结构中的 Mvvm 交叉绑定(bind)

sqlite - MvvmCross - 如何在 Windows 存储后台任务中访问 SQLite?

c# - SSIS 脚本任务 `Invalid cast exception` 从变量中检索复杂对象