Databinding WPF



  • Guten Morgen zusammen,

    Ich bin Anfänger in C# / WPF. Nun versuche ich grade was kleines zu entwickeln und scheiter ein bisschen am Databinding.

    Ich habe eine kleine GUI. In dieser habe ich in einem Datagrid ein DataGridCheckBoxColumn. Die Checkbox würde ich gerne anhand eines Boolschen wertes im ViewModel setzen. Bisher sieht das so aus:

    <DataGridCheckBoxColumn Header="X" IsThreeState="false" Binding="{Binding BoolscherWert}" Width="auto" />
    

    Leider funktioniert das aber nicht. Weiß wer warum?

    <DataGridTextColumn Header="Überschrift" Binding="{Binding StringWert}" Width="*"/>
    

    Das hingegen funktioniert super. Beides sind Properties der gleichen Klasse.

    Würde nun gerne noch Daten an eine ComboBox binden. Die sieht im mom noch so aus:

    <ComboBox SelectedIndex="2" Grid.Row="4" Grid.Column="1"  />
    

    Kann doch nicht sein, dass es beim DataGridTextColumn so leicht zu binden ist, und ich für ne primitive ComboBox ein DataTemplate bauen muss. Das erscheint mir doch recht kompliziert. Kann mir da vielleicht auch jemand helfen.

    Danke schon mal.
    WtfWpf



  • wtfwpf schrieb:

    Leider funktioniert das aber nicht.

    Siehe meine Signatur. Siehst du im Debugger eine Meldung dazu?

    wtfwpf schrieb:

    Beides sind Properties der gleichen Klasse.

    Sicher, dass du BoolscherWert richtig geschrieben hast? Sicher, dass es ein public property (kein normaler Member) ist?

    wtfwpf schrieb:

    Kann doch nicht sein, dass es beim DataGridTextColumn so leicht zu binden ist, und ich für ne primitive ComboBox ein DataTemplate bauen muss. Das erscheint mir doch recht kompliziert. Kann mir da vielleicht auch jemand helfen.

    Das kommt schon ein wenig darauf an, was du an die ComboBox binden willst.



  • Das von mir geschriebene war ja nur ein bsp. In der tatsächlichen Anwendung sieht es anders aus, und es ist bedeutend mehr.

    Das Property war tatsächlich private. Das ist ja peinlich. Geht jetzt jedenfalls. Danke.

    Bleibt die Frage zur ComboBox.
    Da ist mir eigentlich egal was es ist. Ne Collection, nen Array. Würde mich da nach einem Bsp richten. Habe bisher aber nur Bsp mit DataTemplate gefunden.



  • wtfwpf schrieb:

    Das von mir geschriebene war ja nur ein bsp. In der tatsächlichen Anwendung sieht es anders aus, und es ist bedeutend mehr.

    Das ist ja noch schlimmer. Nicht nur, dass du wichtige Informationen nicht zeigst. Die Informationen, die du zeigst, sind noch dazu nicht echt.

    Da war es Glück, dass ich richtig geraten hatte.

    wtfwpf schrieb:

    Bleibt die Frage zur ComboBox.
    Da ist mir eigentlich egal was es ist. Ne Collection, nen Array.

    Welchen konkreten Typ deine Quelle hat, ist doch egal.

    Die Frage ist, ein Array (oder was auch immer) von was?
    Was soll angezeigt werden?
    Woran soll die Eingabe/Auswahl gebunden werden?

    Stichwörter: ItemsSource, DisplayMemberPath, SelectedItem



  • Ich kann doch nicht immer alles posten. Wer soll das alles lesen.
    Aber ich kann versichern, dass die Properties immer gleich geschrieben sind, weil ich per Copy/Paste ins XAML einfüge.

    Also aus der Datenbank kommt eine Riehe von Namen in form von Strings. Dazu noch DSNs. Wäre schön wenn ich dazu ein POJO bauen könnte was beides enhält, aber nur den Namen anzeigen.
    Wenn das nicht geht sondern nur die Strings, dann reicht mir das auch, da die Namen auch eindeutig sind.

    Also am liebsten wäre was in der art:

    class Characteristic
        {
            String DSN { get; set; }
            String Name { get; set; }
        }
    
        List<Characteristic> ....
    

    Und dann die Liste binden und nur den Namen anzeigen.

    Kenne da die Möglichkeiten nicht. Danke jedenfalls schon mal für die Hilfe.



  • wtfwpf schrieb:

    Ich kann doch nicht immer alles posten. Wer soll das alles lesen.

    Du sollst auch nicht alles posten. Du sollst den Code so weit wie möglich reduzieren, so dass der Fehler noch reproduzierbar bleibt.

    Zum Problem:
    Binde die ItemsSource der ComboBox an dein List<Characteristic>-Property, setze DisplayMemberPath auf "Name" (also ohne Binding). Jetzt kommt's noch drauf an, ob du die Auswahl des Benutzers als ganzes Characteristic-Objekt oder nur als einen der Member brauchst.

    Im ersten Fall bindest du SelectedItem an das Characteristic-Property für die Auswahl, im zweiten Fall bindest du SelectedValue an das String-Property für die Auswahl, und setzt SelectedValuePath auf den Namen ("DSN" oder "Name").



  • Vielen Dank für die Hilfe.

    Klappt glaube ich jetzt alles.


Log in to reply