WPF ComboBox SelectedIndex和SelectedValue在SelectionChanged事件上有不同的行为吗?

时间:2010-04-22 16:18:30

标签: wpf combobox selectedvalue selectedindex selectionchanged

我按预期得到了这个cbxJobPosition_SelectionChanged触发器。问题是外部方法试图设置 cbxJobPosition

cbxJobPosition与 JobPosition 类型的对象列表进行数据绑定:

  • JobPositionID:1,JobPositionName:Manager

  • JobPositionID:2,JobPositionName:Employee

  • JobPositionID:3,JobPositionName:第三方

这是XAML:

<ComboBox Cursor="Hand" DataContext="{Binding}" ItemsSource="{Binding}"
FontSize="13" Name="cbxJobPosition"     
SelectedValuePath="JobPositionID" DisplayMemberPath="JobPositionName" 
SelectedIndex="0" Width="233" Height="23" 
SelectionChanged="cbxJobPosition_SelectionChanged" />

在UserControl_Loaded方法上,它从数据库中读取作业列表并尝试设置特定作业位置“第三方”:

//calls cbxJobPosition_SelectionChanged and passes the correct SelectedValue within
cbxJobPosition.SelectedIndex = 3;

//calls cbxJobPosition_SelectionChanged and but won't pass the correct SelectedValue within
cbxJobPosition.SelectedValue = "3";

正如您所注意到的,当处理自动重定向到cbxJobPosition_SelectionChanged时,当您在cbxJobPosition_SelectionChanged事件中进行调试时,SelectedValue属性将具有上述每个语句的不同值。

有没有人知道这种差异是否是预期的,我是否遗漏了某些东西或者它可能是一个错误?

1 个答案:

答案 0 :(得分:0)

JobPositionID是string吗?如果没有,这可以解释为什么它不起作用。在数据绑定级别,WPF不会自动将string转换为int。我猜它在你尝试时将盒子上的选择改为无。