数据表单中的Silverlight MVVM验证
我使用的是通用数据类,所以我不能使用ria服务属性来控制我的验证——所以我正在寻找一种方法来手动设置验证以在数据表单中工作数据表单中的Silverlight MVVM验证,silverlight,mvvm,Silverlight,Mvvm,我使用的是通用数据类,所以我不能使用ria服务属性来控制我的验证——所以我正在寻找一种方法来手动设置验证以在数据表单中工作 public partial class DataValue { private Dictionary<string, string> _errors = new Dictionary<string, string>(); public Dictionary<string, string> Er
public partial class DataValue
{
private Dictionary<string, string> _errors = new Dictionary<string, string>();
public Dictionary<string, string> Errors
{
get { return _errors; }
}
public Object Value
{
get
{
object result = new object();
switch ((DataType)this.ModelEntity.ModelItem.DataType)
{
case DataType.Money:
return result = this.ValueText.ParseNullableFloat();
case DataType.Integer:
return result = this.ValueText.ParseNullableInt();
case DataType.Date:
case DataType.Time:
return result = this.ValueText.ParseNullableDateTime();
case DataType.CheckBox:
return result = this.ValueText;
default:
return result = this.ValueText;
}
}
set
{
if (!String.IsNullOrEmpty(value.ToString()))
{
bool invalid = false;
switch ((DataType)this.ModelEntity.ModelItem.DataType)
{
case DataType.Money:
float val;
if (!float.TryParse(value.ToString(), out val)) invalid = true;
break;
case DataType.Integer:
int val2;
if (!Int32.TryParse(value.ToString(), out val2)) invalid = true;
break;
case DataType.Date:
case DataType.Time:
DateTime val3;
if (!DateTime.TryParse(value.ToString(), out val3)) invalid = true;
break;
}
if (invalid == false)
ValueText = value.ToString();
else
{
ValueText = "";
_errors.Add(this.ModelEntity.LocalName, "error writing " + value.ToString() + " to " + this.ModelEntity.ModelItem.Label);
}
}
else
ValueText = "";
}
}
所以在ASP MVC中,我只是在提交表单时手动检查这些规则。。。我想这正是我在MVVM中想要做的(我只是不确定最好的方法)
ASP代码
protected bool ModelErrors(RecordDictionary record)
{
bool result = false;
foreach (var field in record)
{
foreach (var error in field.Value.Errors)
{
result = true;
ModelState.AddModelError(error.Key + "Validation", error.Value.ToString());
}
}
return result;
}
Silverlight 3内置验证基于异常 只需在泛型Setter中抛出一个有意义的异常,您就可以了。 记住在{Binding}上设置ValidatesOnException=True和NotifyOnValidationError=True
Jesse在他的博客上有一个例外验证的例子 您可以使用属性附加验证属性。
一旦这些验证在DomainService中公开,RIA服务将在客户端自动为您生成这些验证 例如:
[MetadataType(typeof(ContactMd))]
public partial class Contact
{
internal class ContactMd
{
[MyCustomValidation]
public string Name { get; set; }
}
}
(MyCustomValidation
指从中继承的任何内容)
[MetadataType(typeof(ContactMd))]
public partial class Contact
{
internal class ContactMd
{
[MyCustomValidation]
public string Name { get; set; }
}
}