C# 组合框在SelectionChanged事件中仍有旧值
我对组合框有疑问。我遇到的问题是绑定到它的selection changed事件。这是我的密码: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"
<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;
}