MvvmCross:如何使用ICommand再次调用当前视图模型?

时间:2013-09-04 20:38:30

标签: ios xamarin mvvmcross

我尝试进行基本表单验证,要求必须填写表单上的某些字段。 我试图对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>();
    }        

1 个答案:

答案 0 :(得分:1)

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

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