Пользовательская привязка MvvmCross UITextField

Поэтому я пытаюсь реализовать пользовательское связывание для UITextField в MvvmCross, в значительной степени по аналогии сСвязывание клавиши «GO» на программной клавиатуре - попытка связать текстовое поле для автоматического запуска события, когда на клавиатуре нажимается кнопка «Готово» (поэтому привязка кShouldReturn). Мне также нужно привязать текстовое полеEditingDidBegin а такжеEditingDidEnd События. Поскольку я связываю более одного события, я создалMvxPropertyInfoTargetBinding следующее:

public class MyTextFieldTargetBinding : MvxPropertyInfoTargetBinding<UITextField>
{
    private ICommand _command;

    protected UITextField TextField
    {
        get { return (UITextField)Target; }
    }

    public MyTextFieldTargetBinding(object target, PropertyInfo targetPropertyInfo) : base(target, targetPropertyInfo)
    {
        TextField.ShouldReturn += HandleShouldReturn;
        TextField.EditingDidBegin += HandleEditingDidBegin;
        TextField.EditingDidEnd += HandleEditingDidEnd;
    }

    private bool HandleShouldReturn(UITextField textField)
    {
        if (_command == null) {
            return false;
        }

        var text = textField.Text;
        if (!_command.CanExecute (text)) {
            return false;
        }

        textField.ResignFirstResponder();
        _command.Execute(text);

        return true;
    }

    private void HandleEditingDidBegin (object sender, EventArgs e)
    {
        // do something
    }

    private void HandleEditingDidEnd (object sender, EventArgs e)
    {
        // do something
    }

    public override MvxBindingMode DefaultMode
    {
        get { return MvxBindingMode.OneWay; }
    }

    public override void SetValue(object value)
    {
        var command = value as ICommand;
        _command = command;
    }

    public override Type TargetType
    {
        get { return typeof(ICommand); }
    }

    protected override void Dispose(bool isDisposing)
    {
        if (isDisposing)
        {
            if (TextField != null)
            {
                TextField.ShouldReturn -= HandleShouldReturn;
                TextField.EditingDidBegin -= HandleEditingDidBegin;
                TextField.EditingDidEnd -= HandleEditingDidEnd;
            }
        }

        base.Dispose(isDisposing);
    }

}

Мой первый вопрос: я прав в созданииMvxPropertyInfoTargetBinding для всех событий? Соответственно, я не понимаю разницу междуMvxPropertyInfoTargetBinding а такжеMvxTargetBinding, В соответствии сMVVMCross Привязка десятичной к UITextField удаляет десятичную точку первый используется при замене существующей привязки, второй - для известных свойств и пар событий. Так я использую правильный?

Во-вторых (и суть моей проблемы), мой код работаеткроме SetValue - уволен, ноvalue являетсяnull, Вот что у меня в моемSetup файл:

protected override void FillTargetFactories (IMvxTargetBindingFactoryRegistry registry)
{
    base.FillTargetFactories (registry);
    registry.RegisterPropertyInfoBindingFactory(typeof(MyTextFieldTargetBinding), typeof(UITextField), "Text");
}

Я ничего не делаю в моемView - возможно, в этом и заключается проблема?

РЕДАКТИРОВАТЬ:

мойViewModel:

public class LoginViewModel : MvxViewModel
{
    private string _username;
    public string Username
    { 
        get { return _username; }
        set { _username = value; RaisePropertyChanged(() => Username); }
    }

    private string _password;
    public string Password
    { 
        get { return _password; }
        set { _password = value; RaisePropertyChanged(() => Password); }
    }

    private MvxCommand _login;
    public ICommand Login
    {
        get {
            _login = _login ?? new MvxCommand(DoLogin);
            return _login;
        }
    }

    public LoginViewModel(ILoginManager loginManager)
    {
        _loginManager = loginManager;
    }

    private void DoLogin()
    {
        // call the login web service
    }
}

В моем `View 'я ничего необычного не делаю (я создаю элементы View в XIB):

public override void ViewDidLoad()
{
    base.ViewDidLoad ();

    this.NavigationController.SetNavigationBarHidden(true, false);

    var set = this.CreateBindingSet<LoginView, Core.ViewModels.LoginViewModel>();
    set.Bind(usernameTextField).To(vm => vm.Username);
    set.Bind(passwordTextField).To(vm => vm.Password);
    set.Bind (loginButton).To (vm => vm.Login);
    set.Apply();
}

Нет интересных сообщений трассировки.

Ответы на вопрос(1)

Ваш ответ на вопрос