组合框.SelectedItem不是ComboBoxItem

本文关键字:ComboBoxItem 不是 SelectedItem 组合 | 更新日期: 2023-09-27 18:09:56

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

问题是,我想得到选定的文本,但对象不是字符串,所以。tostring()将不起作用。

组合框.SelectedItem不是ComboBoxItem

ComboBox。SelectedItem返回列表中对象类型的一个实例,因此必须将其强制转换为适当的类型,然后选择该实例的display属性。

调用Combox应该就足够了。文本,但它需要SelectedItem != null和ComboBox上定义的DisplayMemberPath。

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

  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);

您可以将SelectedItem绑定到一个属性,并在制作ComboBox SelectionChanged时设置该属性的Selected value

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

这里,包含SalesPeriodV对象的ObservableCollection SalesPeriods被绑定为该ComboBoxItemsSource

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();
}