2010-06-24 2 views
1

WPF 예외 기반 검증은 초기 상태는 트리거되지

내가의 세터가 (나는 거기에 약간 가까운 중복이 알고 있지만, 그들 중 누구도 나를 도울 수 없었다, 나 좀 들어주세요) 내 뭔가 잘못된 값을 설정하려고 할 때 적절한 예외를 throw하는 모델입니다. 이것은 사용자가 새로운 값을 입력 할 때 유효성 검사에 대해 이상하게 작동합니다.

그러나 새 모델 객체를 만들 때 초기 상태가 유효하지 않을 수 있습니다 (설명 등에 값이 없음). 물론 이것은 유효성을 검사하지 않지만 값을 설정하려고 시도하지 않고 예외가 발생하지 않습니다. ExceptionValidationRule을 잡을 때 던졌습니다.

간단한 솔루션 I은 가지고

  1. 캐치 현재 오브젝트의 변화, 이에 따라 갱신하도록 ExceptionValidationRule 트리거링 (-유효성 검사를 다시 실행하도록 .set_Value 부를 야기하는 Current.Value = Current.Value 형 평가를 트리거 상태. 그러나,이 더럽고 잘못된

  2. 캐치에게 객체의 변화를 느끼고 수동 특성 별 특성 검증을 호출하고 어떻게 든,255를 업데이트및 Validation.Errors은 시각적 상태를 업데이트하기 위해 개체를 트리거합니다. 아마 와이어 뭔가 위로가 이러한 상황 중 하나를 위해 일 것입니다 수, 이 더 무엇보다도 해킹 같은 느낌, 그리고 그것이 지금 가장 큰 문제는

대해 이동하는 방법을 잘 모르겠어요 . 하지만 그들은 MVVM 구조를 완전히 위반했습니다. 이러한 종류의 유효성 검사를 MVVM에 직접 적용하는 방법에 대한 단서가 없습니다.

  • 본인은 제 바인딩 유형 인 주사위를 만들지 않았습니다.
  • 내 아이를 캡처하는 장식을 만드는 살펴 보았다는 작동 할 수 있습니다 : 그것은 this[string] 인덱서의 사용을 필요로
  • 내가 IDataError 구현을 검토 한
  • , 이것은 나를 위해 작동하지 않습니다 추가 정보 필요, 이는 기존 모델 객체의 구현과 충돌합니다.

그래서 나는 아이디어 나갈거야, 나는이 문제를 해결하는 방법에 대한 몇 가지 통찰력, SO 당신에게 을 돌리겠다.

답변

2

모델이 유효하지 않은 상태 일 경우 IDataErrorInfo을 구현하는 것이 가장 적합한 해결책으로 보입니다. IDataErrorInfo의 문제는 모델에 문자열 매개 변수를 사용하는 인덱서가 이미 있습니까? 당신은 공개 인덱서 별도로 IDataErrorInfo을 구현하기 위해 explicit interface implementation을 사용할 수 있습니다 : 당신이 모든 모델을 수정할 수없는 경우

public class Model 
    : IDataErrorInfo 
{ 
    public string this[string parameter] 
    { 
     get { /* Your current indexer */ } 
    } 

    string IDataErrorInfo.this[string columnName] 
    { 
     get { /* IDataErrorInfo indexer implementation */ } 
    } 

    /* ... */ 
} 

는, 당신은 모델을 감싸고 IDataErrorInfo를 구현하는 뷰 모델 클래스를 만들 수 있습니다.

1

나는 IDataErrorInfo 인터페이스가 최선의 선택 일 수 있다고 Quartermeister에 동의합니다.이 [string] 인덱서를 구현할 수 없으면 명시 적 멤버로 인터페이스를 구현할 수 있습니다.

string IDataErrorInfo.this[string memberName] 
{ 
    get { return ... } 
} 

당신은 IDataErrorInfo 인터페이스는 MVVM와 함께 사용할 수있는 방법을 보여줍니다 WPF Application Framework (WAF)BookLibrary 샘플 응용 프로그램을 살펴해야 할 수도 있습니다.

관련 문제