2009-05-11 1 views
2

Ich fühle mich wirklich dumm für das Fragen, aber ich habe seit über 8 Stunden geprügelt. Wie erhalte ich das ausgewählte Element, um seinen Text in meinem WPF-Kombinationsfeld anzuzeigen, wenn ausgewählt?Text wird nicht angezeigt für ausgewählte Artikel in ComboBox

Diplay Options

Oben ist eine Option Dialog, der Benutzer die verfügbaren Turnier-Displays auswählen und konfigurieren. Das Problem ist, dass das ausgewählte Kombinationsfeldelement das Benutzersteuerelement anstelle des Anzeigenamens anzeigt.

Auf Fenster Loaded:

 //_displayer is a private member populated using MEF 
     //[ImportMany(typeof (IDisplayer))] 
     //private IEnumerable<IDisplayer> _displayers; 
     DisplayTypeComboBox.ItemsSource = _displayers; 

Die ComboBox XAML:

<ComboBox 
    Name="DisplayTypeComboBox" 
    Grid.Column="1" 
    Grid.ColumnSpan="2" 
    Grid.Row="1" 
    IsEditable="False" 
    SelectionChanged="DisplayTypeComboBox_SelectionChanged"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <ComboBoxItem Content="{Binding DisplayerName}" /> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 

Die IDisplayer:

public interface IDisplayer 
{ 
    string DisplayDataLocation { get; set; } 
    string DisplayerName { get; } 
    string DisplayerDescription { get;} 
    bool WatcherEnabled { get; } 
    UserControl View { get; } 
    string DisplayerImageLeft { get; set; } 
    string DisplayerImageRight { get; set; } 
    void Update(); 
} 

Antwort

1

Ich möchte nicht einmal darüber nachdenken, wie viele Stunden ich versucht habe zu lösen, was ein einfaches Problem sein sollte. Warum ist es so schwierig, den ausgewählten Text als ausgewählten Wert anzuzeigen? Ich gebe auf, WPF du hast mich in die Unterwerfung geschlagen. Ich habe das Steuerelement in ein Listenfeld geändert, das mehr Platz benötigt, um die auswählbaren Elemente anzuzeigen, aber es funktioniert zumindest.

<ListBox 
    Name="DisplayTypeComboBox" 
    Grid.Column="1" 
    Grid.ColumnSpan="2" 
    Grid.Row="1" 
    SelectionChanged="DisplayType_SelectionChanged"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Label Content="{Binding DisplayerName}" /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

alt text

1

Verwenden Sie einen TextBlock, um an den DisplayerName anstelle eines ComboboxItem zu binden. Ich glaube, dass wenn Sie die itemsource festlegen, das Kombinationssteuerelement die Elemente in comboboxitems-Steuerelementen automatisch umschließt.

Edit: Ich habe Ihre Frage missverstanden. Versuchen Sie, das SelectionBoxItemTemplate festzulegen.

+0

Nun so weit ich habe versucht ComboBoxItem, TextBlock- und beschriften - :( Sie sollten die ItemContainerStyle und nicht ItemTemplate verwendet Da ComboBox die inneren Elemente mit einem ComboBoxItem einwickelt... alle erzeugen das gleiche Ergebnis – Aaron

+0

Kannst du verlinken und zB kann ich es nicht so einstellen, wie ich das ItemTemplate gemacht habe.Alles, was ich googele, ist nichts Einfaches und Sauberes – Aaron

+0

Die SelectionBoxItemTemplate Eigenschaft ist die Eigenschaft, die du einstellen musst. Leider ist es privat Versuchen Sie, Ihren eigenen ComboBox-Stil zu erstellen, und setzen Sie das SelectionBoxItemTemplate auf das, was Sie benötigen – mdm20

1

Überprüfen Sie, was DisplayerName-Mitglied tatsächlich enthält. Wahrscheinlich enthält es den UserControl-Namen anstelle des Anzeigenamens.

+0

Das DipslayerName-Feld hat die gültige Zeichenfolge Die Elemente in dem Dropdown enthalten das richtige DisplayerName string, d. H. "Qualifizierende Scrollstände", Sobald es ausgewählt ist, kann ich nicht herausfinden, wie das Steuerelement angewiesen wird, das DisplayerName-Feld als ausgewählten Anzeigewert zu verwenden. – Aaron

+0

Wie sieht Ihr Code für die DisplayTypeComboBox_SelectionChanged-Methode aus? Verwechseln Sie das SelectedItem, nachdem der Benutzer es geändert hat? –

+0

Es ist nur die lange Beschreibung einstellen. SelectedDisplayer = (IDisplayer) DisplayTypeComboBox.SelectedItem; if (SelectedDisplayer! = Null) LongDiscriptionLabel.Text = SelectedDisplayer.Displayer Beschreibung; – Aaron

2

traf ich die gleiche Sache. Nahm mich auch eine Weile. Sie Sie im Grunde die ComboBoxItem mit einem anderen gewickelten

+0

Ich werde das ausprobieren, danke! – Aaron

+0

Hmmm Ich muss etwas vermissen Ich kann nichts tun, so weit wie die gebundenen Daten mit ItemContainerStyle Templating – Aaron