【问题标题】:ComboBox.SelectedItem is not ComboBoxItemComboBox.SelectedItem 不是 ComboBoxItem
【发布时间】:2017-02-10 10:06:03
【问题描述】:

我有 ComboBox,我绑定了一些对象的列表。 ComboBox.SelectedItem 和 ComboBox.SelectedValue 返回相同的对象实例,但我认为 SelectedItem 应该返回 ComboBoxItem。

问题是我想获取选定的文本,但对象不是字符串,所以 .ToString() 不起作用。

【问题讨论】:

  • 这里不是很清楚你在问什么 - 你肯定知道项目类型是什么以及它是如何转换为它的字符串表示的?您应该提供一个 minimal reproducible example 来说明您的问题以及您的期望。
  • @CharlesMager 我在问题“我想获得选定的文本”中明确提到。如果您知道如何获取组合框的选定文本,请帮助,如果不知道,请让其他人回答。
  • 其实题主并不清楚。为什么不能使用 ComboBox.Text 将选定的文本作为字符串获取?
  • @VictorSharovatov 我试过了,但它返回空字符串“”我放了那个标题,因为我不明白 SelectedItem 和 ComboBoxItem 之间的区别在我的情况下它们是相同的
  • 那你需要尝试使用ComboBox.SelectedText。这篇link 的帖子应该对你有所帮助。

标签: c# wpf xaml combobox


【解决方案1】:

ComboBox.SelectedItem 返回列表中对象类型的实例,因此您必须将其转换为适当的类型,然后选择该实例的显示属性。

或

只需调用 Combox.Text 就足够了,但它需要 SelectedItem != null 和 ComboBox 上定义的 DisplayMemberPath。

如果你想在打开的 TextBox 中选择文本,你可以使用反射:

  var propInfo = typeof(ComboBox).GetProperty("EditableTextBoxSite", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
  var text = propInfo.GetValue(DataList) as TextBox;
  var selText = text.SelectedText;
  MessageBox.Show(selText);

【讨论】:

    【解决方案2】:

    您可以将SelectedItem 绑定到一个属性,并在您创建ComboBox SelectionChanged 时将 Selected 值设置为该属性。

    <ComboBox Name="cbxSalesPeriods"
                       Width="220" Height="30"
                       ItemsSource="{Binding SalesPeriods}"
                       SelectedItem="{Binding SelectedSalesPeriod}"
                       SelectionChanged="_ComboBoxCurrencyExchange_SelectionChanged">
            </ComboBox>
    

    这里将一个包含 SalesPeriodV 对象的ObservableCollectionnamed SalesPeriods 绑定为该ComboBox 的ItemsSource。

    private ObservableCollection<SalesPeriodV> salesPeriods = new ObservableCollection<SalesPeriodV>();
    public ObservableCollection<SalesPeriodV> SalesPeriods
    {
        get { return salesPeriods; }
        set { salesPeriods = value; OnPropertyChanged("SalesPeriods"); }
    }
    private SalesPeriodV selectedItem = new SalesPeriodV();
    public SalesPeriodV SelectedItem
    {
        get { return selectedItem; }
        set { selectedItem = value; OnPropertyChanged("SelectedItem"); }
    }
    
    private void _ComboBoxCurrencyExchange_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ComboBox cb = (ComboBox)sender;
        SelectedItem = (SalesPeriodV)(cb.SelectedItem);
        string text = cb.SelectedValue.ToString();
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-14
      • 2011-09-06
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 2012-12-19
      • 2021-08-21
      • 2010-10-25
      • 1970-01-01
      相关资源
      最近更新 更多