none
DataGridComboBoxColumn: Defaultwert und gewähltes Item anzeigen RRS feed

  • Frage

  • Hallo @ all!

    So, nun noch eine Frage zu DataGridComboBoxColumn:
    Ich habe ein DataGrid und darin eine DataGridComboBoxColumn. Die Werte, die die ComboBox enthalten soll, stammen aus einer Liste. Mittels ItemsSource verweise ich auf diese Liste. Nun möchte ich, dass immer das erste Element der Liste (also Station00) als Defaultwert angezeigt wird. Leider weiß ich nicht was ich für die Werte "SelectedValuePath", "SelectedValueBinding" oder "SelectedItemBinding" setzen soll.

    Mache ich es so (SelectedItemBinding auskommentieren):

    List<string> liste = new List<string>();
    // Liste füllen
    foreach (XmlNode part in element.ChildNodes)
    {
         liste.Add(part.Name);
    }
    
    // DataGridComboBoxColumn zum DataGrid hinzufügen
    dataGrid.Columns.Add(new DataGridComboBoxColumn
    {
         Header = "Station",
         ItemsSource = liste,
         SelectedValuePath = liste[0],
         SelectedValueBinding = new Binding(liste[0]),
       // SelectedItemBinding = new Binding(liste[0])
    }); 
    
    

    dann habe ich zwar als Defaultwert "Station00" stehen, aber wenn ich dann aus der ComboBox "Station01" etc. wähle, wird trotzdem sofort wieder "Station00" angezeigt.

    Mache ich es so (SelectedValueBinding auskommentieren):

    List<string> liste = new List<string>();
    // Liste füllen
    foreach (XmlNode part in element.ChildNodes)
    {
         liste.Add(part.Name);
    }
    
    // DataGridComboBoxColumn zum DataGrid hinzufügen
    dataGrid.Columns.Add(new DataGridComboBoxColumn
    {
         Header = "Station",
         ItemsSource = liste,
         SelectedValuePath = liste[0],
       // SelectedValueBinding = new Binding(liste[0]),
         SelectedItemBinding = new Binding(liste[0])
    }); 
    
    

    dann habe ich keinen Defaultwert stehen, aber wenn ich dann aus der ComboBox irgendeine Station wähle, wird diese auch angezeigt.

    Ich will aber beide Situation haben!

    Des Weiteren ist mir aufgefallen, dass es egal ist, ob ich liste[0] oder liste[6] nehme, es wird immer "Station00" als Defaultwert angezeigt.


    Was mache ich falsch?

    Montag, 17. Januar 2011 13:56

Alle Antworten

  • Hallo,

    SelectedValuePath gibt eine Property innerhalb Deines ViewModels an.

    Also mal angenommen liste enthält Elemente vom Typ "Person". Und der Typ "Person" enthält eine Property "Name", dann gibst Du an:

    SelectedValuePath = "Name";

    Über das SelectedValueBinding kannst Du das Binding zu der Property machen, wo die aktuelle Belegung gespeichert ist / wird.

    Hoffe, das war verständlich.

    Gruß

    Jus

     

     

    Montag, 17. Januar 2011 20:48
  • Hallo Jus.

    Danke für die Antwort :-)

    Das mit dem SelectedValuePath habe ich nun verstanden, aber mit dem SelectedValueBinding leider noch nicht so recht. Kannst du da noch irgendwie ein Beispiel geben?
    Ich habe zusätzlich mit SelectedItemBinding ein wenig rumprobiert und gesehen, wenn ich da z.B.

    SelectedValuePath = "Stationsnummer";
    SelectedItemBinding = new Binding("Name");
    (ohne SelectedValueBinding)

    nehme, und dann bei der Spalte "Stationsnummer" etwas aus der ComboBox auswähle, dann erscheint der Wert in der Spalte Name...
    Aber mit dem SelectedValueBinding komme ich nicht weiter?!

    Lg :-)

    Dienstag, 18. Januar 2011 07:21
  • Hallo LaLuna1987,

    das Binding von SelectedValueBinding musst Du auf die Property innerhalb deines ViewModels für das DataGrid setzen.

    Also angenommen, das DataGrid zeigt eine Liste von Personen an (List<Person>), und setzt diese als ItemSource des DataGrids, dann muss man die Property aus "Person" als SelectedValueBinding der ComboBox setzen, also z.B.

    SelectedValueBinding = new Binding("Name")

    und "Name" ist Property in der Klasse "Person".

    Gruß

    Jus

     

    Mittwoch, 19. Januar 2011 16:40
  • Hallo :-)

    Also ich habe im Voraus einen Fehler gemacht: Ich habe die Liste nicht in der Klasse erzeugt, in der auch die anderen Properties (wie Name etc.) hinzugefügt werden. Das habe ich nun geändert.

    Wenn ich dann folgenden Code benutze:

    Header = "Station",
    ItemsSource = liste,
    SelectedValuePath = "Station" 
    SelectedValueBinding = new Binding("Station");   
    SelectedItemBinding = new Binding("Station");

    dann dauert es ewig bis das DataGrid nach dem Starten erzeugt ist und angezeigt wird. Es wird auch kein Default-wert angezeigt und sobald ich eine Station aus der ComboBox in einer Zelle wähle, wird diese ComboBox außen rot umrandet und am Anfang der Zeile erscheint ein rotes Ausrufezeichen (Screenshots kann man hier nicht einfügen?).

    Wenn ich SelectedItemBinding weglasse, dann sind ebenfalls keine Defaultwerte vorhanden und es wird nun das gewählte Item der CombBox nicht angezeigt :-(

    Donnerstag, 20. Januar 2011 07:03
  • Hallo LaLuna1987, 

    (Screenshots kann man hier nicht einfügen?)

    Doch, man kann es via SkyDrive. Schau mal in dem folgenden Beitrag wie man das macht.

    Wie nutze ich den SkyDrive?

    Grüße,

    Robert

    Mittwoch, 9. Februar 2011 09:07
    Moderator