当前位置:   article > 正文

【WPF】ComboBox绑定数据及变更事件

【WPF】ComboBox绑定数据及变更事件

一、定义ComboBox,以及SelectionChanged事件

  1. <ComboBox x:Name="cmb_radius" Height="30" Width="65" FontSize="15"
  2. DisplayMemberPath="Value" SelectedValuePath="Key" HorizontalAlignment="Center"
  3. VerticalAlignment="Center" Margin="3" SelectionChanged="cmb_radius_SelectionChanged"/>

二、实体类及数据绑定

  1. public class ComboBoxEntity
  2. {
  3. public string Key { get; set; }
  4. public string Value { get; set; }
  5. }
  6. cmb_radius.Items.Clear();
  7. List<ComboBoxEntity> lcb = new List<ComboBoxEntity>();
  8. for (int i = 0; i < M_Radius.Columns.Count; i++)
  9. {
  10. ComboBoxEntity cbe = new ComboBoxEntity();
  11. cbe.Key = M_Radius.Columns[i].ColumnName;
  12. cbe.Value = M_Radius.Rows[0][i].ToString();
  13. // 添加ComboBoxEntity对象到列表中
  14. lcb.Add(cbe);
  15. }
  16. // 设置cmb_radius的ItemsSource为lcb
  17. cmb_radius.ItemsSource = lcb;

三、SelectionChanged事件的处理

  1. private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
  2. {
  3. ComboBox comboBox = (ComboBox)sender;
  4. // 获取选中的项
  5. object selectedValue = comboBox.SelectedItem;
  6. // 需要的业务逻辑处理
  7. if (selectedValue != null)
  8. {
  9. string cbKey = (selectedValue as ComboBoxEntity).Key;
  10. string cbValue = (selectedValue as ComboBoxEntity).Value;
  11. }
  12. //...
  13. }

四、SelectedValue赋值时,赋值的数据不在ComboBox的数据源

如果SelectedValue赋值时,赋值的数据不在ComboBox的数据源,此时不会直接引发错误或异常。相反,ComboBox的SelectedValue属性将保持未设置状态(如果之前没有设置过),或者如果已经设置了DataSource但ValueMember未正确配置,则可能会显示默认值,如“System.Data.DataRowView”。这取决于ComboBox的绑定情况和你如何处理数据。

具体表现可能包括:

  1. SelectedValue保持默认值:如果没有匹配的项,SelectedValue可能保持为null,或者如果之前有赋值操作,则可能是之前的值。

  2. SelectedIndexChanged事件可能不会触发:因为没有实际改变选定的索引或匹配到的项。

  3. 界面显示不受影响:ComboBox的文本部分(SelectedText)可能不变,或者显示为之前选择的项,而不会因为这次无效的赋值而改变。

为了避免这种情况,可以在赋值前检查DataSource中是否存在匹配的项,可以通过以下方式实现:

  1. object desiredValue = ...; // 你想设置的值
  2. var item = comboBox1.DataSource.Cast<object>().FirstOrDefault(item => item.ToString() == desiredValue.ToString());
  3. if (item != null)
  4. {
  5. comboBox1.SelectedValue = desiredValue;
  6. }
  7. else
  8. {
  9. // 处理不存在的情况,比如记录日志、提示用户等
  10. MessageBox.Show("指定的值在ComboBox中不存在。");
  11. }

这段代码首先尝试从DataSource中找到匹配desiredValue的项,如果找到了就设置SelectedValue,否则可以进行相应的错误处理。注意,这里的比较(item.ToString() == desiredValue.ToString())假设值可以用字符串表示,并且这种方式比较简单,可能需要根据实际的数据类型和比较逻辑调整。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/852660
推荐阅读
相关标签
  

闽ICP备14008679号