[英]ComboBox.SelectedItem is not ComboBoxItem
我有ComboBox,它與一些對象列表綁定在一起。 ComboBox.SelectedItem和ComboBox.SelectedValue返回相同的對象實例,但是我認為SelectedItem應該返回ComboBoxItem 。
問題是我想獲取選定的文本,但對象不是字符串,因此.ToString()將無法工作。
ComboBox.SelectedItem返回列表中對象類型的實例,因此您必須將其強制轉換為適當的類型,然后選擇該實例的display屬性。
要么
僅調用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);
制作ComboBox SelectionChanged
時,可以將SelectedItem
綁定到屬性,並將Selected值設置為該屬性。
<ComboBox Name="cbxSalesPeriods"
Width="220" Height="30"
ItemsSource="{Binding SalesPeriods}"
SelectedItem="{Binding SelectedSalesPeriod}"
SelectionChanged="_ComboBoxCurrencyExchange_SelectionChanged">
</ComboBox>
在這里,包含SalesPeriodV對象的名為SalesPeriods的ObservableCollection
被綁定為該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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.