동일한 문제를 가진 다른 사람들을 돕기 위해이 예제 코드를 게시하십시오.
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
namespace ValidationExample
{
public class SomeClass : DataErrorInfoImpl
{
[CustomValidation(typeof (SomeClassValidator), "ValidateSomeTextToValidate")]
string SomeTextToValidate {get;set;}
}
public class SomeClassValidator
{
public static ValidationResult ValidateNumberOfLevelDivisons(string text)
{
if (text != "What every condition i want") return new ValidationResult("Text did not meet my condition.");
return ValidationResult.Success;
}
}
public class DataErrorInfoImpl : IDataErrorInfo
{
string IDataErrorInfo.Error { get { return string.Empty; } }
string IDataErrorInfo.this[string columnName]
{
get
{
var pi = GetType().GetProperty(columnName);
var value = pi.GetValue(this, null);
var context = new ValidationContext(this, null, null) { MemberName = columnName };
var validationResults = new List<ValidationResult>();
if (!Validator.TryValidateProperty(value, context, validationResults))
{
var sb = new StringBuilder();
foreach (var vr in validationResults)
{
sb.AppendLine(vr.ErrorMessage);
}
return sb.ToString().Trim();
}
return null;
}
}
}
}
이 스타일은 WPF Xceed.PropertyGrid 및 WPF PropertyTools.PropertyGrid에 작동합니다.
감사합니다. Botz, ViewModels에서 IDataErrorInfo를 구현 한 방법에 대한 몇 가지 코드를 제공해 주실 수 있습니까? 사실 내 경우에는 (UserControl에서 파생 된) 내 컨트롤에 종속성 속성이 있으므로 이러한 속성의 유효성을 검사해야합니다. – akjoshi
구현 방법을 볼 수있는 링크가 추가되었습니다. – Botz3000
어제 기사를 보았지만 상속 된 컨트롤을 사용하여 IDataErrorInfo를 구현하는 방법에 대해 혼란스러워합니다. BaseControl (몇 가지 일반적인 종속성 속성이 있음) 및 내 컨트롤이이 기본 컨트롤에서 상속되며 다른 종속성 속성이 있습니다. 모든 종속성 속성 (부모 + 자식)에 대한 유효성 검사를 수행해야합니다. – akjoshi