C# 组合框在SelectionChanged事件中仍有旧值

C# 组合框在SelectionChanged事件中仍有旧值,c#,wpf,combobox,C#,Wpf,Combobox,我对组合框有疑问。我遇到的问题是绑定到它的selection changed事件。这是我的密码: <ComboBox Height="23" HorizontalAlignment="Left" Margin="12,67,0,0" Name="comboBox1" VerticalAlignment="Top" Width="112"

我对组合框有疑问。我遇到的问题是绑定到它的selection changed事件。这是我的密码:

        <ComboBox Height="23"
              HorizontalAlignment="Left"
              Margin="12,67,0,0"
              Name="comboBox1"
              VerticalAlignment="Top"
              Width="112"
              SelectionChanged="comboBox1_SelectionChanged">
        <ComboBoxItem Content="Pokey"
                      IsSelected="True" />
        <ComboBoxItem Content="Octo-ooze" />
        <ComboBoxItem Content="Bolt" />
        <ComboBoxItem Content="Fink" />
    </ComboBox>

正在发生的是
tbMinutes.Text
tbSeconds.Text
使用旧值,因此,例如,如果组合框最初是Pokey,我将其更改为Bolt,它仍将使用Pokey值,就好像它落后一步一样

组合框1.Text返回选择更改前的值,这是导致问题的原因。您可以使用
组合框。选择editem
访问新选择的项目

变化看起来像这样

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
  ComboBoxItem item = comboBox1.SelectedItem as ComboBoxItem;
  if (item != null)
  {
    switch (item.Content.ToString())
    {
      // ... Rest of your code here
    }
  }
}
但是,您可能会遇到问题,因为在加载数据时会触发SelectionChanged事件,因为您在Xaml中设置了
IsSelected=“True”
,如果尚未创建文本框,则在最初设置文本框值时会导致问题。要解决这个问题,请从Xaml中删除
IsSelected
设置,只需在窗口的加载事件中设置选择

private void Window_Loaded(object sender, RoutedEventArgs e)
{
  comboBox1.SelectedIndex = 0;
}  

在这种情况下,您应该使用
组合框。如Chris Taylor所述,选择editem
。但是在XAML中设置
ComboBoxItem
IsSelected
属性时要小心,因为如果这样做:

<ComboBox Height="23"
          HorizontalAlignment="Left"
          Margin="12,67,0,0"
          Name="comboBox1"
          VerticalAlignment="Top"
          Width="112"
          SelectionChanged="comboBox1_SelectionChanged">
        <ComboBoxItem Content="Pokey"
                  IsSelected="True" />
        <ComboBoxItem Content="Octo-ooze" />
        <ComboBoxItem Content="Bolt" />
        <ComboBoxItem Content="Fink" />
</ComboBox>
    <TextBox Name="tbMinutes" />
    <TextBox Name="tbSeconds" />
public MainWindow()
{
    InitializeComponent();
    comboBox1.SelectionChanged += comboBox1_SelectionChanged;
}

很好,我们看到了同样的事情。解决方案上的微小变化,六个半打另一个。@Chris Taylor:似乎我们都测试了原始代码;)。但是您的代码在启动时仍然保留选择,所以我会选择您的解决方案。@mpistich,这只是一个潜在的问题,如果在Xaml中文本框声明在组合框之前,那么问题就不存在,但这最多也很脆弱。感谢Chris和mpistich,我确实在Xaml中的组合框之前有文本框。克里斯的解决方案成功了。谢谢
public MainWindow()
{
    InitializeComponent();
    comboBox1.SelectionChanged += comboBox1_SelectionChanged;
}