WPF ComboBox和所选项目的问题

时间:2016-06-03 16:38:36

标签: c# wpf

我有一个最难以让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:ComboBox Item#2

&#34; System.Windows.Controls.ComboBoxItem:&#34;来自我如何摆脱它?

由于

3 个答案:

答案 0 :(得分:3)

在这种情况下,

SelectedValue将返回ComboBoxItem。您所看到的是在此上调用ToString的结果。

如果您只想要ComboBoxItem内容,则需要访问它:

var item = (ComboBoxItem)comboBox.SelectedValue;
var content = (string)item.Content;

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

答案 1 :(得分:1)

所以组合框有一个类型组合框项的集合。因此,当您选择项目时,所选项目依赖项属性将成为类型组合框项目的特定实例。在组合框项上调用ToString()方法,得到输出:

  

System.Windows.Controls.ComboBoxItem:ComboBox Item#2

要获取组合框项的值,您可以尝试调用项目的Content属性。请记住,内容可以是任何内容。一种常见做法是将组合框绑定到集合(通常为ObservableCollection<T>),并且所选项目的类型为T。从那里,您可以从对象中获取特定属性。这方面的一个例子类似于以下

C#

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" />

答案 2 :(得分:0)

  

System.Windows.Controls.ComboBoxItem:ComboBox Item#2

来自//因为它返回整个对象而不仅仅是字符串 您可以尝试SelectedValue而不是修改您的代码以满足您的要求:

GetItemText