首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReactiveUI与验证

ReactiveUI与验证
EN

Stack Overflow用户
提问于 2011-08-18 23:51:49
回答 2查看 1.3K关注 0票数 1

在使用ReactiveUI执行数据验证时,什么是“最佳实践”?假设我有一个视图模型,如下所示:

代码语言:javascript
复制
public class MyViewModel: ReactiveObject
{
    public ReactiveAsyncCommand SaveMyDataCommand { get; protected set; }

    private string _email;
    public string Email
    {
        get { return _email; }
        set
        {
          _email = value;
          raisePropertyChanged("Email");
        }
    }

    private string _name;
    public string Name
    {
        get { return _name; }
        set
        {
          _name= value;
          raisePropertyChanged("Name");
        }
    }

    private bool _sendEmail = false;
    public bool SendEmail
    {
        get { return _sendEmail; }
        set
        {
          _sendEmail = value;
          raisePropertyChanged("SendEmail");
        }
    }  

    public MyViewModel()
    {
        SaveMyDataCommand = new ReactiveAsyncCommand(null, 1);
    }
}

下面是我要验证的内容:

  1. If SendEmail == true然后确保电子邮件属性中有一个有效的电子邮件地址。(我并不担心实际的电子邮件地址验证部分本身。)
  2. 如果将值设置为Email属性,请确保它是有效的电子邮件地址。如果
  3. (如果验证失败),则SaveMyDataCommand不应该是可执行的。

我只是在寻找一个很好的例子,说明如何使用ReactiveUI进行简单/稍微复杂的数据验证。有人能解释一下这件事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-19 23:47:57

对于任何想要寻找使用ReactiveValidatedObject的例子的人来说,下面是对我有用的方法。请注意,您还必须向类中添加对System.ComponentModel的引用。

代码语言:javascript
复制
public class MyViewModel: ReactiveValidatedObject
{
  public ReactiveAsyncCommand SaveMyDataCommand { get; protected set; }

  // THIS PROPERTY INDICATES WHETHER ALL FIELDS HAVE BEEN VALIDATED
  public bool IsSaveEnabled
  {
    get { return IsObjectValid(); }
  }

  private string _email;
  [ValidatesViaMethod(AllowBlanks=true,AllowNull=true,Name="IsEmailValid",ErrorMessage="Please enter a valid email address")]
  public string Email
  {
    get { return _email; }
    set
    {
      _email = value;
      raisePropertyChanged("Email");
      SendEmail = SendEmail;
      raisePropertyChanged("IsSaveEnabled");
    }
  }

  private string _name;
  public string Name
  {
    get { return _name; }
    set
    {
      _name= value;
      raisePropertyChanged("Name");
    }
  }

  private bool _sendEmail = false;
  [ValidatesViaMethod(Name = "IsSendEmailValid", ErrorMessage = "Make sure a valid email address is entered.")]
  public bool SendEmail
  {
    get { return _sendEmail; }
    set
    {
      _sendEmail = value;
      raisePropertyChanged("SendEmail");
      raisePropertyChanged("IsSaveEnabled");
    }
  }  

  public bool IsEmailValid(string email)
  {
    if (string.IsNullOrEmpty(email))
    {
      return true;
    } 

    // Return result of Email validation
  }

  public bool IsSendEmailValid(bool sendEmail)
  {
     if (sendEmail)
     {
       if (string.IsNullOrEmpty(Email))
       {
         return false;
       }

       // Return result of Email validation
     }
  }

  public MyViewModel()
  {
    SaveMyDataCommand = new ReactiveAsyncCommand(null, 1);
  }
}

我希望这对某人有帮助!)

票数 3
EN

Stack Overflow用户

发布于 2011-08-19 01:28:20

使用ReactiveValidatedObject,然后使用数据注释(在电话中,对短消息表示歉意)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7115509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档