2014-05-14 273 views
0

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

我认为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.如果是这样,我应该更换我的开关测试?假设chanList.Text没有更新,可能会用一些东西chanList.SelectedItem应该是要走的路。但是,我能够找到正确的详细信息来访问所选项目的内容(文本)......这就是为什么我要使用chanList.Text,它至少在我开始使用该事件之前工作得很好。

感谢您的帮助! Steve

+0

设置断点并测试您的假设。 – PoweredByOrange

+0

[在代码中创建一个最小,完整和可验证示例](http://stackoverflow.com/help/mcve),并将其发布到您的问题中。通过这种方式,我们可以测试您的问题并找到解决方案。事实上,任何数量的东西都可能导致你的问题。 – Sheridan

回答

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; 
       } 
      } 
     } 
    } 
相关问题