Benutzer mit den meisten Antworten
Wpf DataGrid - DataGridComboBoxColumn

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
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ürgenPS: das static Binding hab ich aus dem Kopf geschrieben ohne es zu testen; keine Gewähr, dass die Syntax vollkommmen richtig ist
- Als Antwort vorgeschlagen Ionut DumaModerator Freitag, 11. Januar 2013 14:32
- Als Antwort markiert PeterForstmeier Samstag, 12. Januar 2013 09:50
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ürgenPS: das static Binding hab ich aus dem Kopf geschrieben ohne es zu testen; keine Gewähr, dass die Syntax vollkommmen richtig ist
- Als Antwort vorgeschlagen Ionut DumaModerator Freitag, 11. Januar 2013 14:32
- Als Antwort markiert PeterForstmeier Samstag, 12. Januar 2013 09:50
-
Hallo Peter,
Wenn Dir die Antwort von Jürgen Rohr geholfen hat, bitte markiere diese als Antwort,
Danke und Gruss,
Ionut