簡體   English   中英

ComboBox.SelectedItem不是ComboBoxItem

[英]ComboBox.SelectedItem is not ComboBoxItem

我有ComboBox,它與一些對象列表綁定在一起。 ComboBox.SelectedItemComboBox.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對象的名為SalesPeriodsObservableCollection被綁定為該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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM