2010-03-29 66 views
0

我想知道的XAML樣本(MSDN sample)究竟是如何工作的:爲什麼本驗證示例中的數據綁定工作?

<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}"> 
    <Style.Triggers> 
    <Trigger Property="Validation.HasError" Value="true"> 
    <Setter Property="ToolTip" 
    Value="{Binding RelativeSource={x:Static RelativeSource.Self}, 
        Path=(Validation.Errors)[0].ErrorContent}"/> 
    </Trigger> 
    </Style.Triggers> 
</Style> 

問題:

  • (Validation.Errors)[0] .ErrorContent - 這是莫名其妙的代碼通過WPF檢查?由於Validation.Errors可能是一個空集合,並且在普通的C#代碼中,此代碼可能會引發異常。如果此數據綁定對有效輸入返回null - 則將null值轉換爲空字符串(例如,在文本控件中)?
  • 索引0對應於第一個錯誤消息。我如何從Validate方法返回更多錯誤消息?

謝謝你的迴應!

+0

是否有寫作問題標題的約定?技術的名稱似乎是多餘的,因爲人們不斷從我的問題中刪除它。爲什麼?我認爲當「WPF」出現在問題中時,問題更加清楚。 – 2010-03-29 17:55:18

+0

在大多數情況下,這些標籤可處理該標籤 - 因此您也不需要將其包含在標題中。 – 2010-03-29 18:02:08

+0

@Reed Copsey:我知道這些標籤,但我不確定Google是否也知道它們,因此如果我的問題會出現在結果中。 – 2010-03-29 18:21:15

回答

1

在這種情況下,您的綁定僅在Validation.HasError爲真時(基於觸發器)纔有效。正因爲如此,你的收藏至少會有一個錯誤。

如果您想要顯示的不止是第一個錯誤,您可以在工具提示內部放置一個控件,使其可以綁定到整個集合,例如ListView。這將讓你有一個ListView的ItemsSource綁定到Validation.Errors的集合,而不是隻訪問第一個。

+0

哦,你說得對。我對我正在閱讀的書感到困惑(其中是非常相似的片段),其中帶有「Validation.HasErrors」的部分缺失,並且即使作者聲明它不應該也會引發異常。 但是,如何通過Validate方法的返回值發送更多錯誤? – 2010-03-29 17:48:11

+0

@MartyIX:這確實是一個單獨的問題,但這取決於你如何處理驗證。如果您試圖驗證自己,請查看IDataErrorInfo - 您可以通過這種方式進行驗證,再加上「標準」驗證。 – 2010-03-29 18:02:42

+0

其實我沒有自己的驗證 - 我從WPF開始,這是我書中的一個樣本。我只是好奇而已。謝謝您的回答。 – 2010-03-29 18:19:03

相關問題