我有一个最难以让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;来自我如何摆脱它?
由于
答案 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