0

我尝试进行基本的表单验证以要求必须填写表单上的某些字段。我尝试对 ViewModel 进行验证检查,我有一个 ValidateForm 函数并将返回一个 ValidationMessage,但是,当 SaveCommand 调用它时不会再次回调当前视图,因此不会弹出错误消息警报视图。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>();
    }        
4

1 回答 1

1

我认为这与MvvmCross Dialog是同一个问题。那里的海报建议了几种方法来做到这一点,我的回答也涵盖了另一种“架构”方式。

如果您更喜欢更简单的方法,那么您也可以只使用字符串属性 - 例如ErrorMessage. 视图可以监听该字符串的变化。当它们发生时,视图会显示一个错误对话框。这有点像本视频和代码中的进度对话框所采用的方法 - N=34 - http://slodge.blogspot.co.uk/2013/07/n34-showing-progress-isbusy-display-n1.html

于 2013-09-05T06:07:51.673 回答