在使用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);
}
}下面是我要验证的内容:
SendEmail == true然后确保电子邮件属性中有一个有效的电子邮件地址。(我并不担心实际的电子邮件地址验证部分本身。)Email属性,请确保它是有效的电子邮件地址。如果SaveMyDataCommand不应该是可执行的。我只是在寻找一个很好的例子,说明如何使用ReactiveUI进行简单/稍微复杂的数据验证。有人能解释一下这件事吗?
发布于 2011-08-19 23:47:57
对于任何想要寻找使用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);
}
}我希望这对某人有帮助!)
发布于 2011-08-19 01:28:20
使用ReactiveValidatedObject,然后使用数据注释(在电话中,对短消息表示歉意)
https://stackoverflow.com/questions/7115509
复制相似问题