簡単な解決策は、前の回答で与えられたものです。
ただし、さらに先に進みたい場合は、次のような実装のカスタム バインディングを追加できます。
public class MvxUITextFieldShouldReturnTargetBinding
: MvxTargetBinding
{
private ICommand _command;
protected UITextField View
{
get { return Target as UITextField; }
}
public MvxUITextFieldShouldReturnTargetBinding(UITextField target)
: base(target)
{
target.ShouldReturn = HandleShouldReturn;
}
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;
}
public override MvxBindingMode DefaultMode
{
get { return MvxBindingMode.OneWay; }
}
public override void SetValue(object value)
{
var command = value as ICommand;
_command = command;
}
public override System.Type TargetType
{
get { return typeof(ICommand); }
}
protected override void Dispose(bool isDisposing)
{
base.Dispose(isDisposing);
if (isDisposing)
{
var editText = View;
if (editText != null)
{
editText.ShouldReturn = null;
}
}
}
}
セットアップ中に次のように登録できます。
registry.RegisterCustomBindingFactory<UITextField>("ShouldReturn",
textField => new MvxUITextFieldShouldReturnTargetBinding(textField));
私はそれがうまくいくと思います-それはあなたがaMvxCommand
またはaをバインドできるようにするべきですMvxCommand<string>
カスタム バインディングの詳細については、http://mvvmcross.wordpress.comの N=28 を参照してください。