3

私のViewModelような内部に存在するコマンドにバインドされたログインボタンがあります:

this.AddBindings(new Dictionary<object, string>{{btnLogin,"TouchUpInside LoginCommand"}});

キーボードまたは の外側のどこかにタッチすると、ソフトウェア キーボードが抑制されUITextFieldます。ユーザーが画面のどこかをクリックしてキーボードを非表示にし、ログイン ボタンを押す必要がないようにするために、で定義されたログイン コマンドをViewModelキーボードの「GO」キーに関連付けたいと思います。これは可能ですか?

4

2 に答える 2

6

簡単な解決策は、前の回答で与えられたものです。

ただし、さらに先に進みたい場合は、次のような実装のカスタム バインディングを追加できます。

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 を参照してください。

于 2013-10-18T17:45:24.083 に答える