组合框.SelectedItem不是ComboBoxItem
本文关键字:ComboBoxItem 不是 SelectedItem 组合 | 更新日期: 2023-09-27 18:09:56
我有ComboBox,我绑定了一些对象的列表。组合框。SelectedItem和ComboBox。SelectedValue返回相同的对象实例,但我认为SelectedItem应该返回ComboBoxItem。
问题是,我想得到选定的文本,但对象不是字符串,所以。tostring()将不起作用。
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被绑定为该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();
}