プラットフォーム: Silverlight 4 / .NET 4
説明:
私は 、ComboBox、Textboxを持っていNumericUpDownます。
<StackPanel Margin="10">
<ComboBox SelectionChanged="cmbChanged" Margin="3">
<ComboBoxItem Content="A" />
<ComboBoxItem Content="B" />
</ComboBox>
<TextBox x:Name="txt" TextChanged="txtChanged" Margin="3"/>
<CheckBox x:Name="chk" Checked="chkChecked" Unchecked="chkChecked" Content="Check box" Margin="3"/>
<ListBox x:Name="lst" Height="100" Margin="3"/>
</StackPanel>
リストはデバッグ用です。
再現:
TextBox.TextChanged、CheckBox.Checked、CheckBox.Uncheckedおよびのイベント ハンドラがあることに注意してくださいComboBox.SelectionChanged。
ハンドラーは次のとおりです。
private void cmbChanged(object sender, SelectionChangedEventArgs e)
{
lst.Items.Clear();
txt.Text = (sender as ComboBox).SelectedIndex.ToString();
chk.IsChecked = !chk.IsChecked;
}
private void txtChanged(object sender, TextChangedEventArgs e)
{
lst.Items.Add("Text Changed");
}
private void chkChecked(object sender, RoutedEventArgs e)
{
bool? chk = (sender as CheckBox).IsChecked;
lst.Items.Add("CheckBox Changed to " + chk);
}
問題:
コンボボックスのイベントハンドラーで、チェックボックスのチェック状態を設定する前に、テキストボックスにテキストを設定しました。ただし、下の図を見ると、 のイベント ハンドラーが のCheckBox.Checked前に呼び出されていることがわかりますTextBox.TextChanged。

MSDN の定義に記載されているように、問題は明らかに TextBox.TextChanged イベントの非同期実行にあります。
TextChanged イベントは非同期です。イベントはキャンセルできません。
これらのイベントハンドラーは、変更された順序で正確に実行する必要があります。
質問: 必要なものを達成する簡単な方法はありますか?