首页 / 软件开发 / Silverlight / 稳扎稳打Silverlight(51) - 4.0绑定之数据验证IDataErrorInfo,INotifyDataErr
稳扎稳打Silverlight(51) - 4.0绑定之数据验证IDataErrorInfo,INotifyDataErr2010-11-01 博客园 webabcd稳扎稳打Silverlight(51) - 4.0绑定之数据验证IDataErrorInfo,INotifyDataErrorInfo介绍Silverlight 4.0 数据验证:* IDataErrorInfo - 对数据实体类提供自定义验证支持。.NET Framework 也有此接口,可以方便移植* INotifyDataErrorInfo - 对数据实体类提供自定义验证支持,比 IDataErrorInfo 功能更强大。INotifyDataErrorInfo 支持异步验证,这就意味着其可以通过验证方法调用 Web 服务和用回调方法更新错误集合来添加服务器端验证 在线DEMOhttp://www.cnblogs.com/webabcd/archive/2010/08/09/1795417.html示例1、演示 IDataErrorInfo 的应用IDataErrorInfoModel.cs代码/*
* IDataErrorInfo - 对数据实体类提供自定义验证支持。.NET Framework 也有此接口,可以方便移植
* string Error - 获取对象的验证错误信息
* string this[string columnName] - 获取对象的指定字段的验证错误信息
*/
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace Silverlight40.Binding
{
public class IDataErrorInfoModel : System.ComponentModel.IDataErrorInfo
{
// 验证错误的提示信息
private const string ID_ERROR = "id 不能小于 10";
private const string NAME_ERROR = "name 不能包含空格";
private const string NAME_WARNING = "name 不能小于 5 个字符";
// 用于保存验证错误信息。key 保存所验证的字段名称;value 保存对应的字段的验证错误信息列表
private Dictionary<String, List<String>> errors = new Dictionary<string, List<string>>();
private int _id;
[Display(Name = "标识")]
public int Id
{
get { return _id; }
set
{
if (value > 1000)
throw new Exception("太大了");
if (IsIdValid(value) && _id != value)
_id = value;
}
}
private string _name;
[Display(Name = "名称")]
public string Name
{
get { return _name; }
set
{
if (IsNameValid(value) && _name != value)
_name = value;
}
}
public bool IsIdValid(int value)
{
bool isValid = true;
if (value < 10)
{
AddError("Id", ID_ERROR);
isValid = false;
}
else
{
RemoveError("Id", ID_ERROR);
}
return isValid;
}
public bool IsNameValid(string value)
{
bool isValid = true;
if (value.Contains(" "))
{
AddError("Name", NAME_ERROR);
isValid = false;
}
else
{
RemoveError("Name", NAME_ERROR);
}
if (value.Length < 5)
{
AddError("Name", NAME_WARNING);
isValid = false;
}
else
{
RemoveError("Name", NAME_WARNING);
}
return isValid;
}
public void AddError(string propertyName, string error)
{
if (!errors.ContainsKey(propertyName))
errors[propertyName] = new List<string>();
if (!errors[propertyName].Contains(error))
errors[propertyName].Add(error);
}
public void RemoveError(string propertyName, string error)
{
if (errors.ContainsKey(propertyName) && errors[propertyName].Contains(error))
{
errors[propertyName].Remove(error);
if (errors[propertyName].Count == 0)
errors.Remove(propertyName);
}
}
public string Error
{
get { return errors.Count > 0 ? "有验证错误" : "没有验证错误"; }
}
public string this[string propertyName]
{
get
{
if (errors.ContainsKey(propertyName))
return string.Join(Environment.NewLine, errors[propertyName]);
else
return null;
}
}
}
}