Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 反应UI和验证_Silverlight_Validation_Silverlight 4.0_Reactiveui_Reactivevalidatedobject - Fatal编程技术网

Silverlight 反应UI和验证

Silverlight 反应UI和验证,silverlight,validation,silverlight-4.0,reactiveui,reactivevalidatedobject,Silverlight,Validation,Silverlight 4.0,Reactiveui,Reactivevalidatedobject,在使用ReactiveUI执行数据验证时,什么是“最佳实践”?假设我有一个视图模型,如下所示: public class MyViewModel: ReactiveObject { public ReactiveAsyncCommand SaveMyDataCommand { get; protected set; } private string _email; public string Email { get { return _email

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

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);
    }
}
以下是我要验证的内容:

  • 如果
    sendmail==true
    ,请确保电子邮件属性中有有效的电子邮件地址。(我并不担心实际的电子邮件地址验证块本身。这只是一个假设情况。)
  • 如果将值设置为
    电子邮件
    属性,请确保它是有效的电子邮件地址
  • 如果其中一个为1。或2。验证失败,
    SaveMyDataCommand
    不应是可执行的

  • 我只是想找一个关于如何使用ReactiveUI进行简单/稍微复杂的数据验证的好例子。有人能解释一下吗?

    使用ReactiveValidatedObject,然后使用数据注释(在电话上,抱歉发短信)

    使用ReactiveValidatedObject,然后使用数据注释(在电话上,抱歉发短信)

    对于任何正在寻找使用
    ReactiveValidatedObject
    的示例的人,下面是对我有效的方法。请注意,您还必须在类中添加对
    System.ComponentModel
    的引用

    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);
      }
    }
    

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

    对于任何正在寻找使用
    ReactiveValidatedObject
    的示例的人,以下是对我有用的内容。请注意,您还必须在类中添加对
    System.ComponentModel
    的引用

    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);
      }
    }
    

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

    谢谢你的回复,保罗。我已切换到
    ReactiveValidatedObject
    并发现此线程:。我已经用
    [ValidateViaMethod]
    属性标记了我的
    电子邮件
    属性,但我不确定从哪里开始。我创建了一个名为
    IsEmailValid
    的方法,但它似乎从未命中该方法。你有没有一个简单的例子来说明如何做到这一点?ReactiveValidatedObject已经不存在了。感谢Paul的回复。我已切换到
    ReactiveValidatedObject
    并发现此线程:。我已经用
    [ValidateViaMethod]
    属性标记了我的
    电子邮件
    属性,但我不确定从哪里开始。我创建了一个名为
    IsEmailValid
    的方法,但它似乎从未命中该方法。你有没有一个简单的例子来说明如何实现这一点?ReactiveValidatedObject已经不存在了。谢谢你的例子。。。出于好奇,您知道是否有理由对CustomValidationAttribute使用ValidateViaMethod吗?还是只是个人喜好?CustomValidationAttribute很好,因为您可以返回带有所需消息的validationresult,因此更容易从那里概括错误消息。我意识到你也可以使用一个信息资源。但我只是好奇,除了个人偏好之外,是否还有其他原因使用其中一种方法……@PureWeen我使用了
    ValidatesViaMethod
    ,只是因为对我来说,查看代码时更容易理解。这就是有效的方法。:)谢谢你的例子。。。出于好奇,您知道是否有理由对CustomValidationAttribute使用ValidateViaMethod吗?还是只是个人喜好?CustomValidationAttribute很好,因为您可以返回带有所需消息的validationresult,因此更容易从那里概括错误消息。我意识到你也可以使用一个信息资源。但我只是好奇,除了个人偏好之外,是否还有其他原因使用其中一种方法……@PureWeen我使用了
    ValidatesViaMethod
    ,只是因为对我来说,查看代码时更容易理解。这就是有效的方法。:)