none
Wpf DataGrid - DataGridComboBoxColumn RRS feed

  • Frage

  • Hallo zusammen,

    ich habe folgenes ViewMode

    bla bla

    public List<WorkTimeKindDto> WorkTimeKinds                                     -> Soll ItemsSOurce für Combo sein

    public ObservableCollection<DailyWorkTimeViewModel> DailyWorktime  -> ItemsSource für Datagrid

    Das binden des DataGrids an DailyWorktime funktioniert.

    Nun habe ich im DataGrid eine DataGridComboBoxColumn die ich an WorkTimeKinds binden will,

    aber egal was ich mache, das klappt nicht. ENtweder wird die prop nicht gefunden oder ich bekomme

    'No governourelement' for ......

    Hat hier jemand einen Rat

    Danke schonmal

    Peter

    Mittwoch, 9. Januar 2013 13:34

Antworten

  • Hi,

    Dein Problem ist, dass nach dem Binden der ItemsSource des DataGrids jede Zeile (und somit jede ComboBox) ein "DailyWorkTimeViewModel" als DataContext hat ... und darin ist WorkTimeKinds halt nicht enthalten. Du kannst das auflösen, indem Du

    a) die ItemsSource der ComboBox via Elementname="..." an "DataContext.WorkTimeKinds" eines (im Tree übergeordneten) Controls (zB des DataGrids) bindest (finde ich persönlich nicht so schön, aber manchmal geht es halt nicht nach Schönheit) oder

    b) Du definierst die WorkTimeKinds als static in Deinem ViewModel und bindest entsprechend (ItemsSource="{Binding Source={x:Static ViewModel.WorkTimeKinds}}"). Das scheint mir den Sachverhalt, dass die WorkTimeKinds nur einaml für alle gelich existieren richtiger abzubilden.

    Gruß
    Jürgen

    PS: das static Binding hab ich aus dem Kopf geschrieben ohne es zu testen; keine Gewähr, dass die Syntax vollkommmen richtig ist

    Mittwoch, 9. Januar 2013 16:30

Alle Antworten

  • Hi,

    Dein Problem ist, dass nach dem Binden der ItemsSource des DataGrids jede Zeile (und somit jede ComboBox) ein "DailyWorkTimeViewModel" als DataContext hat ... und darin ist WorkTimeKinds halt nicht enthalten. Du kannst das auflösen, indem Du

    a) die ItemsSource der ComboBox via Elementname="..." an "DataContext.WorkTimeKinds" eines (im Tree übergeordneten) Controls (zB des DataGrids) bindest (finde ich persönlich nicht so schön, aber manchmal geht es halt nicht nach Schönheit) oder

    b) Du definierst die WorkTimeKinds als static in Deinem ViewModel und bindest entsprechend (ItemsSource="{Binding Source={x:Static ViewModel.WorkTimeKinds}}"). Das scheint mir den Sachverhalt, dass die WorkTimeKinds nur einaml für alle gelich existieren richtiger abzubilden.

    Gruß
    Jürgen

    PS: das static Binding hab ich aus dem Kopf geschrieben ohne es zu testen; keine Gewähr, dass die Syntax vollkommmen richtig ist

    Mittwoch, 9. Januar 2013 16:30
  • Hallo Jürgen

    ich habe deine beiden Wege versucht, und dann Weg b verwendet.

    Danke

    Peter

    Donnerstag, 10. Januar 2013 12:26
  • Hallo Peter,

    Wenn Dir die Antwort von Jürgen Rohr geholfen hat, bitte markiere diese als Antwort,

    Danke und Gruss,

    Ionut

    Freitag, 11. Januar 2013 14:34
    Moderator