平台: 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
。
问题显然在于 TextBox.TextChanged 事件的异步执行,如 MSDN 定义中所述:
TextChanged 事件是异步的。活动无法取消。
我真的需要这些事件处理程序完全按照它们更改的顺序执行。
问题: 有什么简单的方法可以实现我所需要的吗?