2014-01-26 91 views
3

我需要驗證綁定到一個文本框的字段顯示數據錯誤,它的DataContext實現IDataErrorInfo的驗證,對多個控件

<TextBox x:Name="txt" Text="{Binding PatientID, ValidatesOnDataErrors=True}" /> 

我需要的錯誤在文本框併爲要顯示簡單起見2周以上的TextBlocks在我的表格:

<TextBox x:Name="txt" Text="{Binding Name, ValidatesOnDataErrors=True}" /> 
    <TextBlock Text="TXT 1" Validation.ValidationAdornerSiteFor="{Binding ElementName=txt}" /> 
    <TextBlock Text="TXT 2" Validation.ValidationAdornerSiteFor="{Binding ElementName=txt}" /> 

這裏的問題是,使用ValidationAdornerSiteFor母鹿不是離開驗證的文本框 標記上它使用Validation.ValidationAdornerSiteFor 僅應用於UIElement的文本框其次使用Validation.ValidationAdornerSiteFor只留下最後的UIElement它用它標明驗證錯誤(TXT 2)

我可以使用什麼機制來顯示在3個不同控件上的一個字段上引發的驗證錯誤,包括實際綁定到該字段的控件(即TextBox),

通過顯示驗證錯誤我是指控件上的紅色邊框(或任何驗證模板)。

回答

1

簡單的方法(但不是泛型)將創建一個行爲,它將一個處理程序添加到OnDataError。

行爲將包含5 DP的: 3×FrameworkElement的(對於文本框) 1布爾其結合視圖模型HasError屬性(新屬性) 1串,其結合在ViewModel ErrorDescription中屬性(新屬性)

現在,只要HasError屬性更改爲True,您就可以創建一個DataTemplate,其中顯示帶有紅色邊框和工具提示的文本框。

再次,這是一個簡單的非通用方法。

+0

誰引發了OnDataError? –

+0

當綁定發生驗證錯誤時,WPF會引發Error事件。您可以使用['AddErrorHandler'](http://msdn.microsoft.com/zh-cn/library/system.windows.controls.validation.adderrorhandler(v = vs.110).aspx)或您註冊它可以實現['INotifyDataErrorInfo'](http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifydataerrorinfo(v = vs.110).aspx),它也包含一個'ErrorsChanged'事件。 –

+0

@Moran這是一個好主意,我會試試看,因爲我在等待更通用的答案,所以我不會將它標記爲答案,如果沒有人會來,我會標記它,謝謝。 –