Combobox Binding

ShinmA

Erfahrenes Mitglied
Hallo alle miteinander,

ich habe noch ein Verständnis Problem beim binden von Daten an eine Combobox in C# und hoffe ihr könnt mir dabei helfen.

Ich habe ein Objekt "Erfassung" welches Eigenschaften zur Verfügung stellt welche von
der Erfassungsmaske per DataContext gebunden werden.

Code:
DataContext = oErfassung;

Das Binden an eine handelsübliche Textbox stellt keine Probleme dar. Beim laden eines anderen Datensatzes werden die Daten auch automatisch geändert.

Code:
<TextBox Text="{Binding Sonstiges}" Name="txtSonstiges"/>

Allerdings lässt die Combobox sich partou nicht binden. Da ich es möglichste simpel gestalten möchte habe ich ein Itemtemplate erstellt in dem ein Textblock vorhanden ist.
Dadurch wollte ich erreichen, daß ich einfacher (?) auf den DataContext zugreifen kann - ob das wirklich die idealste Lösung ist könnt ihr mir auch sagen :)

Code:
      <ComboBox Grid.Column="1" 
                Grid.Row="4" 
                Name="cbArt" 
                Margin="0,0,0,7" 
                IsEditable="True"
                ItemsSource="{Binding}"
                IsSynchronizedWithCurrentItem="True">
        <ComboBox.ItemTemplate>
          <DataTemplate>
            <StackPanel Orientation="Horizontal">
              <TextBlock Text="{Binding Art}" />
            </StackPanel>
          </DataTemplate>
        </ComboBox.ItemTemplate>
      </ComboBox>

Mit dem Code rührt sich allerdings garnicht, dabei will ich nur das, im aktuellen DataContext vorhandene, Element "Art" anzeigen. Wenn das funktioniert füge ich dem Code noch statische Comboboxitems hinzu die als Auswahlmöglichkeiten dienen sollen.

Soweit mein Verständnis reicht sage ich der CB mit Itemssource, daß die CB auf den aktuellen DataContext des Windows zugreifen soll. Und mit IsSynchonizedWithCurrentItem das immer das aktuelle Items aus dem Context angezeigt wird. Mit dem Datatemplate greife ich darauf dann zu und zeige das aktuelle Item an.

Ich hoffe ihr könnt mir sagen wie die Bindung funktionieren wird :)
 
Hm. Eigentlich möchte ich aber keine Collection anhängen. Mein Ziel besteht nur darin einen
Wert des Objektes in der ComboBox anzuzeigen. Statische ComboBoxItems hinzufügen kann ich schon :)

Offtopic:
Über die Bindung zu dem Objekt erhoffe ich mir das automatisch die angezeigte Eigenschaft im Objekt aktualisiert wird um so die Daten der Maske (und der ComboBox) zu speichern. Leider findet man im Internet kaum brauchbare Konzeptideen /Beispiele die man dafür verwerten kann objektorientierte Daten aus einer Datenbank zu holen, per Binding anzuzeigen und wieder zu speichern. Wenn du einen brauchbaren Link dazu hättest wäre ich dir sehr dankbar :)
 
Welchen Sinn macht eine ComboBox ohne die Fähigkeit einer Auswahl? Wenn du nur einen Text anzeigen willst, dann nimm eine TextBox. Um eine Auswahl zu schaffen, musst du eine Collection binden.

Hier ein Beispiel, wie du ein DataSet binden kannst:
WPF: DataSet und Data Binding
 
Das Beispiel hatte ich schon und es hat mich nicht weiter gebracht.
Vielleicht habe ich mich falsch ausgedrückt, ich möchte es diesmal an einem Beispiel
veranschaulichen:

Wir haben einen Auftrag. Für diesen Auftrag ist ein Mitarbeiter zuständig. Nun haben wir
in der Firma mehrere Mitarbeiter. Diese sind auch in der ComboBox zum auswählen verfügbar indem ich die Comboboxitems im Code hinterlege. Nun will ich durch die Aufträge
die wir haben blättern und will das in der Combobox auch immer der aktuelle und zuständige
Mitarbeiter angezeigt wird. Das werde ich wohl dadurch erreichen das ich die Text/DisplayMember Eigenschaft der ComboBox fülle, oder? Die Frage ist nur wie ich das mache. Es geht mir also nicht um die Auswahl der ComboBox sondern ausschliesslich um den angezeigten Wert. Die Auswahlmöglichkeiten sind bereits vorhanden! :)

Ein DataSet binden, kommt soweit ich bis jetzt in der Materie bin, nicht in Frage da jeder Vorgang (Auftrag,Bestellung etc) eine eigene Klasse ist die ich bereitstelle. Diese Klasse arbeitet Intern mit einem DataSet und das wars. Für die eigentliche Bindung will ich ausschliesslich auf die public Eigenschaften der Klasse bzw. des Objektes zugreifen.

Wenn du Verbesserungsvorschläge für meine Denkweise hast, bitte her damit :)
 
Danke für deine Hilfe Norbert. Nachdem ich gerade eben einen Webcast zum Thema Databinding angeschaut habe viel es mir wie Schuppen von den Augen.
Die ganzen Forenposts haben mich verwirrt. Nachdem ich (zum ersten mal) das Output
debug fenster gesehen habe und so auch Bindingfehlermeldungen verfolgen konnte, hat
sich herausgestellt das SelectedValue oder DisplayMemberPath die falschen Eigenschaften der ComboBox sind. Nachdem ich die Texteigenschaft gebunden habe funktioniert alles einwandfrei :)

Viel dank für deine Mühe.


Lg ShinmA
 

Neue Beiträge

Zurück