私は WPF を初めて使用し、(私の意見では) 奇妙な問題を抱えています。ローカル プロパティ (名前: XmlText) を TextBox.Text プロパティにバインドし、次のような検証規則で値を検証したいと考えています。
<TextBox Height="23" Width="301" Margin="78,14,0,0" Name="tbXMLFile" HorizontalAlignment="Left" VerticalAlignment="Top" TextChanged="tbXMLFile_TextChanged">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors),
Converter={StaticResource ErrorsToStringConverter}}"/>
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
<TextBox.Text>
<Binding Path="XmlText" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:RegexValidationRule Dateiendung="xml"></local:RegexValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
プロパティ XmlText が新しい値を取得するたびに、検証は何もしませんが、TextBox に手動でテキストを入力すると、検証されます。
TextChanged-Event を削除するか、次のコードをイベントに追加すると、検証が機能しなくなります。
XmlText = ((TextBox)sender).Text;
プログラムがこのように動作する理由を誰かが説明できますか?