2011-09-18 19 views
0

上下文:WPF:如何使用裝飾器進行驗證?

我創建使用WPF 4它由兩個Label S,一個TextBox(用於用戶名)和一個PasswordBox一個登錄界面。這兩個元素使用相同的樣式/模板。

的用戶名綁定到一個Username財產在我User模型類,這是在視圖的視圖模型實例化(代表其DataContext

的密碼使用更新模型代碼隱藏事件(即: OnPasswordChanged)。

我也有我的模式這兩種性能代表了我的用戶名和密碼,即有效狀態:

  • UsernameIsValid
  • PasswordIsValid

這些屬性都是由我查看 - 更新模型和服務類。

問:

我怎麼能創造這些元素StyleAdorner,只顯示它時,UsernameIsValidPasswordIsValid屬性是真的嗎?

我還想,如果可能的話,在參數傳遞的文本,顯示在裝飾器(這將是一個標註,其顯示的文字和圖標)

回答

2

現在已經晚了所以不提供代碼但會給你簡短的答案。

  1. 設置數據驗證在屬性文本框綁定過(有效性規則接口)與裝飾器文本框中
  2. 設置默認風格,它應該是什麼時,有效
  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屬性,並且希望根據這些驗證屬性的值顯示/隱藏控件上的裝飾。 (兩個控件都使用相同的樣式)是可能的嗎?如何將裝飾器綁定到樣式,並在驗證屬性上使用觸發器切換它? –

+0

在這種情況下,您應該設置一個基於樣式中的值(bool/false)的觸發器。將它綁定到視圖模型上的bool值。 – tsells