WPF Combobox SelectionChanged事件

时间:2014-05-14 18:19:38

标签: wpf combobox

我有一个项目,我有一个ComboBox与2个滑块交互。 这三个控件中的每一个都由事件触发:即ComboBox的SelectionChanged和2个滑块的ValueChanged。

我认为ValueChanged事件给我带来了问题,而不是根据组合框选择更新值和min / max。出于某种原因,我假设可能两个事件同时被触发,导致我的变量混淆。

好吧,我决定更改我的ValueChanged事件,以便他们只更新标签,看看是否能解决问题。它没有。

换句话说,SelectionChanged事件是我的问题所在。

查看我的代码,我没有看到任何问题,此时我唯一能想到的是如下:

private void chanList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
switch (chanList.Text)
 {
                case "Channel 1":
                    { // blablabla }

 }
}

问题的原因是chanList.Text不包含“新选择”,它仍包含旧选择。我猜测当触发“SelectionChanged”事件时,组合框的内容(在我的情况下为chanList.Text)尚未“更新”。所以它导致在我的开关中拾取错误的情况。

现在我的问题: 1.我的假设是否正确? 2.如果是这样,我该怎么替换我的Switch测试?假设chanList.Text尚未更新,可能会使用chanList.SelectedItem来实现。但是,我能够找到正确的详细信息来访问所选项目的内容(文本)...这就是为什么我要使用chanList.Text,它至少在我开始使用该事件之前一直运行良好。

感谢您的帮助! 史蒂夫

1 个答案:

答案 0 :(得分:0)

在SelectionChanged事件处理程序中不会更改组合框文本。选择将在SelectionChangedEventArgs对象中找到。特别是e.AddedItems。尽管可能不是为了您的控制,但是用户可能已经在组合框中选择了多个项目,因此e.AddedItems是一个列表。滚动列表并进行必要的更新。

    private void chanList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        foreach (object item in e.AddedItems)
        {
            if (item is string)
            {
                switch (item as string)
                {
                    case "Channel 1":
                        Console.WriteLine("Channel 1");
                        break;
                    default:
                        break;
                }
            }
        }
    }