2016-04-29 3 views
0

Ich habe ein Kombinationsfeld wie im folgenden Code gezeigt. Ich möchte den Namen der Auswahl in einem Meldungsfeld anzeigen, wenn ich es auswähle. Was ich versuche, ist -Wählen Sie den Eintrag aus dem Kombinationsfeld

<dxb:BarEditItem.EditTemplate> 
<DataTemplate> 
    <dxe:ComboBoxEdit x:Name="PART_Editor" 
         SelectedIndexChanged="OnSelectedIndexChanged" Name="comboBox"> 
     <dxe:ComboBoxEdit.Items> 
      <system:String>Item1</system:String> 
      <system:String>Item2</system:String> 
     </dxe:ComboBoxEdit.Items> 
    </dxe:ComboBoxEdit> 
</DataTemplate> 

Wie kann ich den Code in dem Backend für das Erhalten des gewählten Namen in einem Meldungsfeld hinzufügen?

Antwort

2

Möchten Sie dies beim SelectedIndexChanged-Ereignis behandeln? Wenn dies der Fall ist, können Sie die Combobox aufrufen, die das Ereignis ausgelöst hat.

private void OnSelectedIndexChanged(object sender, RoutedEventArgs e) 
{ 
    ComboBox cb = (ComboBox)sender; 
    string selectedText = cb.SelectedText; 
    //Code to display the selectedText into a message box 
} 
+1

Sie denken an 'System.Windows.Forms.ComboBox'. OP verwendet 'ComboBoxEdit' von DevExpress WPF-Steuerelementen. – Grx70

1

Ich bin mir nicht sicher, was Sie durch den „Namen der Auswahl“ meine ich, so dass ich nehme an, Sie halten den Text erhalten möchten, die in der Combo angezeigt, der das ausgewählte Element darstellt .

Sobald Sie die Combo selbst in der Hand haben:

private void OnSelectedIndexChanged(object sender, RoutedEventArgs e) 
{ 
    var combo = (ComboBoxEdit)sender; 
    (...) 
} 

haben Sie mehrere Möglichkeiten. Am zuverlässigsten wäre (meiner Meinung nach) die Eigenschaft combo.DisplayText, bei der es sich um eine schreibgeschützte Eigenschaft handelt, die den tatsächlichen Text enthält, der in der Combo angezeigt werden sollte (unter Berücksichtigung der DisplayMember Eigenschaft, DisplayTextConverter Eigenschaft und CustomDisplayText Ereignis).

Eine andere Option (in Ihrem speziellen Fall) wäre . Beachten Sie jedoch, dass combo.SelectedItem das tatsächlich ausgewählte Element und nicht seine Textdarstellung zurückgibt. Das obige ist in Ordnung, solange die Artikel vom Typ string sind. Sollten sie nicht sein, erhalten Sie eine InvalidCastException. Es ist auch möglich, dass in diesem Fall , was Sie erhalten, möglicherweise nicht das ist, was Sie sehen (wie im vorherigen Absatz erwähnt gibt es mehrere Möglichkeiten, den angezeigten Text zu ändern).

Noch eine andere Option combo.Text, die DisplayMember berücksichtigt, aber nicht DisplayTextConverter noch CustomDisplayText.

EDIT

Es stellt sich heraus, dass SelectedIndexChanged zum Zeitpunkt angehoben wird, wird DisplayText Eigenschaft noch nicht das neu ausgewählte Element entsprechend aktualisiert (was nicht besonders überraschend ist). Um damit umzugehen, sollten Sie den Abruf des Werts DisplayText "verschieben". Ich würde persönlich mit etwas in diese Richtung gehen (mit einem Dispatcher mit dem Combo-zugeordnet ist):

private void OnSelectedIndexChanged(object sender, RoutedEventArgs e) 
{ 
    var combo = (ComboBoxEdit)sender; 
    combo.Dispatcher.BeginInvoke(new Action(() => 
    { 
     var text = combo.DisplayText; 
     (...) 
    })); 
}