2011-01-31 3 views
1

좋아, 그래서 난 항목의 너비가 해당 항목에 주어진 범위 내에 있는지 확인 ValidationRule 만들려고 했어요. 내 시도는 다음과 같습니다.WPF ValidationRule : 유효성 검사를하는 방법을 어떻게 알 수 있습니까?

public class AdjustWidthValidationRule : ValidationRule 
{ 
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
     double dValue = (double)value; 

     if (dValue < ??? || dValue > ???) 
      return new ValidationResult(false, "Width is out of range!"); 

     return new ValidationResult(true, null); 
    } 
} 

이제 확인하려면 어떤 요소를 알아야할까요? 이것은 하드 코딩 된 유효성 검사 규칙 만 지원하는 것으로 보이며 실제로 사용하지 않는 것 같습니다. 유효성을 검사 할 컨텍스트가 필요합니다. 뭔가 이해 못 하겠니? 나이와 필드 길이만으로이 사람이 있습니까? 정적 상태 머신을 제공해야합니까? 이것은 1990 년대입니까? 나는 매우 좌절하고있다.

답변

0

인수로 얻는 "값"개체의 유효성을 검사합니다. 어떤 종류의 물건인지 알아야합니다. 당신이 AdjustWidthValidationRule 클래스의 속성을 정의 할 수 있습니다, 하드 코딩 된 값을 사용하는 것이 더 재사용하지 만들려면, 뭔가 같은 :

public class AdjustWidthValidationRule : ValidationRule 
{ 
    public double Max { get; set; } 
    public double Min { get; set; } 

    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
     double dValue = (double)value; 

     if (dValue < Min || dValue > Max) 
      return new ValidationResult(false, "Width is out of range!"); 

     return new ValidationResult(true, null); 
    } 
} 

당신은 당신의 XAML에서 최대 및 최소 값을 제공 할 수 있습니다 (또는 당신이 ValidationRule 곳을 만들).

+0

XAML 안에 AdjustWidthValidationRule을 만들고 있습니다. 내가 아는 한, XAML 내에서만 종속성 개체에 대한 종속성 속성을 설정할 수 있습니다. ValidationRule은 종속성 개체가 아닙니다. – Jordan

+0

당신이 말하는 것을 이해한다고 생각하지만, (슬프게도) ValidationRule은 DependencyObject가 아니기 때문에 바인드 할 수 없으며 값만 제공 할 수 있습니다. 이 문제를 어떻게 든 극복하는 트릭이 있지만 (여기를보십시오 : http://www.11011.net/wpf-binding-properties), 그렇지 않으면 좀 더 간단한 검증 스키마를 고수해야 할 것입니다. –

+0

고마워요,하지만 그건 받아들이지 않습니다. 이 WPF 유효성 검사 방법은 실제 세계에서는 사용할 수 없습니다. 모든 유효성 검사는 일종의 컨텍스트를 기반으로하며 유효성 검사를위한 컨텍스트를 전혀 제공하지 않기 때문에 잘못된 디자인 일뿐입니다. – Jordan

관련 문제