c# - ComboBox- SelectionChanged 事件具有旧值,而不是新值

标签 c# wpf combobox .net-4.0 selectionchanged

C#、.NET 4.0、VS2010。

WPF 新手。我的主窗口上有一个 ComboBox。我 Hook 了所述组合框的 SelectionChanged 事件。但是,如果我在事件处理程序中检查组合框的值,它具有旧值。这听起来更像是“SelectionChanging”事件,而不是 SelectionChanged 事件。

如何在实际发生选择后获取 ComboBox 的新值?

目前:

this.MyComboBox.SelectionChanged += new SelectionChangedEventHandler(OnMyComboBoxChanged);

...
private void OnMyComboBoxChanged(object sender, SelectionChangedEventArgs e)
{
    string text = this.MyComboBox.Text;
}

请注意,如果我使用在事件参数中传递的对象,我会得到相同的行为,例如e.原始来源。

最佳答案

根据 MSDN,e.AddedItems :

Gets a list that contains the items that were selected.

所以你可以使用:

private void OnMyComboBoxChanged(object sender, SelectionChangedEventArgs e)
{
    string text = (e.AddedItems[0] as ComboBoxItem).Content as string;
}

如果您对来自 senderItems 使用 string 值,您也可以使用 SelectedItem:

private void OnMyComboBoxChanged(object sender, SelectionChangedEventArgs e)
{
    string text = (sender as ComboBox).SelectedItem as string;
}

private void OnMyComboBoxChanged(object sender, SelectionChangedEventArgs e)
{
    string text = ((sender as ComboBox).SelectedItem as ComboBoxItem).Content as string;
}

因为 ContentSelectedItem 都是对象,所以更安全的方法是使用 .ToString() 而不是 as string

关于c# - ComboBox- SelectionChanged 事件具有旧值,而不是新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2961118/

相关文章:

c# - 涉及异步调用时如何跟踪工作单元?

c# - 得到两个椭圆而不是一个

c# - 为什么我不应该使用 PictureBox 控件?

c# - 内存泄漏将 imagebrush 加载到 grid.background

c# - MVVM WPF ListBox条目未更新

c# - 将二进制数据加载到结构中

c# - WPF MVVM 为什么使用 ContentControl + DataTemplate View 而不是直接的 XAML 窗口 View ?

c# - 获取从 BindingSource 到表/数据集的过滤结果?

wpf - 如何将复选框项目拉伸(stretch)到组合框的整个宽度

c# - WPF 中 ComboBox 上的 zIndex?