为WP7 7.0应用程序(SL3)执行此操作的最佳方法是什么。我应该使用视觉状态吗?有没有办法使用类似于Silverlight示例的模型类型的属性? MVVM + WP7有什么好的例子吗?
到目前为止,我只能找到这两个例子。
http://babaandthepigman.wordpress.com/2010/10/21/simple-textbox-validation-wp7/ http://www.windowsphonegeek.com/articles/Building-WP7-Custom-Validation-Control---Architecture-amp-Basic-Prototype
答案 0 :(得分:0)
对于每个视图,您应该创建名为Validated(ViewName).cs的文件。每个人都应该继承ValidatedModelBase实现的接口INotifyPropertyChanged,INotifiDataError。
ValidationModelBase的属性: 已验证 ShowErrors
方法: T ToModel - 将所有ValidatedModel字段转换为ViewModel void验证:
public void Validate()
{
var fields = new List<string>();
var type = this.GetType();
var baseType = typeof(ValidatedModelBase<T>);
while (type != baseType)
{
fields.AddRange(type.GetFields()
.Where(field => field.FieldType == typeof(String) && field.Name.EndsWith("PropertyName"))
.Select(field => field.GetValue(this) as String));
type = type.BaseType;
}
foreach (var field in fields)
{
this.SetErrors(field, this.Validate(field), false);
}
this.RefreshIsValid();
}
virtual IList Validate(string propertyName) - 它将在ValidatedModels中实现,您可以在其中将属性名称作为参数进行验证,并在简单的switch / case指令中处理它。
如果你愿意,我可以写更多关于我的方法。