lpi*_*nho 3 xamarin.ios mvvmcross xamarin
我有一个登录按钮绑定到我ViewModel喜欢的命令中,所以:
this.AddBindings(new Dictionary<object, string>{{btnLogin,"TouchUpInside LoginCommand"}});
Run Code Online (Sandbox Code Playgroud)
如果在键盘外部某处进行触摸,则会禁止软键盘UITextField.为了防止用户必须在屏幕上某处单击一次以使键盘消失然后按下登录按钮,我想将键盘中定义的登录命令ViewModel与"GO"键相关联.这可能吗?
简单的解决方案是前一个答案中给出的解决方案.
但是,如果你想进一步,那么你可以添加一个自定义绑定,实现如下:
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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在设置期间注册为:
registry.RegisterCustomBindingFactory<UITextField>("ShouldReturn",
textField => new MvxUITextFieldShouldReturnTargetBinding(textField));
Run Code Online (Sandbox Code Playgroud)
我认为这样可行 - 它应该允许你绑定一个MvxCommand或一个MvxCommand<string>
有关自定义绑定的更多信息,请参阅http://mvvmcross.wordpress.com中的 N = 28
您无法绑定按钮本身.这取决于UIView触发键盘具有GO按钮的聚焦.即如果是a,UITextField你可以为ShouldReturn属性分配一个函数或委托,然后触发你的LoginCommand.就像是:
myUiTextField.ShouldReturn += delegate
{
ViewModel.LoginCommand.Execute(null);
return true;
};
Run Code Online (Sandbox Code Playgroud)
在Xamarin.iOS API文档中阅读有关该属性的更多信息.
| 归档时间: |
|
| 查看次数: |
1250 次 |
| 最近记录: |