2017-12-29 4 views
0

Ich habe versucht, die Elemente aus meiner Liste in eine Combobox zu setzen, indem Sie Daten in C# Bindung. Dies ist der Code, den ich habe:Wie bindet man einen IList korrekt an eine Combobox?

ComboBox Name="genreComboBox" DisplayMemberPath="{Binding Name}" SelectedValuePath="{Binding GenreId}" 

C#

IList<Genre> genres = GenreRepository.GetGenres(); 
genreComboBox.ItemsSource = genres; 

Ich bin sicher, dass der IList wird tatsächlich mit Genre gefüllt und dass die Eigenschaft Namen korrekt als gut. Wenn ich das ausführe, wird die Combobox mit der .toString() eines Genres gefüllt. Ich habe versucht, „genreComboBox.DataContext = Genre“ aswell Zugabe, aber dies wird in der Combobox am Ende mit leeren Saiten immer gefüllt. Jede Hilfe wird geschätzt!

Antwort

0

Sie können dies normalerweise tun Datatemplate verwendet,

diese mit Ihrem Code

<ComboBox x:Name="genreComboBox"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
     <TextBlock Text="{Binding Name}" /> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

Der Grund für das Problem Versuchen ist, normalerweise DisplayMemberPath sollte

<ComboBox Name="genreComboBox" DisplayMemberPath="Name" > 
eine Zeichenfolge kein Ausdruck sein
+0

Dachte über die Verwendung dieser auch und es hat funktioniert. Irgendeine Begründung, warum der DisplayMemberPath nicht funktioniert? Danke für die Antwort! – Notorious

+0

In diesem Fall müssen Sie Sajeetharan

0

DisplayMemberPath und SelectedValuePath sind Strings. Sie sind die Namen von (oder Pfaden zu) Eigenschaften. Read the documentation next time. Es ist enttäuschend zu sehen, dass Menschen sich überhaupt nicht darum bemühen, diese sehr einfachen Probleme selbst zu lösen. Wenn Sie "WPF Combobox DisplayMemberPath" google, ist der erste Treffer eine exakte Kopie Ihrer Frage, auch auf den Namen der Anzeigeeigenschaft, und die zweite ist die MSDN-Seite dokumentiert DisplayMemberPath.

<ComboBox 
    DisplayMemberPath="Name" 
    SelectedValuePath="GenreId" 
+0

warum downvote für diese Antwort? – Sajeetharan

+0

@Sajeetharan Vielleicht, weil es in seiner Kritik an OP Mangel an Anstrengung, oder vielleicht unnötig hart ist, weil es eine Antwort auf einer Low-Wert doppelte Frage. Manche Leute glauben, dass solche Fragen überhaupt nicht beantwortet werden sollten. IMO beide Gründe sind vollkommen legitim. Oder es könnte etwas anderes legitimes sein oder kosmische Strahlen, die den SO-Datenbankserver treffen. –

Verwandte Themen