「INotifyDataErrorInfo」や「IDataErrorInfo」インターフェースとスタイルトリガー利用したエラーメッセージ表示で発生する例外の対処方法です。
エラーの例
入力エラーが解消された際に次のようなエラーが発生する場合があります。System.Windows.Data Error: 17 : Cannot get 'Item[]' value (type 'ValidationError') from '(Validation.Errors)' (type 'ReadOnlyObservableCollection`1'). BindingExpression:Path=(0)[0].ErrorContent; DataItem='TextBox' (Name='textBox2'); target element is 'TextBox' (Name='textBox2'); target property is 'ToolTip' (type 'Object') ArgumentOutOfRangeException:'System.ArgumentOutOfRangeException: 指定された引数は、有効な値の範囲内にありません。
パラメーター名:index'
原因
エラーがないときはValidation.Errors配列が空になるため、バインディングで配列を参照していると例外が発生します。対処方法
配列ではなく「CurrentItem.ErrorContent」を参照するようにします。-
「(Validation.Errors)[0].ErrorContent」ではエラーがないときに例外発生
<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>
-
「(Validation.Errors).CurrentItem.ErrorContent」とする
<Style.Triggers> <Trigger Property="Validation.HasError" Value="true"> <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}"/> </Trigger> </Style.Triggers>
サンプルコードのダウンロード
サンプルコードの実行には Microsoft Visual Studio 2015 以上のバージョンが必要です。検証環境
- Microsoft Visual Studio Professional 2015 Version 14.0.25431.01 Update 3
- Microsoft .NET Framework Version 4.6.01055
- Microsoft Windows 7 Professional Service Pack 1 (Microsoft Windows NT 6.1 (7601))