次の例を検討してください。実際には、バインディングソースはデータオブジェクトである可能性が高いことに注意してください。TextBlock
簡単にするためにを使用しています。
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel Margin="20">
<Label>Enter a Name:</Label>
<TextBox x:Name="txt_Name" Text="{Binding ElementName=display_name, Path=Text, UpdateSourceTrigger=LostFocus}" />
<Label>The name you entered:</Label>
<TextBlock x:Name="display_name" />
<Button x:Name="btn_Save" Click="SaveClick">_Save</Button>
</StackPanel>
</Window>
Class Window1
Private Sub SaveClick(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
MessageBox.Show("Saving your name as: " & display_name.Text)
End Sub
End Class
上記の例では、に名前を入力して"Joe"
[TextBox
保存]ボタンをクリックすると、TextBlock
が更新されLostFocus
、データが適切に「保存」されます。すべてが良いです。
ただし、を入力"Bob"
しTextBox
、アクセスキー(Alt-S)を使用して保存すると、のイベントが発生しTextBlock
ないため、は更新されません。その結果、バインディングソースが更新されず、間違った値(つまり、)が保存されます。LostFocus
TextBox
"Joe"
ほとんどのWPFデータ入力フィールドでは、検証を(ではなく)TextBox
実行する必要があります。ただし、アクセスキーが使用されたときにイベントが発生しない(したがってバインディングが更新されない)場合、エントリを検証するにはどうすればよいですか?WinFormsにはとイベントがありますが、WPFにはありません。LostFocus
PropertyChanged
LostFocus
Validating
Validated