2010-09-15 1 views
20

Meine WPF-ComboBox enthält nur Texteinträge. Der Benutzer wird einen auswählen. Was ist der einfachste Weg, um den Text des ausgewählten ComboBoxItem zu erhalten? Bitte antworten Sie in C# und Visual Basic. Hier ist meine ComboBox:Was ist der einfachste Weg, um den ausgewählten Text in einem Kombinationsfeld zu erhalten, das nur Texteinträge enthält?

<ComboBox Name="cboPickOne"> 
    <ComboBoxItem>This</ComboBoxItem> 
    <ComboBoxItem>should be</ComboBoxItem> 
    <ComboBoxItem>easier!</ComboBoxItem> 
</ComboBox> 

Übrigens, ich kenne die Antwort, aber es war nicht einfach zu finden. Ich dachte, ich würde die Frage posten, um anderen zu helfen. REVISION: Ich habe eine bessere Antwort gelernt. Wenn ich SelectedValuePath = "Content" als ComboBox-Attribut hinzufüge, brauche ich den hässlichen Casting-Code nicht mehr. Siehe Andys Antwort unten.

+1

Wenn Sie die Antwort wissen, zögern Sie nicht, es auch zu posten und es als die akzeptierte Antwort zu markieren. Keine Notwendigkeit für andere, die gleiche Forschung zweimal zu machen. ;-) Und wer weiß, vielleicht kann jemand eine bessere Lösung für deine Arbeit finden ... – Heinzi

+0

Wenn du diesen Kommentar hinzufügst, hättest du deine Frage leicht als Community-Wiki markieren können. –

Antwort

43
<ComboBox 
    Name="cboPickOne" 
    SelectedValuePath="Content" 
    > 
    <ComboBoxItem>This</ComboBoxItem> 
    <ComboBoxItem>should be</ComboBoxItem> 
    <ComboBoxItem>easier!</ComboBoxItem> 
</ComboBox> 

In Code:

stringValue = cboPickOne.SelectedValue.ToString() 
+6

So viel ich möchte, dass es so sauber und einfach ist, das allein funktioniert nicht. SelectedValue gibt ein ComboBoxItem zurück, nicht den Zeichenfolgenwert, den ich suche. Platzieren von ToString nach SelectedValue gibt dieses System.Windows.Controls.ComboBoxItem zurück, gefolgt vom ausgewählten Text. – DeveloperDan

+3

OK. Ich sehe, dass Sie SelectedValuePath = "Content" als Attribut zur ComboBox hinzugefügt haben. Das funktioniert! Kein hässliches Casting erforderlich. Es ist schön, sauber und einfach - genau das, was ich wollte. Danke Andy! – DeveloperDan

+0

Sie können auch an SelectedValue.Content als Pfad binden, dies entkoppelt das Verhalten von ComboBox von der Anforderung des Bindungsziels. – Sprague

0

Wenn Sie bereits den Inhalt Ihrer ComboBoxItem wissen nur Strings sein werden, greifen nur um den Inhalt als String:

string text = ((ComboBoxItem)cboPickOne.SelectedItem).Content.ToString(); 
0
var s = (string)((ComboBoxItem)cboPickOne.SelectedItem).Content; 

Dim s = DirectCast(DirectCast(cboPickOne.SelectedItem, ComboBoxItem).Content, String) 

Da wir, dass der Inhalt eine Zeichenfolge wissen ist, ich bevorzugen einen Cast über einen ToString() Methodenaufruf.

7

Gerade Heinzi und Jim Brissom die Antworten zu klären, hier ist der Code in Visual Basic:

Dim text As String = DirectCast(cboPickOne.SelectedItem, ComboBoxItem).Content.ToString() 

und C#:

string text = ((ComboBoxItem)cboPickOne.SelectedItem).Content.ToString(); 

Dank!

+1

Es hängt jedoch davon ab, ob Sie die Elemente explizit als ComboBoxItems oder über Bindungen direkt als Zeichenfolgen angeben. Im letzteren Fall würde '.Content' eine Ausnahme werfen, denke ich. –

-1

Verwenden Sie die DataRowView.Row.Item[Index] oder ItemArray[Index] Eigenschaft die SelectedItem zu bekommen, wo Index der Index der Spalte in der DataTable als itemSource für die Combobox verwendet wird. In Ihrem Fall wird es 0 sein.Statt Index können Sie auch auch die Spaltennamen übergeben:

VB:

Dim sItem As String=DirectCast(cboPickOne.SelectedItem, DataRowView).Row.Item(1).ToString() 

C#

String sItem=((DataRowView)cboPickOne.SelectedItem).Row.Item[1].ToString(); 

Um die SelectedValue erhalten Sie verwenden können:

VB:

Dim sValue As String=cboPickOne.SelectedValue.ToString() 

C#

String sValue=cboPickOne.SelectedValue.ToString(); 
+0

Die Frage besagt nicht, dass die Elemente in der 'ComboBox' vom Typ' DataRowView' sind. –

1

Wenn Sie Elemente in ComboBox als

youComboBox.Items.Add("Data"); 

Dann dieses Add verwenden:

youComboBox.SelectedItem; 

Aber wenn Sie Elemente hinzufügen, indem Sie die Datenbindung, verwenden Sie diese:

DataRowView vrow = (DataRowView)youComboBox.SelectedItem; 
DataRow row = vrow.Row; 
MessageBox.Show(row[1].ToString()); 
1

Verwenden Sie cboPickOne.Text sollte geben du die Schnur.

2

Ich habe gerade das getan.

string SelectedItem = MyComboBox.Text; 
Verwandte Themen