WPF ComboBox的问题和选定项

5

我想让一个ComboBox正常工作,但是一直遇到问题。以下是XAML代码:

<ComboBox x:Name="comboBox" SelectionChanged="comboBox_SelectionChanged">
    <ComboBoxItem>ComboBox Item #1</ComboBoxItem>
    <ComboBoxItem>ComboBox Item #2</ComboBoxItem>
    <ComboBoxItem>ComboBox Item #3</ComboBoxItem>
</ComboBox>

使用 C# 代码后端...

private void comboBox_SelectionChanged(object sender, selectionChangedEventArgs e)
{
    string val = comboBox.SelectedValue.ToString();
}

val的值将会是...

System.Windows.Controls.ComboBoxItem: 下拉列表项 #2

"System.Windows.Controls.ComboBoxItem:" 是从哪里来的?如何去掉它?

谢谢。

3个回答

11
在这种情况下,SelectedValue将返回一个ComboBoxItem。你看到的是对它调用ToString的结果。
如果你只想要那个ComboBoxItem内容,你需要访问它:
var item = (ComboBoxItem)comboBox.SelectedValue;
var content = (string)item.Content;

或者,在XAML中设置SelectedValuePath="Content",然后SelectedValue将简单地返回内容字符串。


1
谢谢!我更喜欢备选方法。 - JimDel

1
所以组合框具有类型为“组合框项”的集合。因此,当您选择一个项目时,“Selected Item”依赖属性变为“ComboBox Item”类型的特定实例。调用“ToString()”方法后,会输出以下内容:System.Windows.Controls.ComboBoxItem: ComboBox Item #2
要获取组合框项的值,可以尝试调用项目的“Content”属性。但请记住,内容可以是任何东西。一种常见的做法是将组合框绑定到一个集合(通常是ObservableCollection<T>),并且您选择的项目是类型T。从那里,您可以获取对象的特定属性。以下是类似于此的示例:
public class MyType
{
  public int ID {get; set;}
  public string Text {get; set;}
}

//CodeBehind
public class CodeBehindClass
{
  public ObservableCollection<MyType> MyCollection {get; set;} = new ObservableCollection();

  public MyType SelectedItem {get; set;}

  //Populate collection

  MyComboBox.ItemsSource = MyCollection;

  private void MyComboBox_SelectionChanged(object sender, selectionChangedEventArgs e)
  {
    SelectedItem = (MyType)MyComboBox.SelectedValue;
    //display string with SelectedItem.Text;
  }
}

XAML

<ComboBox x:Name="MyComboBox" SelectionChanged="MyComboBox_SelectionChanged" />

0
System.Windows.Controls.ComboBoxItem: ComboBox第2项来自于SelectedValue,因为它返回整个对象而不仅仅是字符串。
您可以尝试使用GetItemText替代。我已经修改了您的后端代码以适应您的要求:
private void comboBox_SelectionChanged(object sender, selectionChangedEventArgs e)
{
    this.ComboBox.GetItemText(this.Combobox.SelectedItem);
}

1
SelectedItem 绝对 返回该对象。您可以通过更改 SelectedValuePath 来更改 SelectedValue 返回的内容。 - Charles Mager
是的,在我尝试过之后,我发现它现在是一样的了,我编辑了答案 :) 希望它对你有用。 - JihadiOS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接