2013-06-24 2 views
1

Я использую управление сеткой Xceed's wpf, чтобы показать некоторые из моих свойств конфигурации. Я делаю через { SelectedObject="{Binding Entity.Configuration} }, где объект Configuration содержит список свойств, и этот объект создается во время выполнения с использованием xml-файла.Xceed WPF Propertygrid: проверка полей свойств сетки

Мне нужно сделать проверку на эти свойства (например, значения max/min). Однако я не нашел способ сделать валидацию. Может ли кто-нибудь дать мне знать, если они есть?

ответ

1

Добавьте следующий к классу:

using System.ComponentModel.DataAnnotations; 

public class YourClass : DataErrorInfoImpl 
{ 
    [Range(0, 100 , ErrorMessage = "The number must be from [0,100].")] 
    Double SomeNumberToValidate {get;set;} 

} 

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; 
     } 
    } 
} 

Раскрытие информации: я вытащил некоторые из этого кода из propertytools свойств сетки. Он работает как с библиотекой Xceed, так и с PropertyTools.