これはちょっとした WPF の whodunnit です。私の検証テンプルは、期待どおりに表示されません
問題
基本的に、ビュー モデルで IDataErrorInfo を使用して、データ入力エラーに関するフィードバックを提供しています。これが呼び出されて期待どおりに動作していることがわかりますが、バインドされたコントロールの検証エラー テンプレートが WPF によって表示されることはありません。
組み込みのデフォルトのテキストボックスの赤枠エラー テンプレート、スタイル エラー テンプレート、およびハード コーディングされたテンプレートの両方を使用してみました。これらはいずれも、データ エラーの状況では表示されません。
Heres 私の xaml バインディング コード:
<TextBox x:Name="txtCaseNumber"
Text="{Binding Path=CaseNumber, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"/>
奇妙なことに、エラーは Validation.Errors コレクションに入ります。次のコードにより、バインドされたコントロールの横に IDataErrorInfo エラー メッセージが表示されます。これにより、問題はviewmodel側ではなくxaml側にあると思います。
<ContentPresenter
Content="{Binding ElementName=txtCaseNumber, Path=(Validation.Errors).CurrentItem}" />
さらに、
System.Windows.Controls.Validation.GetHasError(txtCaseNumber)
true を返します。
それが違いを生む場合、私はwinformsでWPFをホストしています。私のコードやスタイルで Validation または ErrorTemplate への参照が見つからないので、これがスタイリング自体の目標ではないと確信しています。