{"id":55000197,"date":"2019-12-01T00:00:00","date_gmt":"2020-03-27T19:39:51","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=197"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Ungebundene_ComboBox","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Ungebundene_ComboBox\/","title":{"rendered":"Ungebundene ComboBox"},"content":{"rendered":"<p><b>Auswahlfelder werden unter WPF meist mit dem ComboBox-Steuerelement abgebildet.  Manchmal braucht man diese nur f&uuml;r die Auswahl von Daten aus einfachen Auflistungen und die ComboBox-Steuerelemente selbst sind nicht an eine Eigenschaft des Code behind-Moduls gebunden. Wie man solche ungebundenen ComboBox-Steuerelemente einfach abbildet, zeigt dieser Artikel.<\/b><\/p>\n<p>Wir schauen uns die ungebundene ComboBox f&uuml;r verschiedene F&auml;lle an &#8211; als erstes f&uuml;r eine einfache Liste von Zeichenketten, danach f&uuml;r eine Liste mit Objekten einer bestimmten Klasse. Die Beispiele finden Sie jeweils in eigenen Fenstern, die vom Hauptfenster <b>MainWindow <\/b>aus aufgerufen werden.<\/p>\n<h2>String-Liste in ComboBox darstellen<\/h2>\n<p>Im Entwurf sieht unser erstes Beispiel (siehe Fenster <b>ComboBoxMitEinfacherListe.xaml<\/b>) wie in Bild 1 aus. Neben einigen <b>Style<\/b>-Definitionen f&uuml;r die Steuer-elemente im Bereich <b>Window.Resources <\/b>des XAML-Codes und der Definition des <b>Grid<\/b>-Elements, die Sie im Beispielprojekt einsehen k&ouml;nnen, werden das Bezeichnungsfeld und das <b>ComboBox<\/b>-Element wie folgt definiert:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_06\/pic_197_001.png\" alt=\"Entwurf der ComboBox\" width=\"499,6607\" height=\"140,9299\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Entwurf der ComboBox<\/span><\/b><\/p>\n<pre>&lt;Label&gt;Ungebundene ComboBox:&lt;\/Label&gt;\r\n&lt;ComboBox Grid.Column=\"1\" x:Name=\"cboUngebunden\" ItemsSource=\"{Binding Vornamen}\"&gt;&lt;\/ComboBox&gt;<\/pre>\n<p>Das Ziel ist nun, die Angabe des Attributs mit <b>ItemsSource <\/b>und dem Wert <b>{Binding Vornamen} <\/b>im Code behind-Modul so mit Leben zu f&uuml;llen, dass die gew&uuml;nschten Eintr&auml;ge in der ComboBox erscheinen.<\/p>\n<p>Dazu deklarieren wir zun&auml;chst eine private Variable f&uuml;r die Liste und eine entsprechende Eigenschaft, welche die Liste f&uuml;r die daran gebundenen Steuer-elemente verf&uuml;gbar macht:<\/p>\n<pre><span style=\"color:blue;\">Class<\/span> MainWindow\r\n     <span style=\"color:blue;\">Private <\/span>_Vornamen<span style=\"color:blue;\"> As <\/span>List(Of String)\r\n     <span style=\"color:blue;\">Public <\/span>Property Vornamen<span style=\"color:blue;\"> As <\/span>List(Of String)\r\n         Get\r\n             Return _Vornamen\r\n         End Get\r\n         Set(value<span style=\"color:blue;\"> As <\/span>List(Of String))\r\n             _Vornamen = value\r\n         End <span style=\"color:blue;\">Set<\/span>\r\n     End Property<\/pre>\n<p>Nun f&uuml;gen wir die Konstruktor-Methode hinzu, die daf&uuml;r sorgt, dass die Liste gef&uuml;llt wird und dass das XAML-Dokument das Code behind-Modul als Datenquelle verwenden kann (<b>DataContext = Me<\/b>). Danach f&uuml;llen wir die Liste namens <b>Vornamen <\/b>noch mit drei Eintr&auml;gen:<\/p>\n<pre>     <span style=\"color:blue;\">Public <\/span>Sub New()\r\n         InitializeComponent()\r\n         DataContext = Me\r\n         Vornamen = <span style=\"color:blue;\">New<\/span> List(Of String)\r\n         <span style=\"color:blue;\">With<\/span> Vornamen\r\n             .Add(\"Andr&eacute;\")\r\n             .Add(\"Dieter\")\r\n             .Add(\"Klaus\")\r\n         End <span style=\"color:blue;\">With<\/span>\r\n     End Sub\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<p>Das Ergebnis sieht wie in Bild 2 aus. Das ist eine einfache Version f&uuml;r das Binden von Daten aus einer Liste als Datenquelle eines <b>ComboBox<\/b>-Steuerelements.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_06\/pic_197_002.png\" alt=\"ComboBox-Steuerelement mit Eintr&auml;gen\" width=\"499,6607\" height=\"203,2518\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: ComboBox-Steuerelement mit Eintr&auml;gen<\/span><\/b><\/p>\n<h2>ComboBox mit Daten aus einer Liste von Objekten f&uuml;llen<\/h2>\n<p>Nun gehen wir einen Schritt weiter, denn nicht in allen F&auml;llen bestehen die Daten, die in einem <b>ComboBox<\/b>-Steuerelement zur Auswahl angeboten werden sollen, nur aus einem Feld. Die Daten kommen eher als Liste von Objekten einer bestimmten Klasse wie etwa <b>Kunde <\/b>oder <b>Person<\/b>. Diese enthaltenen die anzuzeigenden Daten als Eigenschaften.<\/p>\n<p>Diese Klasse sieht so aus:<\/p>\n<pre><span style=\"color:blue;\">Public Class<\/span> Person\r\n     <span style=\"color:blue;\">Private <\/span>_ID<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Private <\/span>_Vorname<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Private <\/span>_Nachname<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Public <\/span>Property ID<span style=\"color:blue;\"> As Integer<\/span>\r\n         Get\r\n             Return _ID\r\n         End Get\r\n         Set(value<span style=\"color:blue;\"> As Integer<\/span>)\r\n             _ID = value\r\n         End <span style=\"color:blue;\">Set<\/span>\r\n     End Property\r\n     <span style=\"color:blue;\">Public <\/span>Property Vorname<span style=\"color:blue;\"> As String<\/span>\r\n         Get\r\n             Return _Vorname\r\n         End Get\r\n         Set(value<span style=\"color:blue;\"> As String<\/span>)\r\n             _Vorname = value\r\n         End <span style=\"color:blue;\">Set<\/span>\r\n     End Property\r\n     <span style=\"color:blue;\">Public <\/span>Property Nachname<span style=\"color:blue;\"> As String<\/span>\r\n         Get\r\n             Return _Nachname\r\n         End Get\r\n         Set(value<span style=\"color:blue;\"> As String<\/span>)\r\n             _Nachname = value\r\n         End <span style=\"color:blue;\">Set<\/span>\r\n     End Property\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<p>In der Code behind-Klasse des Fensters <b>ComboBoxMitObjektListe.xaml <\/b>f&uuml;gen wir folgenden Code hinzu. Im Kopf beginnen wir mit den zwei privaten Variablen <b>_Person <\/b>f&uuml;r ein <b>Person<\/b>-Objekt und <b>_Personen <\/b>f&uuml;r eine Liste von Objekten des Typs <b>_Person<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Public Class<\/span> ComboBoxMitObjektListe\r\n     <span style=\"color:blue;\">Dim <\/span>_Person<span style=\"color:blue;\"> As <\/span>Person\r\n     <span style=\"color:blue;\">Dim <\/span>_Personen<span style=\"color:blue;\"> As <\/span>List(Of Person)<\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000197\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000197?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000197\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"dbce743e9d\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Auswahlfelder werden unter WPF meist mit dem ComboBox-Steuerelement abgebildet.  Manchmal braucht man diese nur f&uuml;r die Auswahl von Daten aus einfachen Auflistungen und die ComboBox-Steuerelemente selbst sind nicht an eine Eigenschaft des Code behind-Moduls gebunden. Wie man solche ungebundenen ComboBox-Steuerelemente einfach abbildet, zeigt dieser Artikel.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662019,66062019,44000015],"tags":[],"yst_prominent_words":[],"class_list":["post-55000197","post","type-post","status-publish","format-standard","hentry","category-662019","category-66062019","category-WPFSteuerelemente"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000197","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000197"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000197\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000197"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000197"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000197"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}