鍵我有一個登錄按鈕綁定到在我的ViewModel
像這樣存在一個命令:綁定「GO」上的軟件鍵盤
this.AddBindings(new Dictionary<object, string>{{btnLogin,"TouchUpInside LoginCommand"}});
如果觸摸被進行的軟件鍵盤被抑制,鍵盤之外的某處或UITextField
。 爲了防止用戶在屏幕上某處點擊一下,使鍵盤消失,然後按下登錄按鈕,我想將ViewModel
中定義的登錄命令與鍵盤。這可能嗎?
鍵我有一個登錄按鈕綁定到在我的ViewModel
像這樣存在一個命令:綁定「GO」上的軟件鍵盤
this.AddBindings(new Dictionary<object, string>{{btnLogin,"TouchUpInside LoginCommand"}});
如果觸摸被進行的軟件鍵盤被抑制,鍵盤之外的某處或UITextField
。 爲了防止用戶在屏幕上某處點擊一下,使鍵盤消失,然後按下登錄按鈕,我想將ViewModel
中定義的登錄命令與鍵盤。這可能嗎?
簡單的解決方案是在上一個答案中給出的。
但是,如果你想走得更遠,那麼你可以添加自定義綁定,實現這樣的:
registry.RegisterCustomBindingFactory<UITextField>("ShouldReturn",
textField => new MvxUITextFieldShouldReturnTargetBinding(textField));
我認爲:
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;
}
}
}
}
,你可以設置爲在登記會工作 - 它應該允許您綁定一個MvxCommand
或MvxCommand<string>
有關自定義綁定的更多信息,請參閱中的N =
您無法綁定按鈕本身。這取決於專注的UIView
,這會觸發鍵盤具有GO
按鈕。即如果它是UITextField
,則可以將函數或委託分配給ShouldReturn
屬性,然後該屬性會觸發LoginCommand
。例如:
myUiTextField.ShouldReturn += delegate
{
ViewModel.LoginCommand.Execute(null);
return true;
};
瞭解更多關於該物業的Xamarin.iOS API documentation。
小記,一個布爾值的回報預期: myUiTextField.ShouldReturn + =(文本框)=> { CurrentViewModel.LoginCommand.Execute(空); 返回true; }; – lpinho