2012-04-04 2 views
2

나는 하나 개의 형태로 간단한 윈폼 응용 프로그램, 몇 가지 컨트롤과 같이 정의 된 비즈니스 개체가 : 내 양식에유효하지 않은 입력란이 비즈니스 개체 속성에 바인딩되지 않도록 하시겠습니까?

public class BusinessObject : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, e); 
     } 
    } 

    private string _phoneNumber; 
    public string PhoneNumber 
    { 
     get { return _phoneNumber; } 
     set 
     { 
      if (_phoneNumber == value) 
      { 
       return; 
      } 

      _phoneNumber = value; 
      OnPropertyChanged(new PropertyChangedEventArgs("PhoneNumber")); 
     } 
    } 

을, 나는 바인딩 소스를 통해 PHONENUMBER 속성에 바인딩 된 텍스트 상자를 가지고 데이터 원본 업데이트 모드는 OnPropertyChanged로 설정됩니다. 이것은 모두 예상대로 작동합니다. 내 비즈니스 객체의 PhoneNumber 속성에 할당되기 전에 텍스트에 대한 유효성 검사를해야합니다. 나는이 텍스트 상자에 대한 Validating 이벤트 처리기에서 할 것이라고 생각하고 입력이 잘못된 경우 오류 공급자 표시 및 e.Cancel 설정할 true =. 불행히도, 이것은 유효하지 않은 입력이 PhoneNumber 속성에 바인딩되는 것을 막아주지는 않습니다. 이 작업을 수행하는 쉬운 방법이 있습니까?

+1

업데이트 모드를 OnPropertyChanged로 설정 했으므로 모든 키 스트로크에서 데이터가 개체로 푸시됩니다. 검증 로직을 어떻게 처리합니까? 사용자가 유효성을 검사하기 전에 번호 입력을 마칠 때까지 기다리지 않아도됩니까? –

+0

당신은 절대적으로 맞습니다. :-(텍스트 상자는 사용자가 형식이 지정되지 않은 전화 번호 (형식이 지정되지 않음, 숫자, 아니오 기호, 대시, 팸 등)를 입력하기위한 것입니다. 현재 어떤 종류의 입력도 keydown 또는 keypress 그래서 ABC를 입력하면 받아 들일 수 있습니다. 그리고 OnPropertyChanged를 사용하여 유효성을 검사하기 전에 입력이 각 키스트 로크의 개체로 푸시됩니다. 업데이트 모드를 사용해야한다고 생각합니다. 이 텍스트 상자에 대한 OnValidation? – user685869

답변

1

mrlucmorin에서 제안한 것처럼 "OnPropertyChanged"에서 "OnValidation"으로 업데이트 데이터 원본 모드를 변경하여 텍스트 상자의 유효성이 검사되고 유효성이 검사되었을 때만 바인딩이 수행되도록했습니다. 내 텍스트 상자에 대한 Validating() 이벤트 처리기에서 유효성 검사를 구현하고 데이터가 유효하지 않은 경우 e.Cancel = true로 설정했습니다. 불행하게도, 내 도구 모음에서 단추를 클릭하면 Validating() 이벤트가 발생하지 않도록 텍스트 상자가 포커스를 잃지 않는 것처럼 보이지만 도구 모음 단추를 클릭 할 때 ValidateChildren()을 호출하여이 문제를 해결할 수있었습니다. 궁극적으로 내 문제를 해결 한 제안에 대해 mrlucmorin과 ImGreg에게 다시 한 번 감사드립니다!

0

msdn에 따르면 값이 변경된 후에 사용중인 이벤트가 발생하고 있습니다. 하나의 옵션은 데이터 백업을 저장하고 변경된 값을 복원하는 것입니다. 그러나 이것은 이상적인 접근법이 아닙니다.

컨트롤의 유효성을 검사하는 방법이 변경됩니다.

코드가 작동하는 방식에 따라 달라지는 경우가 언제 확실하지 않습니다. 데이터 소스를 업데이트 할 때 텍스트 상자 컨트롤에 집중하지 않거나 유효성 검사를 수행 할 때 자체 유효성 검사를 수행 할 수 있습니다.

편집 : 아마도 ErrorProvider Class을 찾고 있습니다. 원하는대로 유효성 검사를 처리하는 데 사용할 수 있습니다.

+0

제안을 주셔서 감사합니다 – user685869

1

Data Validation 당신이 찾고있는 것일 수도 있습니다. 잘못된 입력에 의해 개체가 변경되지 않도록해야합니다.

+0

고마워요. 이전에 Google 검색을 통해 그걸 보았지만 WPF에 적용되는 것처럼 보입니다. – user685869

+0

meh, 바보 같이, winforms를 사용하고있는 것을 보지 못했습니다. – shriek

+0

내 편집 @ user685869를 참조하십시오. – ImGreg

관련 문제