2011-09-18 5 views
0

상황 :WPF : 유효성 검사를 위해 장식자를 사용하는 방법?

내가 두 Label의 한 TextBox (사용자 이름에 대한) 하나 PasswordBox 구성 WPF 4를 사용하여 로그인 인터페이스를 만드는거야. 두 요소 모두 동일한 스타일/템플릿을 사용합니다.

사용자 이름이

암호 (그 DataContext를 나타내는)보기의보기 - 모델에서 인스턴스화 내 User 모델 클래스에 Username 속성에 바인딩을 사용하여 모델을 업데이트 코드 숨김 이벤트 (예 : OnPasswordChanged). PasswordIsValid

그 속성

  • UsernameIsValid
  • 내보기 - 업데이트됩니다 즉 사용자 이름과 암호의 유효 상태를 나타냅니다

    나는 또한 내 모델의 두 가지 속성을 가지고 모델 및 서비스 클래스.

    질문 :

    이 어떻게 이러한 요소 'Style에 대한 Adorner을 만들 수 있고, UsernameIsValid 또는 PasswordIsValid 속성에 해당하는 경우에만 표시? , 매개 변수에 텍스트를 통과 할 수있는 경우

    는 또한 늦었 코드를 제공하므로 아니에요

답변

2

(텍스트를 표시하는 선, 그리고 아이콘이 될 것이다)를 adorner에 표시하기, 싶습니다 그러나 당신에게 짧은 대답을 줄 것입니다.

  1. 설정 데이터 유효성 검사 속성에 텍스트 상자가 너무 유효
  2. 가 스타일을 설정하면 그것이 있어야 무엇을 (ValidationRule 인터페이스) adorner 텍스트 상자에
  3. 설정 기본 스타일 무엇을해야 바인딩 DataError 트리거를 사용하여 유효하지 않은 경우가됩니다.

다음은 스타일을 뒤집을 xaml 코드를 얻는 방법입니다.

 <Style.Triggers> 
      <Trigger Property="Validation.HasError" Value="true"> 
       <Setter Property="BorderBrush" Value="Red"/> 
       <Setter Property="BorderThickness" Value="1" /> 
       <Setter Property="Foreground" Value="Red" /> 
       <Setter 
        Property="ToolTip" 
        Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=(Validation.Errors)[0].ErrorContent}" /> 
      </Trigger> 
     </Style.Triggers> 
+0

답변을 주셔서 감사합니다. 여기에서 문제는 제공된 신탁 자료가 유효하지 않은 경우에 표시를하고 싶습니다. (즉, 사용자 이름/비밀번호가 데이터베이스의 항목과 일치하지 않음). 즉, 내 View-Model의 UsernameIsValid 및 PasswordIsValid 속성을 업데이트하고 해당 유효성 검사 속성의 값에 따라 컨트롤의 표시기를 표시하거나 숨기고 싶습니다. (두 컨트롤 모두 같은 스타일을 사용합니다.) 그런 일이 가능합니까? 어떻게 adorner를 스타일에 바인딩하고 유효성 검사 속성에서 트리거를 사용하여 토글 할 수 있습니까? –

+0

이 경우 스타일의 값 (bool/false)을 기반으로 트리거를 설정해야합니다. 이 값을 뷰 모델의 bool 값에 바인드합니다. – tsells