我尝试进行基本表单验证,要求必须填写表单上的某些字段。 我试图对ViewModel进行Validation检查,我有一个ValidateForm函数,并且会返回一个ValidationMessage,但是,当SaveCommand得到调用并且它不会再次回调当前的View时,所以错误消息Alert View将不会弹出。在SaveCommand完成后,如何再次调用当前的视图模型?
private string _ValidationMessage;
public string ValidationMessage
{
get { return _ValidationMessage; }
set
{
_ValidationMessage = value;
RaisePropertyChanged(() => ValidationMessage);
}
}
private string ValideForm()
{
if (string.IsNullOrEmpty(FirstName) || string.IsNullOrEmpty(LastName) || string.IsNullOrEmpty(Email) || string.IsNullOrEmpty(ZipCode))
return "Fields with * are required.";
return null;
}
private MvxCommand _saveCommand;
public ICommand SaveCommand
{
get
{
_saveCommand = _saveCommand ?? new MvxCommand(SaveCommandHandler);
return _saveCommand;
}
}
private void SaveCommandHandler()
{
var validationMessage = ValideForm();
if (!string.IsNullOrEmpty(validationMessage))
{
ValidationMessage = validationMessage;
return;
}
ShowViewModel<NextScreenViewModel>();
}
答案 0 :(得分:1)
我认为这与MvvmCross Dialog的问题相同。那里的海报提出了几种方法来做到这一点,我的回答也涵盖了另一种“建筑”方式。
如果您更喜欢更简单的方法,那么您也可以使用字符串属性 - 例如ErrorMessage
。视图可以侦听该字符串中的更改。当它们发生时,
然后视图可以显示错误对话框。这有点像此视频和代码中进度对话的方法 - N = 34 - http://slodge.blogspot.co.uk/2013/07/n34-showing-progress-isbusy-display-n1.html